1.Nagle算法
例子:使用telnet的时候,可能发送的字节只有1,但是在网络传输中还是要加上tcp header,ip header(20B)
如下,为了发送1个字节,要多加上40字节.
小报文
因此为了避免发送小数据包.出现了nagle算法.
算法定义:任意时刻,最多只能有一个未被确认的小的分组,在该分组的ack收到前,会收集其他的小分组,然后收到ack后,一起发过去.
伪代码:
解释下就是:
1.如果发送内容>=MSS,立即发送
2.如果没有未被ack的包,立即发送
3.如果有包未被ack,那么缓存起来,当收到ack后,立即发送缓存的内容
tcp默认会开启Nagle算法,因此对小包的发送,有时候会延迟严重.
我们可以使用参数tcp_nodelay=true,关闭nagle算法
2.tcp_quickAck
同样,为了避免每次传输都回复ack.如果是这样的话,一个包就是为了告诉发送方我已经收到了,有点浪费的.
那么tcp协议就有了以下优化.
1.把ack尽可能搭乘别人的返回包返回.
2.等待顺风车的时间为40ms.
so,如果抓包看到耗时40ms,一定要注意,是不是没有打开 tcp_quickAck参数.
默认的,不会开启.