Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47545
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-22 10:10
文章分类
文章存档

2016年(37)

我的朋友

分类: LINUX

2016-11-22 10:26:02

先举两个事实:

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理解中,至关重要,这对于分析拥塞窗口初始值调整带来的问题,也很重要。


阅读(1698) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Inside TCP: 拥塞控制

给主人留下些什么吧!~~