计算机网络之八:TCP协议(2) TCP可靠传输的实现

一.以字节为单位的滑动窗口

在TCP里,接收端(B)会给发送端(A)报一个窗口的大小,叫Advertised window。

1.在没有收到B的确认情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在

未收到确认之前都必须暂时保留,以便在超时重传时使用。

2.发送窗口里面的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前连续

发送更多数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。

3.发送窗口后沿的后面部分表示已发送且已收到确认。这些数据显然不需要再保留了。

4.发送窗口前沿的前面部分表示不允许发送的,应为接收方都没有为这部分数据保留临时存放的缓存空间。

5.发送窗口后沿的变化情况有两种:不动(没有收到新的确认)和前移(收到了新的确认)

6.发送窗口前沿的变化情况有两种:不断向前移或可能不动(没收到新的确认)

二.超时重传时间的选择

TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。这种重传的概念很简单,但重传时间的选择

确是TCP最复杂的问题之一。TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间

这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间。超时重传时间RTO略大于加权平均往返时间。

三:选择确认SACK

如果收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?

答案是可以的,选择确认就是一种可行的处理方法。

如果要使用选项确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都事先商定好。如果使用选择确认,

那么原来首部中的“确认号字段”的用法仍然不变。SACK文档并没有明确发送方应当怎么响应SACK.因此大多数的实现还是重传所有未被确认的数据块。

四:TCP的流量控制

一般说来,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

五:TCP的拥塞控制

在计算机网络中的链路容量,交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能

就要变坏。这种情况就叫做拥塞。

拥塞控制方法:

1.慢开始和拥塞避免

2.快重传和快恢复

3.随机早期检测

请使用浏览器的分享功能分享到微信等