在网上购物时如果你在同一家一天内买了几件商品.那收到货物可能是几件一起发来..这样可以降低邮寄的成本,①.一般来说一个数据包会对应一个ack确认②..但实现了经受延时的ack后.收到一个数据包并不会立刻发送这个数据包的确认ack,它将这个ack延迟,.tcp会开启一个定时器(实际实现一般是200ms,RFC规定小于500ms,如果太大会对交互时通信的体验造成影响).为什么有这个延迟呢因为如果在这个定时器超时前如果有正好有数据将要返回则将这个ack稍带发送出去③.并且如果在超时前收到多个数据.则几个ack可以合并发送.这样不必对于每个数据包都发送一个ack,这样可以减少报文交互次数.
注:
①:- -|| 如果你不这样做你买了10件商品..分别让快递公司发送十次货物岂不疯了.这个比喻不太恰当.毕竟在tcp中货物不是实际的数据,是ack的确认信息..这个例子我后来想了下不太恰当只说明了一个特性.关键的数据稍带ack没有说明以后想个好例子我再补充吧...
②:单独一个ack需要20字节的ip首部,20字节的tcp首部.你就为了发个一个确认是不是太浪费了?
③:这个其实是关键特性,在发送ack确认时.如果正好有数据向同方向的地址发送.这个数据中可以稍带这个ack确认信息.这个咱们再以后再说.