一、TCP可靠传输原理
网络层的IP协议仅做到尽最大努力交付。TCP协议必须采取一些措施才能使传输变得可靠。
1. 理想传输条件
在理想传输条件下,不需要任何措施就可以实现可靠传输:
- 传输信道不产生差错
- 无论发送方以多快的速度发送数据,接收方总是来得及处理收到的数据
实际的网络不可能满足这两个条件。因此,TCP协议需要解决这两个问题,以保证可靠传输。
2. 停止等待协议
全双工信道的双方既是发送方,也是接收方。因此将发送TCP报文的称为发送方,而接收报文并回送确认的称为接收方。
停止等待协议就是每发送一个TCP分组后,等待对方回送确认,再发送下一个分组。
假设一个TCP连接中,端口A向端口B发送报文。下面分析停止等待协议中出现的情况:
- 全无差错
在全无差错的情况下,A发送分组M1,发送完成后暂停发送,等待B收到分组后,回送确认;A在收到B发回的确认后,再发送下一个分组。
- 分组发送出现差错
分组出现差错可以分为分组丢失和分组出错两种情况。无论哪种,B都不会回送确认。
为解决此问题,A中设有超时计时器,每当发送一个分组后,就要设置超时计时器开始计时。若在超时前收到了确认,即无差错情况,则撤销超时计时器;若在规定的时间内没有收到确认,就将此前的报文重传一次。这就是超时重传机制。
由此需要注意:
● 发送分组后,发送端需要暂时保留已发送的副本,留作重发使用。收到确认后才将副本清除。
● 分组和确认分组需要进行编号,明确收到确认的分组和没有收到确认的分组。
● 超时计时器的超时时间需要比平均往返时间稍长,具体的设置受大量不确定因素影响,将在实现部分讨论。 - 确认出现差错
B中收到了分组,但是回送的确认出现了差错。这里可以分成两种情况:
● 确认丢失:发送的确认发生了丢失的情况。此时A认为分组没有成功发送,会重发一次。当B收到重发的分组后,做两项操作:丢弃重复的分组;重新向A发送确认。
● 确认迟到:发送的确认由于网络状况的原因,确认在超时后才到达。
对于B而言,需要进行的操作不变;而对A而言,将会收到重复的确认。对于重复的确认,只需要丢弃即可。
利用上面所述的确认重传机制,可以实现在不可靠的传输网络上进行可靠的通信。
这样的可靠传输协议常称为自动重传请求。
● 信道利用率
停止等待协议的优点是实现简单,但缺点是信道利用率太低。
假设A和B之间有一条直通的信道传输分组:
A发送分组的时间是TD,B发送确认的时间是TA,往返时间为RTT。忽略接收分组的处理时延和发送确认的等待时延,发送分组共需要的时间为T