面试被问到这个,这里总结下:
在tcp建立连接发送数据时有可能产生小分组(称为微小分组),不如每次发送一个字节,会产生41字节的分组,20字节的IP首部,20字节的tcp首部和一个字节的数据.在局域网上出现这些小分组一般不会出现问题,因为局域网一般不会出现网络拥塞.但是在广域网上,这些小分组很可能会增加拥塞出现的可能.这时就需要Nagle算法,
该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组.相反,tcp收集这些少量的分组,并在确认到来时以一个分组的方式发出去.
该算法的优越之处在于它是自适应的:确认到达得越快,数据也就发送得越快.伪代码如下所示:
if there is new data to send if the window size >= MSS and available data is >= MSS send complete MSS segment now else if there is unconfirmed data still in the pipe enqueue data in the buffer until an acknowledge is received else send data immediately end if end if end if但是有的时候我们需要关闭Nagle算法,一个典型的例子就是X窗口系统服务器:小消息必须无时延地发送,以便为进行某种操作的交互用户提供实时反馈.