博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP 窗口协议
阅读量:3525 次
发布时间:2019-05-20

本文共 753 字,大约阅读时间需要 2 分钟。

这里使用可视化展现窗口协议

在上面这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口(offered window),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。由于窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。

当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:

1)称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。

2)当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
3)当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。
上面的图表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的ACK,则它被认为是一个重复ACK,并被丢弃。如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。 

滑动窗口的动态性

以该图为例可以总结如下几点:

1) 发送方不必发送一个全窗口大小的数据。
2) 来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对于确认序号的。
3) 正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。
4) 接收方在发送一个 ACK前不必等待窗口被填满。在前面我们看到许多实现每收到两个报文段就会发送一个ACK。

你可能感兴趣的文章
数据结构之队列
查看>>
Kafka 学习笔记(一)
查看>>
小明同学的实习生活(前言)
查看>>
小明的实习生活(一)
查看>>
小明的实习生活(二)
查看>>
CentOS系统的使用以及相应环境的搭建(一)
查看>>
小明的实习生活(三)
查看>>
使用CentOS镜像制作本地yum
查看>>
小明的实习生活(四)
查看>>
程序员必会——如何解决电脑连接不上github网站
查看>>
Windows环境下Oracle监听日志文件大于4G,导致程序连接超时。
查看>>
ArrayList源码解析
查看>>
不通过服务器,使用GitHub搭建一个静态的个人网站。
查看>>
Spingboot项目启动,游览器自动打开项目。
查看>>
SpingBoot系列教程(一):整合Mybatis-plus+Druid
查看>>
基于GitHub搭建一个静态简历模板
查看>>
SpingBoot系列教程(二):SpringBoot+Logback
查看>>
SpingBoot系列教程(三):SpringBoot配置全局异常/自定义异常
查看>>
Redis学习(一):简要介绍及同其他数据库对比
查看>>
Redis学习(二):五种数据结构及相关命令
查看>>