马宏伟《计算机网络A》Chapter3-作业解答.docx
《马宏伟《计算机网络A》Chapter3-作业解答.docx》由会员分享,可在线阅读,更多相关《马宏伟《计算机网络A》Chapter3-作业解答.docx(8页珍藏版)》请在冰点文库上搜索。
第三章作业及解答
1.两个应用进程使用UDP交换数据。
设发送端传输三个字节数据给接收端进程,三个字节数据为:
(010101011010101000110011)2。
假设发送端进程的端口号为1024,接收端进程的端口号为80。
为简化问题,我们假设只有UDP
Segment的头部和数据两部分参与校验和的计算(实际上,UDP校验和计算中还包括一个伪头部)。
1)以十六进制形式描述计算校验和之前的UDP Segment。
注意,UDP
Segment总长度必须是偶数。
不足的,补一个全零字节。
答:
根据RFC768-UserDatagramProtocol规定,如果UDPSegment的总长度为奇数字节,需要补一个全零的填充字节,以使参与Checksum运算的字节数为偶数。
但UDPSegment头部的Length字段的值为Segment的实际长度,并不包含这个填充字节(填充字节只用做Checksum计算)。
源端口号为1024,即(0000010000000000)2,(0400)hex;
目的端口号为80,即(0000000001010000)2,(0050)hex;
长度为11字节(8字节头部,3字节数据),即(00000000 00001011)
2,(000B)hex;
Checksum全为0,即(0000000000000000)2,(0000)hex;三字节数据加上一个填充字节,Segment的数据部分为
(01010101101010100011001100000000)2,(55AA3300)hex
因此,在计算Checksum前,Segment的十六进制形式为:
0400
0050
000B
0000
55AA
3300
2)UDPSegment校验和的计算过程及结果。
0000010000000000
源端口号
0000000001010000
目的端口号
0000010001010000
0000000000001011
Segment长度
答:
第一步,求和:
0000010001011011
0000000000000000 校验和字段(其实加不加对结果没影响)
0000010001011011
0101010110101010 前两个字节的数据
0101101000000101
0011001100000000 第三字节数据和填充字节
1000110100000101
第二步:
对和按位取反,得到校验和:
0111001011111010注意:
UDP计算checksum的方法如下:
1)决定是否需要在数据最后添加一个全0字节,以便使UDP
Segment的总长度为偶数字节。
但添加的这个字节并不计入总长度;
2)Checksum字段的值初始化为(0000)hex;
3)将整个Segment(包含头部和数据)分成2字节(16位)的单元;
4)求所有2字节单元的和,产生的进位要加在和上;
5)将最终求得的和按位取反,得到checksum。
2.假设,主机C中Web服务器进程的端口号为80,该Web服务器使用持续
(persistent)连接,正在接收来自不同主机A和B的请求。
这些请求是被发向主机C的同一个Socket吗?
如果是发向不同的Socket,这些Socket均使用端口
80吗?
讨论并解释。
答:
对于每个持续连接,Web服务器将创建单独的“connectionsocket”。
每个connectionsocket由四元组(源地址,源端口号,目的地址,目的端口)标识。
当主机C收到一个IP数据报(datagram),将检查数据报中这四个字段的值来确定将Segment交给哪个Socket。
因此,A和B的请求将被交给不同的Socket。
两个Socket的标识有一个共同点:
即两个socket的目的端口号相同,均为80,但两个Socket的源IP地址不同,两个Socket的源端口号通常情况也不同(由于这两个Socket分别位于主机A和B)。
3.一个简单的同步消息交换协议。
考虑两个网络实体(A和B)之间使用完美的双向信道连接(发送的任意消息将被正确地接收,分组不会损坏、丢失、乱序)。
A和B交替地向对方发送数据消息:
最初,A向B发送消息;然后B必须向
A发送消息;然后A必须向B发送消息,以此类推。
画出该协议的FSM(A和
B分别描述)。
不用考虑可靠传输机制,主要描述反映两个实体同步行为的
FSM。
可以使用下述的事件和动作,它们与课本第138页的rdt1.0的含义相同。
rdt_send(data), packet=make_pkt(data),udt_send(packet);rdt_rcv(packet), extract(packet,data),delver_data(data)。
协议必须保证A和B发送消息的严格交替关系,以及指明A和B的FSM
的初始状态。
答:
4.课本第192页,习题14。
答:
设信道的利用率为Usender,信道的折返时间为RTT秒,分组长度为L(bits),信道的传输速率为R(bps),窗口长度为N。
则信道利用率Usender为:
Usender
=N*L/RRTT+L/R
如果要求Usender>=0.9,则N*L/R/(RTT+L/R)>=0.9
即:
N>=0.9(RTT*R/L+1)
根据题意,RTT=30ms=0.03s,分组长度L为8000 bits,链路速率为
109bps。
将这些数值代入上式,得到:
N>=0.9(0.03*109/8000+1)
N>=3375.9
因此,如果要使信道利用率超过0.9,窗口长度至少为3376个分组。
注意:
窗口长度的单位是分组的数量。
5.课本第
192页,习题18。
答:
假设窗口长度为N,本题中N=3。
a)考虑两种极端情况:
(1) 根据题意,Receiver正在等待第k号分组,意味着k-1及以前的分组已经被Receiver成功收到,并且对第k-1,k-2,k-3号的确认已经发送。
极端情况下,在时刻t,Sender还未收到对k-1,k-2,k-3分租的确认。
则此时,Sender窗口中等待确认的分组序号是k-3,k-2,k-1;
(2) 另外一种极端情况是,假设在时刻t,Sender已经收到了对k-3,k-2,k-1号分组的确认。
由于窗口大小为3,Sender可以再发送3个分组,在窗口中的序号便为k,k+1,k+2。
综上,Sender的发送窗口中的可能分组序号为k-3,k-2,k-1,k,k+1,k+2。
一般化,t时刻发送窗口中的可能分组序号为[K-N,K+N-1]中的连续的三个值。
b)根据题意,在t时刻,Receiver希望接收k号分组,意味着序号<=k-1的分组均已经被成功收到,并且发送了对序号<=k-1分组的确认。
但是,这些确认可能还在向Sender传输的过程中,还没有到达Sender。
因此,正在传输但还未到达Sender的ACK可能的确认号为k-3,k-2,k-
1。
正在向Sender返回的ACK不可能是对k-4号分组的确认。
否则,
Sender不可能发送k-1号分组,进而Receiver不可能正在等待k号分组。
6.课本第
193页,习题23。
答:
A. 32位序号,最大序号为232-1=4294967295
B.L的最大值就是232字节
C.Segment的数量为:
é232ù
ê ú
ê1460ú
ê ú
é232ù
因此,附加的头部共长
ê1460ú*66=194156028
bytes
传输的数据和头部总长:
232+194,156,028(bytes)
=3591*107(bits)
在10Mbps链路上传输,需要3591秒。
7.主机A和B通过TCP连接进行通信。
主机B已经从A收到了序号144及以前的所有字节。
假设A然后向B背靠背(连续)发送了两个segment,其中第一个包含20字节的数据,第2个包含40字节数据。
第一个Segment的序号为145,源端口号为303,目的端口号为80。
主机B在收到A发送的Segment后立即发送确认。
1)A向B发送的第二个Segment的序号、源端口号、目的端口号是多少?
答:
A向B发送的第二个Segment的序号为165,源端口号为303,目的端口号为80。
2)如果第一个Segment在第二个Segment前到达B,B发送的确认中,源端口、目的端口和确认号分别为多少?
答:
收到第一个Segment后,B向A发送确认。
则该确认的确认号为
165,源端口号为80,目的端口号为303。
3)如果第二个Segment在第一个Segment之前到达B,则接收方B对第一个Segment的确认中,确认号是多少?
答:
如果第二个Segment先于第一个Segment到达B,则B向A发送确认
的确认号为145。
4)假设A发送的两个Segment按顺序到达B。
第一个确认丢失,但第二个确认在第一个Segment的超时间隔后到达A,如下图所示。
将下图补充完整,给出所有segment和ACK的发送和接收情况(假设没有其他的分组丢失)。
对每个在图中增加的Segment,提供其序号、数据长度;对每
个添加的ACK提供其确认号。
答:
由于B对第一个Segment的确认丢失,且对第二个Segment的确认在第一个Segment超时前没有到达A。
则A重传第一个Segment(在图中增加的一个Segment,标号为①),当B收到重传的Segment后,会产生一个确认(在图中增加的一个Segment,标号为②)。
标号为①的Segment:
序号为145,数据长度为20字节;标号为②的Segment,即ACK,确认号为205。
①
②
8.TCP的拥塞控制。
考虑通过一个无丢失TCP连接发送一个大文件的情况。
1)假定TCP采用没有慢启动的AIMD作为拥塞控制机制。
假设每隔
RTT,CongWin增加一个MSS,且RTT时间恒定。
则CongWin从
1MSS增大到5MSS需要多长时间(假设没有丢失,RTT为常量)?
答:
发送一个大文件,意味着发送方总是有数据等待传输。
假设连接刚建立时的时间为t,此时,CongWin=1MSS。
则:
到t+RTT时,CongWin增大为2MSS;
到t+2RTT时,CongWin增大为3MSS;到t+3RTT时,CongWin增大为4MSS;到t+4RTT时,CongWin增大为5MSS。
因此,CongWin从1MSS增大到5MSS共需要4RTT时间。
2)到时间=4RTT时,该连接的平均吞吐率是多少?
答:
在第一个RTT内,发送了1MSS的数据;
在第二个RTT内,发送了2MSS的数据;
在第三个RTT内,发送了3MSS的数据;在第四个RTT内,发送了4MSS的数据。
因此,从连接建立开始,到时间t=4RTT时,发送方共发送了
1MSS+2MSS+3MSS+4MSS=10MSS
则该连接的平均吞吐率为10MSS/4RTT=2.5MSS/RTT
9.课本第194页,习题33。
答:
a. 有两段,分别为[1,6],[23,26].
b. 有两段,分别为[6,16],[17,22].
c.在16周期后,拥塞窗口变为原来的一半,因此,发生了3-dup
ACK事件.
d.在22周期后,拥塞窗口变成了1。
因此,发生了超时。
e.32
f.21
g.13
h.第70个报文是在第7个周期中发送的.
因为,第1,2,3,4,5,6,7个周期中,窗口分别为1,2,4,
8,16,32,33。
即发送方在第1,2,3,4,5,6,7个周期中分别发送了
1,2,4,8,16,32,33个报文.
i.窗口为4,Threshold也为4.
10.TCP拥塞控制:
假设TCP的Sender窗口大小为N,窗口的SendBase为x,且Sender刚刚发送完一个完整的窗口数据。
假设RTT为Sender-to-Receiver-to-
Sender的折返时间,MSS为Segment大小。
1)在Receiver-to-Sender信道中可能有对序号小于x的Segment的确认吗?
证明你的答案。
答:
可能。
假设,Sender发送分组x-1,由于超时(但分组及其确认均没有
丢失,只是由于ACK多度延迟),发送方重传分组x-1。
因此,网络中存在着两个x-1号分组。
接收方收到第一个序号为x-1的分租并且发送
ACK,发送方收到第一个ACK后将SendBase设置为x。
此时,仍然
可能存在Receiver对分组x-1的确认正在向Sender传输。
因此,在
Receiver到Sender方向的信道中可能存在对序号小于x的Segment的确认。
2)假设没有分组丢失。
Sender-to-Receiver连接的吞吐率(瞬时)是多少
(packets/sec)
答:
假设窗口以Segment为单位。
发送方在一个RTT内可以发送N个Segment,每个Segment的大小为MSS字节。
因此,吞吐率为
N*MSS/RTT。
3)假设TCP正处于拥塞避免阶段。
如果没有丢失,则N个Segment被确认后的窗口大小是多少?
答:
(N+1)MSS。
在拥塞避免阶段,每隔一个RTT,窗口增加一个MSS。