zoukankan      html  css  js  c++  java
  • Nagle算法

    之前学习了TCP首部、TCP连接的建立、TCP连接的终结。我们知道TCP报文段中的数据字段是可选的,同时一般网络数据传输中,可能会出现要传输大块数据或小块数据,一般它们的比例是9:1。对于只携带小块数据的TCP报文段,如果出现在局域网中,对网络的影响比较少。如果出现在广域网中,就有可能出现网络拥塞,会降低网络的数据传输性能。为了解决这一问题,就提出了Nagle算法。

     

    1. 时延ACK

    通常来说,接收端收到数据后,不会立即发送ACK确认报文,而是会等待一段时间,看是否接收端有需要沿着与ACK报文同一方向传递的数据,如果有就将这些数据与ACK一起传递。这里等待的一段时间就是ACK时延的时间,一般是200ms。也就是说接收端接收到数据后,会等待200ms,等待那些需要沿着同一方向传递的数据,然后将他们一起打包传递。这样做可以减少网络中的小段数据报文数量,减少网络拥塞。

    ACK时延定时器和超时重发定时器:超时重发定时器,一般500ms,检测发送端发送一个报文后,是否在500ms内收到了ACK确认报文,没有会重发。而ACK时延定时器,一般200ms,用于接收端接收到数据后,延迟发送ACK确认报文,以等待接收端需要沿着和ACK同样方向传递的数据,组装为携带数据的ACK发送。

    image

    2. Nagle算法

    Nagle算法要求在网络中只能存在唯一的没有被确认的小段报文段。这就是说,如果已经发送了一个小报文段,在没有收到接收端对它的确认报文前,不能发送其他的小分组或小报文段。也就是说网路中某一个时刻只存在一个报文数据在传递。同时,发送端也会继续收集这些小分组,等收到上一个确认报文后,再将收集到的小分组组装成一个分组发送出去。这样做能减少网络中小分组数量,较少网络拥塞。并且接收端发送确认报文速度越快,接收端发送下个分组也越快。相比禁用Nagle算法的连接,启用Nagle算法的连接发送报文数量少,但总通信时间更长。

    缺点:对于实时性要求很高的系统,Nagle算法不适合。因为Nagle算法在某一个时刻只有一个报文在传输,会导致数据传递的不够及时。

  • 相关阅读:
    python开发初识函数:函数定义,返回值,参数
    py基础2--列表,元祖,字典,集合,文件
    python中的urlencode与urldecode
    使用pymysql进行mysql数据库操作
    docker 命令
    docker镜象
    docker的安装
    JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)
    linux远程复制和压缩文件的命令
    rosbag 初尝试
  • 原文地址:https://www.cnblogs.com/glsy/p/8579468.html
Copyright © 2011-2022 走看看