TCP-IP之滑动窗口

前言

TCP在OSI七层模型中,属于第四层(传输层),帮咱们处理了传输层的细节。包括限流、丢包、网络传输乱序等问题。那TCP究竟是如何实现限流的呢?算法

若是你须要复习一下基础知识,请戳这里《TCP/IP基础十分钟入门》 ,博主比较懒,下周补上网络

接收端缓冲区被塞满

若是sender发送速度快,reciever处理速度慢。会发生什么事? ide

过一段时间,reciever的缓冲区被打满。动画

  • 当reciever缓冲区被打满后,经过ack(win=0)告诉sender不要给我发送数据了,我处理不了了。
  • sender就会中止发送数据。
  • 过一会,reciever处理数据后,缓冲区有了空闲空间。
  • 经过ack声明本身的窗口大小
  • sender继续发送数据

滑动窗口出场

TCP-IP之滑动窗口
经过动画咱们能够直观的看到窗口向右滑动,因此叫作滑动窗口。blog

分解动做

滑动前

TCP-IP之滑动窗口
图示都包含哪些信息呢?咱们分解来看。ci

  • 接收端的窗口大小为6
  • 窗口外,左侧为已经发送且已经收到ack,这部分数据能够丢弃了。
  • 12-14为已经发送,但未收到ack。(不能丢弃,有可能须要重发)
  • 15-17为未发送数据,因为未确认数据小于6,因此能够很快发送
  • 窗口外,右侧为未发送数据,但因为窗口已满,不能发送

滑动后

TCP-IP之滑动窗口

  • sender收到ack=12的确认包
  • 窗口向右滑动
  • 窗口内的数据改成13-18

    总结

    以上就是TCP/IP中的滑动窗口。
    滑动窗口也是服务限流的一种算法。it

    其余

    有些同窗可能会问,若是首先收到ack=13的确认包,滑动窗口是什么样的呢?咱们直接上图吧!
    TCP-IP之滑动窗口入门

相关文章
相关标签/搜索