TCP/IP 学习 --- 3 (流量控制和拥塞控制)

1 滑动窗口,按照的我个人理解,就是tcp的确认机制,当一个发送的报文得到确认后,才会发送第二个报文段。

2 发送窗口涉及的四块内容:1、已发送而且得到确认的数据(已经丢弃)2、已发送但是没有收到确认的数据(在发送窗口之中)、3允许发送还没发送的数据(在发送窗口中)4、发送窗口外但是在发送缓冲区中的数据

3 防止丢失确认报文,导致无限期等待。tcp引入持续计时器。当A收到对方的零窗口通知时,就启用该计时器,时间到则发送一个1字节的探测报文,对方会在此时回应自身的接收窗口大小,如果结果仍未0,则重设持续计时器,继续等待。

4 拥塞控制: 

  1、普通情况:

   (1) 发送方维持一个变量叫做“”拥塞窗口(cwnd),该变量和接收端窗口共同决定了发送者的发送窗口;

     (2) 当拥塞窗口小于慢开始门限时,拥塞控制成指数增长。

   (3) 当拥塞窗口等于慢开始门限时,拥塞控制每次加1个报文段,既成线性增长。

   (4) 当网络真的出现拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将拥塞控制(cwnd)设为1个报文段,执行慢开始算法(指数增长)

   2、快重传机制:按照我的理解其实是,重复发送重传丢失包的请求。 接收方建立的机制,如果一个包丢失,则对后续的报继续发送针对该包的重传请求(直到丢失的数据发送过来)。一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包。

   (1)此时,发送方开始执行“快恢复”算法:

  1. 慢开始门限减半
  2. cwnd 设为慢开始门限减半后的值

执行拥塞控制(高起点,线性增长)

   (2)此时,接收方执行的过程: ----- 快速恢复过程中,cwnd经历了 降升降 的过程。

    1)接收方发送第1次数据确认ACK。这里假设序号6657,表示前6676全部接受完。

    2)接收方重复发送多3次同样的数据确认ACK。这重复的3次ACK,前两次cwnd保持不变,第3次时,ssthresh变为cwnd的一半。这里假设cwnd原来为2426,于是ssthresh=2426/2=1213.但是ssthresh必须要=报文段大小整数倍。于是ssthresh=256*4=1024.注意不能=256*5;同时cwnd=ssthresh+3×报文段大小=1024+3*256=1792;3次重复确认的行为结束。

   3)发送方会重传丢失的6675报文段。但是在重传期间,未必能立即到达接收方。在这期间,接收方会继续重复确认6657。与(2)中的不同,(2)中前2个重复确认cwnd保持不变。在这里,每次重复ACK,cwnd增加一个报文段长度(相当于慢启动的增长速度)。

   4)最后接收方接收到丢失的分组,然后发送一个更大的ACK,因为在丢失期间,有接收到其他更大序号的报文段。这时,cwnd调整=ssthresh,并且立即执行一次慢启动(当cwnd<=ssthresh会执行慢启动),调整=ssthresh+1个报文段=1280。之后会采取拥塞避免算法。 

     

  

    5 总的发送方拥塞控制图

    发送方拥塞控制图

猜你喜欢

转载自www.cnblogs.com/zanyouxin/p/9204626.html
今日推荐