美文网首页
网络协议分析-TCP(中)

网络协议分析-TCP(中)

作者: Odinmx | 来源:发表于2019-12-13 17:16 被阅读0次

    TCP的防丢失机制:

    为了防止数据丢失,TCP使用了“带重传的肯定确认技术”,要求接收方收到数据之后,向源站回送确认报文。

    发送方在发送下一个报文时,必须收到上一个报文的确认报文。发送方发出报文时,同时设定一个计时器,如果源站在限定时间内没有收到确认报文,则认为该报文丢失,重新发送。

    TCP防止重复和乱序的机制:

        - 由于TCP引入了重传肯定确认技术,可能会导致报文的重复。

        - 为了解决这个问题,TCP给每个报文都指定了一个唯一序列号,并要求接收方记住报文的序号,并对收到的报文进行检测。肯定确认协议会在确认信息中携带一个序号,这样接收方就能正确的把报文段与确认关联起来。

        - 由于引入了唯一的序列号,使得报文乱序问题也得到了解决。

    TCP确认机制的特点:

    TCP确认指明的是期望接收的下一个报文段的序号,而不是已经收到的报文段序号。

    累计确认。TCP的确认信息会报告已经积累了多少个字节的数据流。

    优点:

        ® 使得变长段传输方式下不会产生二义性

        ® 即便确认信息丢失也不一定会导致重传

    缺点:

    发送方不能收到所有成功传输的报文段确认信息,而只能知道已收到数据流中的某一个位置信息。

    TCP超时重传定时器设置:

    TCP软件把报文段从发出到收到确认所经历的时间段定义为RTT

    TCP自适应重传算法:

    TCP监视每个连接的性能,由此推算出合适的定时时限。当连接的性能变化时,TCP随时修改定时器时限来适应时延的变化。

    具体算法在此不表述。

    TCP的滑动窗口机制:

    TCP的滑动窗口机制与其他协议稍有不同,TCP滑动窗口设定了三个指针,左边界指针把已发送的字节流中已经得到确认的部分与未得到确认的部分区分开,右边界指针指出了序列中在未得到确认的情况下可以发送的最高字节的序号;已发与未发界限指针位于窗口内部,表示窗口内已发送和尚未发送的字节界限。

    TCP端到端的流量控制:

    为了实现端到端的流量控制,TCP连接双方各自设置了两个窗口。发送窗口和接收窗口分别对应发送缓冲区和接收缓冲区,这两个窗口大小是动态可调的。接收方主机在确认时,使用窗口通告,向发送方主机告知自己接收缓冲区大小,以便源站调整发送窗口的大小。

    TCP的坚持定时器:

    TCP不对单纯的ACK报文确认,只对含有数据的报文进行确认,如果一个只含有非0窗口通告信息,而这个信息丢失,则双方就会因为相互等待而陷入死锁。

    为了防止这种情况的发生,发送方使用一个坚持定时器来周期性的向接收方查询,以发现窗口是否增大。

    在确定坚持定时器的超时时间值时,TCP采用了指数退避策略。例如:首次超时时间计算出来是1.5秒,则第二次超时间为 1.5x2^1,第三次为1.5x2^2……以此类推。

    糊涂窗口综合症(SWS):

    SWS是指当接收方发出0窗口通告信息后,TCP应用程序从接受缓冲区读取1字节数据,这时由于缓冲区有可用空间,接收方会立即发送一个非0窗口通告信息,如此反复,会导致发送接收双方一直以小报文传输,降低了网络带宽利用率。

    解决方法:

        接收方:

        要等到缓冲区可用空间至少达到总空间的一半或者达到MSS之后才发送新的窗口通告。

        发送方:

        等数据足以填满一个能够达到最大长度的报文段后才从缓冲区发送出去。

        如果不够一个报文长度,则推迟发送或者等到收到一个确认时,才把这个小报文段发送出去。


    欢迎指出文章中的错误,谢谢

    相关文章

      网友评论

          本文标题:网络协议分析-TCP(中)

          本文链接:https://www.haomeiwen.com/subject/wwtqnctx.html