基本概念
课后习题
5-23
主机A向主机B连续发送了两个TCP报文段,其序号分别是70和100.试问:
(1)第一个报文段携带了多少字节的数据?
(2)主机B收到第一个报文段后发回的确认中的确认号应该是多少?
(3)如果B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
(4)如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应当为多少?
答:
(1)第一个报文段数据序号是70到99,一共30字节的数据。
(2)确认号应该是100
(3)说明B收到了70到179共110字节的数据,说明第二个报文段中数据有110-30=80字节
(4)第一个报文段丢失了,B只能对按序收到的数据中的最高序号给出确认,所以B此时发送的确认号仍然为70.
5-28
主机A向主机B发送TCP报文段,首部中的源端口是m而目的端口是n。当B向A发送回信时,其TCP报文段的首部中的源端口和目的端口分别是什么?
答:由于通讯方向颠倒,所以端口也反过来,分别是n和m
5-38
设TCP的ssthresh的初始值为8(单位为报文段)。当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出第1轮次到第15轮次传输的各拥塞窗口大小。你能说明拥塞窗口每一次的变化吗?
答:采用慢开始,初始指数上升的变化
1,2,4,8
增长到第4轮次时,拥塞窗口为8,达到ssthresh初始值。改为拥塞避免,拥塞窗口线性上升
9,10,11,12
增长到第8轮次时,拥塞窗口为12,网络发生了超时,拥塞窗口置为1,ssthresh更新为12 / 2 = 6
再次慢开始,拥塞窗口指数上升
1,2,4,6
增长到第12轮次时,拥塞窗口为6(实际按指数增加应为8,但超过ssthresh值,增长放缓),再次达到ssthresh值。改为拥塞避免,拥塞窗口线性上升
7,8,9,10,11,12
5-39
TCP的拥塞窗口cwnd大小与传输轮次n的关系如下所示:
cwnd | 1 | 2 | 4 | 8 | 16 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
cwnd | 40 | 41 | 42 | 21 | 22 | 23 | 24 | 25 | 26 | 1 | 2 | 4 | 8 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
n | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
(1)试画出拥塞窗口与传输轮次的关系曲线
(2)指明TCP工作在慢开始阶段的时间间隔
(3)指明TCP工作在拥塞避免阶段的时间间隔
(4)在第16轮次和第22轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
(5)在第1轮次、第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?
(6)在第几轮次发送出第70个报文段?
(7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?
答:(1)
(2)慢开始阶段即为指数增长阶段,由表格可知为[1,6]及[23,26]
(3)拥塞避免阶段即为线性增长阶段,由表格可知为[7,16][17,22]
(4)由于17轮次时,未直接从1开始,因次第16轮次是通过收到三个重复的确认。
第23轮次,拥塞窗口重新变为1,说明第22轮次通过超时检测到报文段丢失。
(5)第一次慢启动转为拥塞控制的拥塞窗口为32,因此第1轮次的门限ssthresh为32。
第16轮次时,门限变为发生拥塞时的一半,即21,因此第18轮次门限为21.
第23轮次时,门限变为发生超时时拥塞窗口数的一半,即为13,因此第24轮次门限为13。
(6)
Sum | 1 | 3 | 7 | 15 | 31 | 63 | 96 | 130 |
---|---|---|---|---|---|---|---|---|
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
因此第70报文应该在第7轮次时发送
(7)cnwd和门限都应该设置为此时cwnd的一半,即8/2 = 4。
5-41
用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送方和接收方的起始序号分别选为100和200,试画出工作示意图。从连接建立阶段到连接释放都要画上。
答:
发送方 | 方向 | 接收方 |
---|---|---|
seq=100,SYN=1,ACK=0 | ━━━━━▶ | (被动打开) |
(进入SYN-SENT状态) | ||
◀━━━━━ | SYN=1,ACK=1,seq=200,ack=101 | |
ACK=1,seq=101,ack=201 | ━━━━━▶ | |
(进入SYN-RECV状态) | ||
seq=100 | ━━━━━▶ | A发送100字节 |
◀━━━━━ | ACK=300,WIN=0 | |
seq=200 | ━━━━━▶ | A发送100字节 |
◀━━━━━ | ACK=400,WIN=0 | |
seq=300 | ━━━━━▶ | A发送100字节 |
◀━━━━━ | ACK=500,WIN=0 | |
seq=400 | ━━━━━▶ | A发送100字节 |
◀━━━━━ | ACK=600,WIN=0 | |
seq=500 | ━━━━━▶ | A发送100字节 |
◀━━━━━ | ACK=700,WIN=0 | |
seq=600 | ━━━━━▶ | A发送12字节 |
◀━━━━━ | ACK=712,WIN=0 | |
FIN,seq=612 | ━━━━━▶ | |
(FIN-WAIT-1状态) | ||
◀━━━━━ | seq=712,ACK=613 | |
(FIN-WAIT-2状态) | (CLOSE-WAIT状态) | |
◀━━━━━ | FIN,SRQ=712,ACK=613 | |
(LAST-ACK状态) | ||
ACK=713,seq=612 | ━━━━━▶ | |
TIME-WAIT 2MSL | CLOSE | |
CLOSE |
5-49
下面是以十六进制格式存储的一个UDP首部:
CB84 000D 001C 001C
试问:
(1)源端口号是什么?
(2)目的端口号是什么?
(3)这个用户数据报的总长度是多少?
(4)数据长度是多少?
(5)这个分组是从客户到服务器方向的,还是从服务器到客户方向的?
(6)客户进程是什么?
答:UDP首部由 2字节源端口 2字节目的端口 2字节长度 2字节检验和组成
(1)源端口号是0xCB84 = 52100
(2)目的端口号是0x000D = 13
(3)用户数据报总长为0x001C = 28字节
(4)数据长度为 总长度-首部长度 = 28 - 8 = 20字节
(5)客户端使用的端口号范围是49152~65535,所以本题是从客户到服务器
(6)客户进程是Daytime
5-59
TCP连接使用1000字节的窗口值,而上一次的确认号是22001.现在收到了一个报文段,确认了字节22401。使用图来说明在这之前与之后的窗口情况。
答:
5-60
同上题,但接收方收到确认字节为22401的报文段时,其窗口字段变为1200字节,试用图来说明在这之前与之后的窗口情况。