Chinaunix首页 | 论坛 | 博客
  • 博客访问: 604504
  • 博文数量: 30
  • 博客积分: 125
  • 博客等级: 民兵
  • 技术积分: 1871
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-03 11:29
文章分类

全部博文(30)

文章存档

2014年(9)

2013年(21)

分类: LINUX

2013-01-22 21:40:38

先举两个事实:

1.TCP的发送窗口是一个滑动窗口,详见《TCP/IP详解:卷一》,成块数据流一章

2.TCP的发送窗口在Linux中的实现,称为tp->snd_cwnd,也就是发送端的拥塞窗口

(这里先不讨论接收端的通告窗口


    对初学者带来的问题是,cwnd每隔一个RTT增加一倍,这个说法很容易给人带来误解,以为窗口是分解不连续的,因而存在窗尾的概念。这样的理解与滑动窗口的连续性是矛盾的。因为滑动窗口是随时间改变的连续函数,每接收一个ACK,窗口就应该增加1。

    举个例子来详说:

    称前一个rtt的发送窗口为cwnd1,第二个rtt的发送窗口为cwnd2,按照初学者的理解,一般会认为,两个窗口之间必须间隔一个rtt,上一个窗口最后的ACK返回,下一个窗口才能发生,这样是不对的,最直观的反证就是cwnd的增长曲线是连续函数,而非分段函数。

    实际的增长过程,并没有“窗间”的概念,因为窗口是连续增长,一直有新的包入队列,同时有包出队列。cwnd每隔一个RTT增长一倍,这个说法,应该理解成,每收到一个ACK,窗口就递增,如果不丢包,中间不间断。

    滑动窗口这个概念,最早见于链路层流量控制,后来在TCP层和拥塞窗口一起实现。在NS2中,使用trace文件观察到的包发送过程往往不是连续,但不连续并不能说明这些包处在单独窗口内,只是出队列的时间有先后而已。

    滑动窗口在TCP理解中,至关重要,这对于分析拥塞窗口初始值调整带来的问题,也很重要。


阅读(8291) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~