题目一:
来源2015年408计算机综合
试题链接:https://www.nowcoder.com/questionTerminal/3241441c88f04ab58585a187716055d3
主机甲和主机乙新建一个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计算机综合
链接:https://www.nowcoder.com/questionTerminal/cee6014573f841e2b1b19fbd89ab5d32
主机甲和乙已建立了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_计算机学科专业基础综合
链接:https://www.nowcoder.com/questionTerminal/c5bf448282b745a3b97b52d33fac28d6
主机甲中的应用程序使用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=======================