TCP/IP的一些需要理解的点(二)

1、TCP通信双方在经过3次握手之后建立起连接,然后双方可以互相发送数据和接受数据。TCP的发送方的发送窗口(当前网络下每次可以向接收方发送多大的数据量)由下面二者中更小的、限制更严格的决定:

  • 接收方的接收窗口
  • 发送方根据网络情况维护的拥塞窗口

2、(1)接收方首先要向发送方发一个包表示需要请求数据,在这个包的TCP头中就含有window size:xxx的信息,告诉发送方,它的接收窗口是多少。

(2)然而在发明TCP时,网络带宽都很小,所以在TCP头(总共只有20字节)中,window size的只给它留了16位,最大能表示65535字节,随着网络带宽增大,这个值不够用了,所以现在在TCP头外的Options内容体中去定义了一个Window Scale域,其中有一对键值Shift count:yyy,发送方收到包之后就知道接收方的接收窗口为xxx*yyy字节。

3、发送方如何根据通信中收发的包来维护自己的拥塞窗口:

(1)慢启动阶段:初始时给一个较小的拥塞窗口如2个MSS,每次得到接收方的确认包知道没有丢包的情况下(如发了3个包,收到这3个包的确认信息,则没有丢包),把拥塞窗口值乘以2,直到遇到拥塞点或者拥塞窗口大于等于临界窗口值。

(2)拥塞避免阶段:当拥塞窗口达到临界窗口值如16个MSS时,进入拥塞避免阶段,每次确认没丢包,拥塞窗口加一个MSS,直到遇到拥塞点。

(3)遇到拥塞点之后,有2种处理办法:快速重传(当发送方收到接收方对同一个包的3次重复确认包时,立刻重传重复确认包的下一个包)或超时重传(发送方发送了一个包,经过RTO的时间都没有收到接收方发回的确认包,发送方会重传这个包)。

(4.2)如果发生了快速重传,临界窗口变成了拥塞窗口除以2,把拥塞窗口设为临界窗口再加上3个MSS,然后回到(2)执行拥塞避免阶段。

(4.1)若发生了超时重传,临界窗口变成了拥塞窗口除以2,并把拥塞窗口设为1个MSS,回到(1)执行慢启动阶段。(要尽量避免发生超时重传,因为它要把拥塞窗口设置成1个MSS,重新慢启动)。

以上只是通用的一种拥塞控制的算法,其中对拥塞点怎么定义,临界窗口值怎么设置等问题,不同拥塞控制算法有不同的做法。建议了解Westwood和Vegas等算法。

猜你喜欢

转载自www.cnblogs.com/HankTown/p/12820362.html