什么是滑动窗口?
窗口是操作系统开辟的一块缓存空间 , 发送方在收到接收方ACK应答之前 , 必须在缓冲区保留已发送的数据 , 如果按期收到确认应答 , 数据就可以从缓冲区移除 。
什么是滑动窗口大小?
窗口大小就是指无需等待ACK , 可以继续发送数据的最大值 。
什么是累计确认?
假设发送方发送了100-199、200-299、300-399的数据包 , 接收方都收到了 , 但此时200-299的ACK发生了丢失 , 但是发送方依然可以通过300-399的数据包的ACK 400知道200-299的数据包已被发送方接收 , 这种模式就叫做累计确认 。
窗口大小由谁决定?
TCP首部中的窗口大小是接收方告诉发送方自己还有多少缓冲区可以接收 , 发送端会根据这个值来发送数据 , 避免接收端处理不过来 。
窗口大小由接收方的窗口大小决定 , 通常情况下发送方发送的数据大小不能超过接收方的窗口大小 。
发送方滑动窗口
文章插图
发送方的窗口主要分为四部分:
- #1:已发送并收到ACK确认的数据 , 1~31字节
- #2:已发送但未收到ACK确认的数据 , 32~45字节
- #3:未发送但总大小在接收方处理范围内的数据 , 46~51字节
- #4:未发送但总大小超过接收方处理范围的数据 , 52以后的字节
- SND.WND:发送窗口的大小(由接收方指定)
- SND.UNA:表示已发送但未收到ACK确认的数据的第一个字节 , 这里是绝对指针
- SND.NXT:表示未发送但是可以发送范围的第一个字节号 , 这里是绝对指针:
- #4区域的第一个字节可以通过SND.UNA+SND.WIND计算得出
接收方的滑动窗口
文章插图
接收方窗口分为三部分:
- #1+#2:已成功接收并确认的数据(等待应用程序读取)
- #3:未收到但是可以接收的数据
- #4:未收到并且无法接收的数据
- RCV.WND:接收方的窗口大小 , 该值会告诉发送方
- RCV.NXT:期望发送方下一次发送过来数据的字节号
- #4的第一个字节号可以使用RCV.NXT + RCV.WND获得
接收方窗口约等于发送窗口大小 。
【一文带你搞定TCP滑动窗口】
推荐阅读
- 电脑开机慢?三个步骤帮你搞定,电脑瞬间秒开机
- 交换机组网与PON组网哪个好?一文了解清楚
- 一文看懂"async"和“await”关键词是如何简化了C#中多线程的开发过程
- 一文看懂“超融合”和“虚拟化”的区别
- 开机进入纯净的Windows系统,一个设置就能搞定
- 北京旅行全攻略‖吃住行游购娱,一篇搞定
- 一次性搞定身份证复印 4种办法总有一个适合你
- 职业教育|?一篇文章带你摸透加拿大企业主工签!
- 花五分钟带你了解——DDD领域驱动设计
- 一文告诉你USB4和雷雳4到底是什么