• TCP/IP详解(三)


    超时与重传:

    TCP在发送一个包时,启动一个定时器,如果在定时器溢出之前没有收到ACK,则认为发出的包丢失了,此时会重传丢失的包。这就是超时重传。

    其中定时器的时间不是一个固定值,它是根据RTT计算的。是一个变化量(RTO)。

    等待超时再重传比较慢,有一种更快的方法可以用于判断是否丢包,这就是快速重传。

    在接收端收到乱序的包时,会返回一个ACK,序号是它期望接受的下一个包。如果多次收到重复的ACK,则说明这个期望的包很有可能丢了。少次收到重复的ACK也许是因为包延时了。这个次数一般被设为3。即在收到第三个重复的ACK(即第四个相同的ACK)时,发送端会重发。

    拥塞控制:

    慢启动算法:在刚建立连接后或者超时重传时,会使用慢启动。即控制窗口cwnd最开始为1个包的大小,当到1个ACK,就加1个包的大小,这样,控制窗口会呈几何增长(2^k)。当第一次发生超时重传或者快速重传,慢启动门限ssthresh被设为cwnd/2,最低不小于2个包的大小。

    如果是超时重传,则cwnd被重新置为1个包的大小,并重新慢启动,直到cwnd>=ssthresh.

    避免拥塞算法:在慢启动到达ssthresh后,每收到1个ACK,cwnd增长1/k个包的大小,这里k=cwnd/segmentsize。正常情况下,一个RTT内会收到k个ACK,因此cwnd在1个RTT内近似增长1个包的大小(增长放缓)。

    快速恢复:如果慢启动遇到快速重传。则不将cwnd初始化为1个包的大小,这样增长太慢。而将它直接置为ssthresh+3。+3是因为收到了3个重复的ACK,由于线路中包的数量是恒定的,出来3个ACK,则可以再放3个新包进去。重传以后,可能不会马上就收到对重传数据的ACK。如果收到的还是重复的ACK,则每收到1个,cwnd增大1个包的大小。直到收到对重发数据的ACK,此时恢复避免拥塞算法。

  • 相关阅读:
    2020软件工程作业02
    2020软件工程作业01
    为什么需要平衡二叉树?
    手机号码和邮箱等联系地址,为什么不明文显示?
    请把重要的事看轻 ——2017年终总结
    万事皆空:随缘而定
    微服务:微服务架构模式译文说明
    Mysql 查询—按位运算
    解决:spring security 登录页停留时间过长 跳转至 403页面
    excel模板解析—桥接模式:分离解析模板和业务校验
  • 原文地址:https://www.cnblogs.com/johnsblog/p/3981190.html
Copyright © 2020-2023  润新知