TCP发送窗口拥塞窗口试题分析

简介: 考研试题分析

题目一:

来源2015年408计算机综合


试题链接:经过 4 个 RTT 后,甲的发送窗口是()。__牛客网

 

主机甲和主机乙新建一个TCP 连接,甲的拥塞控制初始阈值为 32KB,甲向乙始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16KB 接收缓存,并对每个数据段进行确认, 忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发送超时 的情况下,经过 4 个 RTT 后,甲的发送窗口是(A)。

A.1KB

B.8KB

C.16KB

D.32KB


发送窗口大小取决于min(rwnd,cwnd).

其中rwnd是接收缓存的空余大小,表示接收方还能接收多少。

cwnd就是我们常常画慢增长曲线,拥塞避免曲线等等分析的纵轴数值。

这里,其实很明确的告诉我们接收缓存只进不出,因此在不断减小。可是我们有一个思维惯性是喜欢思考有趣的部分,画cwnd的变化,自以为这个分析好了问题就手到擒来了,切不可忽视rwnd。这里就是个例子。


cwnd从1MSS = 1KB开始,一个RTT后变为2KB,两个RTT后变为4KB,3RTT后变为8KB,4个RTT后变为16KB


同时呢,接收缓由16KB→15KB→13KB→9KB→1KB16KB→15KB→13KB→9KB→1KB


通知窗口值,代表接收缓存剩余值(KB) 拥塞窗口大小(KB) 发送窗口大小(KB)
初始          16           1                1
经过第一个RTT        16-1=15           2           min(15, 2)=2
经过第二个RTT        15-2=13           4           min(13,4)=4
经过第三个RTT        13-4=9           8           min(9,8)=8
经过第四个RTT         9-8=1          16  通知接收缓存只有1KB了,发送窗口取min(1, 16)=1KB


经过一个RTT,第二次发送时,rwnd = 15KB,cwnd = 2KB,发送窗口取较小值:2KB


经过两个RTT,第三次发送时,rwnd = 13KB,cwnd = 4KB,发送窗口取较小值:4KB


经过三个RTT,第四次发送时,rwnd = 9KB,cwnd = 8KB,发送窗口取较小值:8KB


经过四个RTT,第五次发送时,rwnd = 1KB,cwnd = 16KB,发送窗口取较小值:1KB


当然第五次发送之后接受窗口就满了,主机甲就会周期性的只发送一个字节数据的报文段,一旦主机乙的缓存有空,确认报文段就会出现非0的通知窗口值,当然这里是题目要求,主机乙的数据不被取走,仅仅为了计算,并非实际情况。


再来看一题:

题目二:

来源为2014年408计算机综合

链接:从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发__牛客网

 

主机甲和乙已建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是 (A)

A.10KB

B.12KB

C.14KB

D.15KB

分析:


当t时刻发生超时,TCP拥塞控制,拥塞窗口发生乘性减,把ssthresh设为8的一半,即为4,且拥塞窗口设为1KB。然后经历10个RTT后,拥塞窗口的大小依次为1(t时刻初始)、2(第一个RTT后)、4(第二个RTT后)、5、6、7、8、9、10、11、12(第10个RTT后),而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为10KB,所以选A。其中,1、2、4为慢启动,到达了阈值后开始加性增->5,6,7,8,9,10,11,12.


试题三:

题目来源:北京航空航天大学-2015-961_计算机学科专业基础综合

链接:主机甲中的应用程序使用TCP协议向主机乙发送20KB的数据__牛客网

 

主机甲中的应用程序使用TCP协议向主机乙发送20KB的数据。在建立TCP连接后,主机甲按照慢启动(慢开始)和拥塞避免机制发送数据,其拥塞窗口初始值为1,慢启动门限值ssthresh为8,且每次发送TCP报文段均搭载1KB的用户数据。


1. 如传输过程中未发生确认超时,且不考虑流量控制,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?各轮次的拥塞窗口宽度是多少?


2. 如传输过程中未发生确认超时,主机乙返回的确认报文段中“窗口(Window size)”字段值始终为6KB,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?


分析

1.题目说了不考虑流量控制,而流量控制是TCP接收方针对TCP发送方采取的措施,能够消除发送方使接收方缓存溢出的可能性。

也就是说,这里接收方接收缓存无限大。而发送窗口=min(接收缓存的通知值,拥塞窗口大小)。所以这里发送窗口=拥塞窗口。

并且收到的确认不超时,不考虑超时重传。

第一次:发送了1KB,收到确认之后拥塞窗口变为2KB,发送窗口也变为了2KB,此时共发送1KB

第二次:发送了2KB,收到确认之后拥塞窗口变为4KB,发送窗口变为了4KB,此时共发送3KB

第三次:发送了4KB,收到确认之后拥塞窗口变为8KB(准备开始加性增),发送窗口变为了8KB,此时共发送7KB

第四次:发送了8KB,收到确认之后拥塞窗口变为9KB,发送窗口变为9KB,此时共发送15KB

第五次:发送了9KB,收到确认之后拥塞窗口变为10KB,发送窗口变为10KB,此时共发送24KB

满足要求!到达第5次时,能够完成题中所述20KB数据的发送。



2.在TCP报文段结构中有一个接收窗口值,这里题目说明每次返回的报文中,接收窗口的值均为6KB,意味着接收窗口的通知值每次都是6KB,发送窗口值=min(6KB,拥塞窗口值)

第一次:发送了1KB,收到确认之后拥塞窗口变为2KB,发送窗口也变为了min(6KB, 2KB)=2KB,此时共发送1KB

第二次:发送了2KB,收到确认之后拥塞窗口变为4KB,发送窗口变为了min(6KB, 4KB)=4KB,此时共发送3KB

第三次:发送了4KB,收到确认之后拥塞窗口变为8KB(准备开始加性增),发送窗口变为了min(6KB, 8KB)=6KB,此时共发送7KB

第四次:收到确认发送了6KB,之后拥塞窗口变为9KB,发送窗口变为min(6KB, 9KB)=6KB,此时共发送13KB

第五次:收到确认发送了6KB,之后拥塞窗口变为10KB,发送窗口变为min(6KB, 10KB)=6KB,此时共发送19KB

第六次:收到确认发送了6KB,之后拥塞窗口变为11KB,发送窗口变为min(6KB, 11KB)=6KB,此时共发送25KB

综上分析:主机甲到第6次时能够完成题中所述20KB数据的发送。



===========================Talk is cheap, show me the code=======================


目录
相关文章
【计算机网络】第三章 数据链路层(可靠传输)
【计算机网络】第三章 数据链路层(可靠传输)
|
网络协议 网络架构
TCP/IP协议中分包与重组原理介绍、分片偏移量的计算方法、IPv4报文格式
本文章讲述了什么是IP分片、为什么要进行IP分片、以及IP分片的原理及分析。分片的偏移量的计算方法,一个IPv4包前三个分片的示例。还讲述了IPv4表示字段的作用,标志位在IP首部中的格式以及各个标志的意义:.........
5122 0
TCP/IP协议中分包与重组原理介绍、分片偏移量的计算方法、IPv4报文格式
|
消息中间件 存储 算法
RocketMQ 重试机制详解及最佳实践
本文主要介绍在使用 RocketMQ 时为什么需要重试与兜底机制,生产者与消费者触发重试的条件和具体行为,如何在 RocketMQ 中合理使用重试机制,帮助构建弹性,高可用系统的最佳实践。
1781 0
RocketMQ 重试机制详解及最佳实践
|
机器学习/深度学习 传感器 算法
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
1891 0
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
|
5月前
|
人工智能 缓存 运维
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
本文介绍联调造数场景下的AI应用演进:从单Agent模式到多Agent协同的架构升级。针对复杂指令执行不准、响应慢等问题,通过意图识别、工具引擎、推理执行等多Agent分工协作,结合工程化手段提升准确性与效率,并分享了关键设计思路与实践心得。
863 20
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
|
网络协议 算法 网络性能优化
第十一问:TCP的窗口机制是什么?
TCP的窗口机制是实现流量控制和拥塞控制的重要手段,主要包括滑动窗口、接收窗口(rwnd)和拥塞窗口(cwnd)。滑动窗口定义了发送方允许发送的数据范围,接收窗口控制接收方的缓冲区容量,拥塞窗口防止网络拥塞。这些窗口通过动态调整,确保数据传输的高效性和可靠性。
|
12月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
610 7
|
存储 数据库 数据中心
网络工程师:VXLAN这9个术语要精通!
【7月更文挑战第18天】
818 0
网络工程师:VXLAN这9个术语要精通!
|
监控 Linux Shell
深入解析Linux中的machinectl命令
`machinectl`是Linux systemd中的工具,用于管理轻量级系统容器的生命周期,如虚拟机和容器。它提供启动、停止、重启等操作,并基于dbus接口与systemd交互。特点是轻量级、高隔离性及灵活性。常用命令包括`list`、`status`、`start`、`stop`等。示例:`machinectl start mycontainer`启动容器,`machinectl shell mycontainer`打开容器shell。使用时注意安全、谨慎操作、备份数据,并监控资源使用。