本文主要是介绍Tcp参数 tcp_nodelay tcp_quickAck,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.Nagle算法
例子:使用telnet的时候,可能发送的字节只有1,但是在网络传输中还是要加上tcp header,ip header(20B)
如下,为了发送1个字节,要多加上40字节.
小报文
因此为了避免发送小数据包.出现了nagle算法.
算法定义:任意时刻,最多只能有一个未被确认的小的分组,在该分组的ack收到前,会收集其他的小分组,然后收到ack后,一起发过去.
伪代码:
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
解释下就是:
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参数.
默认的,不会开启.
这篇关于Tcp参数 tcp_nodelay tcp_quickAck的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!