zoukankan      html  css  js  c++  java
  • TCP数据流稳定性--TCP分片,重组及乱序

    1、IP分片的情况。IP软件包有一个[分片]和[重组]模块,一个IP数据报在传输中可以被ip软件包的[分片]模块分片,在目的接收端B的IP软件包 的[重组]模块重新组合。接收端B的IP软件包如果收到乱序的IP报文,是不会把这个包交付到高层TCP协议的,直到收到同一个IP报文的全部分片。所 以,如果发送端的FIN被分片,接收端B在收到完整的此IP数据报之前,TCP模块不会收到这个包的任何分片。

    2、发送端A发送了一个FIN,这仅代表发送端A想终止传输,并不代表另一端B想终止。这就是说,终止双向链接需要4次握手断开(也有3次握手断开,类似 3次握手链接),比如,发送端A向发送端B发一个查询请求,发送端A已经没有更多的数据要发送了,因此可以发送FIN请求一端断开,也称为半断开,然后, 另一端B则需要时间处理请求,再把查询结果返回给A,最后B发送FIN。
    1)首先是A发送FIN,然后收到来自B的对这个FIN的确认,此时,发送端A将不能发送任何数据包,但可以接受B发来的数据包(这是非常常见的传输模式,客户端发完,终止链接)。
    2)发送端B仍旧可以继续发送数据包,直到高层没有更多的数据,发送端B发送FIN,A收到后发送对这个FIN的确认。此时,双方都不能再传输任何数据了。

    3、TCP协议规定,对于收到的乱序报文并不丢弃,而是缓存下来(这样做是为了减少更多的重传),立即发送希望接受的报文确认。例如:发送端A发送了以下几个包:第一个:1001-1100,第二个1101-1200,第三个FIN包(序列号是1201,一个虚字节)。
    1)第二个包在传输的过程中丢失了,接收端收到第三个包后并不丢弃,而是缓存下来,然后,立即发送一个ACK,确认号是1101(这样做的目的是不必等到发送端A的第二个包超时后重传,发送端A收到3个同样的ACK后立即重传,这是快速重传的概念)。
    2)当发送端A收到3个确认号都是1101或者第二个包的超时计时器到时间后,立即重新发送第二个包(之所以可以重传,是因为TCP协议在接收端和发送端都各自建立了两个发送、接收缓存)。
    3)这样,当接收端B收到来自A的第二个包后,缓存中的数据都是按序的了。
    4)对于按序包,接收端B对序列号的最后一个字节+1,也就是发送确认号是1202的ACK包。

    5)发送端A收到确认号是1202后,便不能再发送任何数据了。

    TCP 的传输机构有多个定时器。当一个包发送时,重发定时器开始计数;当收到确认信号后,重发定时器停止计数。如果超过设定时间段还没有收到确认信号,就 重发该包。一个比较棘手的问题是如何设置该时间段。如果太长,当网络传输错误增加时将导致不必要的等待时间;如果太短,就会产生过多的重复包从而降低网络 的反应时间。现代TCP协议根据实际情况对重发定时器进行动态设定。

         不 管重发过程执行得多么有效,很少的丢失包就能严重地降低TCP连接的流量。每个未收到的包或包的片段只会在重发定时器超时的时候才会丢失。在数据重发 时,接收过程一直在递送这些重发的数据,这样就使总体的数据传输陷于停顿,直到丢失的数据被取代为止。这些重发过程导致基于TCP的连接有时处于不稳定状 态。

    IP丢包:

    1。接受方:在以太网上,服务端有可能响应不过来(大量客户端有读写需求),服务端访问密集,丢弃包在所难免

    2。 发送方:大量客户端同时请求服务器发送数据,并且通告窗口很大,那么服务器会很快的把分组送到网卡上,考虑一种比较极端的情况,网络中还有大量流量占用带宽,致使 服务器不能迅速将数据发送出去,而网卡可以缓存的分组数是有一定限制的,那么肯定会有数据在未发送前就被丢弃了!而接收方对这种情况毫无所知,不会更改通 告窗口的大小,即流量控制不会起作用

     3。网络传输

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/derekchen/p/1524415.html
Copyright © 2011-2022 走看看