异步编程NIO(Netty, Vert.x, Akka和Node.js)

Nagle算法和 TCP Delayed ACK

2019-07-15  本文已影响0人  taj3991

    群里看到大神写的一篇文章说一次普通的http调用耗时很高,然后分析了是因为Nagele算法和Delayed ACK结合导致的。看完之后突然想起之前用spring cloud测试不同服务之间接口调用耗时没啥逻辑但耗时就是有几十毫秒的耗时,恍然大悟,可能也是因为文章说的这个原因导致的。原文地址:简单的 HTTP 调用,为什么时延这么大?

Nagle算法

Nagle算法是为了减少网络数据包的发送来提升网络效率的一种算法。http接口调用使用的是http协议,http协议属于应用层协议,发送的数据都会加上下层的tcp和ip协议头。比如我们只有1个字节的数据要发送,也会加上tcp协议头(20字节)+ip协议头(20字节)+1字节数据本身,这种有效载荷是及其低下的,于是就可以用Nagle算法来提升有效载荷,所以Nagle算法是为了处理小报文段数据发送的问题,是应用在tcp协议层,Nagle算法有以下几个特性:

TCP Delayed ACK

TCP Delayed ACK是为了提升网络数据包的发送效率而采取的一种手段。TCP协议为了保证数据传输的可靠性收到了一个数据包就会回应一个ACK位表示确认收到数据包。只是单纯的发送一个确认就需要发送40个字节(20字节TCP协议头+20字节IP协议头),于是为了提升网络效率,就会将几个数据包的响应组合在一起为单个响应或者将ACK响应与数据一起发送给对方,从而减少协议开销。
TCP Delayed ACK有以下几个特性:

上一篇下一篇

猜你喜欢

热点阅读