Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504180
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: 系统运维

2012-02-14 09:27:49

不知道是翻译的原因,还是本来就是如此,TCP/IP详解V1上对于nagle算法说的不是特别清楚。书上的原文是

书上附有一个例子,对第14、15报文段进行了描述。看书的时候,觉得这里不是太清楚,觉得和我们通常TCP的传输方式不是太一样,尤其是与滑动窗口的思想相违背,滑动窗口不是就让我们可以fill the pipe吗,那不就是意味着可以连续发送多个报文,以提高速度吗。于是找到RFC896,想搞清楚这事:

RFC896中的原文是
  1. The solution is to inhibit the sending of new TCP segments when
  2. new outgoing data arrives from the user if any previously
  3. transmitted data on the connection remains unacknowledged.
其中关键点在于那个when限制的条件表达式,不是不能发送多个报文,而是不会由于用户想要改送数据,就直接请求协议栈发送。那什么时候发呢,由对端的ACK驱动,即接收到ACK,就发送数据。在接收到ACK时,能够发送多少呢?由滑动窗口决定。那如果对方没有必要给ACK呢?这就是RFC中if条件所说的情况,如果没有unacknowledged报文,可以直接发送。

并且RFC规定的情况,并不仅限于小分组,nagle并不区分大小,只限定原则。RFC中有对于各种情形举例描述,说明了这是一个相当自适应的算法,适合于各种情况:交互式的,批量式的,快速链路,慢速链路,总之,就是通吃。

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

上一篇:vxworks上的tcp keepalive

下一篇:[TCP]慢启动

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