传输层协议是分层体系结构的核心部分,它们提供应用程序进程之间的逻辑通信。这些过程使用逻辑通信将数据从传输层传输到网络层,并且这种数据传输应该是可靠和安全的。数据以数据包的形式传输,但数据的可靠传输出现了问题。
传输数据的问题不仅出现在传输层,也出现在应用层和链路层。当一个可靠的服务运行在一个不可靠的服务上时就会出现这个问题,例如,TCP(传输控制协议)是一种可靠的数据传输协议,它是在一个不可靠的层之上实现的,即互联网协议(IP)是端到端的网络层协议。
在此模型中,我们通过可靠通道设计了协议的发送方和接收方。在数据的可靠传输中,该层从上层接收数据,以段的形式分解消息,并将报头放在每个段上并传输。下层接收段并从每个段中删除标头,并通过添加到标头使其成为一个数据包。
从上层传输的数据没有损坏或丢失的传输数据位,并且所有传输的顺序与它们发送到下层的顺序相同,这是可靠的数据传输协议。此服务模型由 TCP 提供给调用此数据传输的 Internet 应用程序。
类似地,在不可靠的通道中,我们设计了发送端和接收端。协议的发送端从上层调用rdt_send()然后它将要传递的数据传递给接收端的应用层(这里rdt-send()是发送数据的函数,其中rdt代表可靠的数据传输协议,_send() 用于发送端)。
在接收端,rdt_rcv()(rdt_rcv()是接收数据的函数,其中-rcv()用于接收端),当数据包从不可靠通道的接收端到达时将被调用。当rdt协议要向应用层传递数据时,它会调用deliver_data()(其中deliver_data()是向上层传递数据的函数)。
在可靠数据传输协议中,我们只考虑单向数据传输的情况,即数据从发送端传输到接收端(即只在一个方向上)。在双向(全双工或双方传输数据)的情况下,数据传输在概念上更加困难。虽然我们只考虑单向数据传输,但重要的是要注意我们协议的发送端和接收端需要双向传输数据包,如上图所示。
为了交换包含需要传输的数据的数据包,rdt 的双方(发送和接收)还需要双向(即来回)交换控制数据包,rdt 的双方都将数据包发送到另一端调用 udt_send()(udt_send() 是用于将数据发送到另一端的函数,其中 udt 代表不可靠的数据传输协议)。