TCP 可靠传输实现
RDT(可靠数据传输协议可靠数据传输协议),网络层提供无连接、尽最大努力交付,因此网络的主机中运输层需要负责可靠交付
① 实现校验和,通过新增 checksum(校验和),从而对数据进行校验。
② 接收方根据计算校验和结果判断数据报是否出错,并回复 ACK或 NACK。
③ 发送方根据接收回复的报文,如果序号正确并且没有出错则完成本次传输。
RDT2.2与 RDT2.1的功能相同,但仅使用 ACK,也就是说没有了NACK。将接收方在数据包出错时回复-1(NACK修改为回复当前已经确认的包的序号。
前面的RDT2.1、2.2协议只考虑比特位翻转这一种情况,通道上还可以发生其他状况,如丢包和延迟,RDT3.0针对新的情况做出了改进。 当发送方发送的数据包丢失或者延迟时,或者发送方成功发送但接收方回复的包丢失或延迟,都可能导致发送方长时间的等待。因此RDT3.0为发送方增添新的机制,在一段“适当”的时间内没有收到ACK回复,就重发当前数据包。
在RDT3.0协议中,已经能够应付通道出现比特位翻转导致的错误、丢包、延迟等情况,然后出现这些情况时都需要等计时器超时重发,因此RDT3.0的性能很差,特别是当传输距离非常远时,严重影响链路资源利用。 Select Response选择响应通过流水线的技术进行改进。通过在发送方接收方设置窗口,允许发送者最多有N个未确认的数据包,并对每一个未确认的数据包设置一个计时器,任一计时器超时则重传对应的数据包;接收方逐个对所有正确收到的分组进行应答,并对缓存失序的数据包。
TCP reno考虑了网络可能出现拥塞状况,是应用最广泛且较为成熟的算法。 TCP reno算法包含慢开始、拥塞避免和快重传、快恢复机制。