2016年408网络大题
H3访问Web服务器S时,S为新建的TCP连接分配了20KB(K=1024)的接收缓存,最大段长MSS=1KB,平均往返时间RTT=200ms。H3建立连接时的初始序号为100,且持续以MSS大小的段向S发送数据,拥塞窗口初始阈值为32KB;S对收到的每个段进行确认,并通告新的接收窗口。假定TCP连接建立完成后,S端的TCP接收缓存仅有数据存入而无数据取出。
(1)在TCP连接建立过程中,H3收到的S发送过来的第二次握手TCP段的SYN和ACK标志位的值分别是多少?确认序号(指ack)是多少?
【解析】TCP连接的建立分以下三个阶段。
1)H3向S发出连接请求报文段:同步位SYN=1,ACK=0,初始序号seq=100。
2)S向A发送确认报文段:初始序号seq=y,SYN=1,ACK=1,seq=y,确认号ack是100+1=101。
3)H3再给S给出确认报文段:ACK=1,确认号ack=y+1,自己的序号seq=101。
第二次握手TCP段的SYN=1,ACK=1;确认序号ack是101。
PS:确认序号ack指“期望下一次能收到对方的哪个序号的报文段”
(2)H3收到的第8个确认段所通告的接收窗口是多少?此时H3的拥塞窗口变为多少?H3的发送窗口变为多少?
【解析】慢开始算法,发送方H3先设置拥塞窗口cwnd=1KB,规定接收方S对收到的每个段(MSS大小的段)进行确认,并通告新的接收窗口(使发送方的拥塞窗口加1KB)。
(1、2、4、8...)的指数增长表面上看起来拥塞窗口从2变到了4,实际上是发送方收到第二轮的第一个确认报文,拥塞窗口变为3;收到第二个确认报文,拥塞窗口变为4(不是一次性跳跃着变,而是一个一个往上加)。
当拥塞窗口变为8时,接收方已经接受了7个确认报文(1,2,4),接着发送方发第8个报文,接收方共收到8个报文后,发来第八个确认段,拥塞窗口cwnd=9。
接收方S这里由于已经接收了8个报文,又一共有20个缓存,所以接收窗口是12KB。
发送方H3共收到8个确认段,所以此时H3的拥塞窗口变为1+8=9KB;
H3的发送窗口=min{拥塞窗口,接收窗口}=min{9,12}=9KB。
【求TCP窗口大小题目】
可以自己画表格,如下表所示:
发送窗口 | cwnd | 接收窗口 |
1 | 1 | 20KB |
2 | 2 | 20-1=19KB |
4 | 4 | 19-2=17KB |
8 | 8 | 17-4=13KB |
9 | 8+1=9 | 12KB(此处开始刹车) |
(3)当H3的发送窗口等于0时,下一个待发送的数据段序号是多少?
H3从发送第1个数据段到发送窗口等于0时刻为止,平均数据传输速率是多少(忽略段的传输延时)?
【解析】TCP是用字节作为窗口和序号的单位。