zoukankan      html  css  js  c++  java
  • TCP交互数据流

    1:概念:TCP的数据交流有两种,第一种是成块的数据交互,第二种是成块的数据交流,在交互数据流中,常用的算法有经受时延的ACK确认,还有Nagle算法

    2:TCP交互数据运用的算法一,经受时延的确认

    列如在上发,这是没有经过优化的数据传输,总共需要传送4个报文,但是实际上2,3报文可以合并为一个报文传输,此时就总共需要三个报文。

    通常TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时这种现象为数据捎带的ACK)。绝大数实现采用的时延为200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送。

    报文3,6,9,叫做经受时延的ACK,经受时延的ACK通常定时器被设计位200ms,所有6报文的发生时间-3报文的发生时间,大约是200ms,这是bsdi端的,另一端的数据,为什么没有经受时延的ACK,因为在定时器到时的之前,正好有发送的数据需要发送,因此没有单独的经受时延的ACK发送

    3:Nagle算法

    Nagle算法要求TCP连接上最多只有一个未被确认的未完成小分组,在该分组确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到达时以一个大的分组发出去。

    该算法的优点在于它是自适应的:确认到达得越快,数据也就发送得越快。可以减少网络上的微小分组数目,降低拥塞出现的可能(局域网这些小分组通常不会引起麻烦,但在较慢的广域网则存在拥塞的可能)。但相应的,因为不是立即ACK,也会增加更多的时延。

    有时我们也需要关闭Nagle算法,例如鼠标移动必须无时延地发送,以便为用户的交互提供实时的反馈。

    流程:
    (1)发送端TCP将从应用进程接收到的第一数据块立即发送,不管其大小,哪怕只有一个字节。
    (2)发送端输出第一块数据后开始收集数据,并等待确认。
    (3)确认未达到时,若收集数据达到窗口的一半或一个MSS段,立即发送。
    (4)确认到达后,把缓冲区中的数据组成一个TCP段,然后发送。


    记住Nagle算法是当收到一个ACK时候就应该应答一次,报文段12可以认为是一个经受时延的ACK,报文段14是对12报文段进行的确认,报文段13的回答是15,所以客户端是遵守Nagle算法的

    4:关于Nagle算法的使用条件

    虽然在交互的情况下,大部分因该开启Nagle算法,但是在比如说Xwindows的条件下,如果开启Nagle算法,则会有明显的时延,不应该开启





  • 相关阅读:
    Sencha Touch id 和 itemId
    解决VS报表.rdl 显示乱码“小方块”问题
    C# 调试程序弹出 没有可用于当前位置的源代码 对话框
    解决DropDownList 有一个无效 SelectedValue,因为它不在项目列表中。这是怎么回事?
    CS0016: 未能写入输出文件“c:windowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Filesdata34aae0607daa87dApp_Web_addadvice.aspx.cdcab7d2.ekhlcbjd.dll”--“目录名无效。 ”
    利用微软类库 Visual Studio International Pack 汉字转拼音
    【C#】线程之Parallel
    【C#】线程之Task
    【C#】线程协作式取消
    【C#】属性(Attribute)
  • 原文地址:https://www.cnblogs.com/SmileLion/p/5863559.html
Copyright © 2011-2022 走看看