第三次作业
R\(5\)
现如今有很多防火墙会阻碍UDP,所以需要使用TCP
R\(8\)
不会通过相同套接字,但是都具有\(80\)端口号。这是因为运行持续链接的是TCP,而TCP端口由源IP地址/端口,目的IP地址/端口四元组唯一确定。\(A\)和\(B\)是不同的主机,所以有不同的源IP地址,所以不会通过相同的套接字;而主机\(C\)只有端口\(80\)在运行,所以端口是一样的
R\(10\)
因为在不可靠信道中分组可能会丢失。如果不引入定时器,在丢失的时候发送方就不知道是否应该重传(无论是发送方发送的数据包还是接收方发送的ACK),可能会陷入死锁
R\(14\)
a.错误。发送ACK可以不携带数据
b.错误。rwnd由接收方还剩下的缓存空间大小决定,是可能会变化的
c.正确。因为\(A\)发送但是没有被确认的字节数不会超过\(A\)的窗口大小,而窗口大小是接收缓存和cwnd的较小值,所以题述成立
d.错误。后续序号取决于报文段长度,报文段长度完全可以大于一个字节
e.正确
f.错误。TimeoutInterval等于EstimatedRTT加上四倍的DevRTT,而EstimatedRTT是SampleRTT的指数加权平均,不一定就比最后一个SampleRTT大,所以TimeoutInterval完全可以比最后一个SampleRTT的值小
g.错误。这个报文段的确认号取决于\(A\)上一次收到\(B\)的报文段的序列号以及大小(即反映期望接收的字节),与这个报文段的序列号无关
P\(1\)
Telnet会话中,服务器使用的是周知端口号,客户使用的是随机的端口号,所以答案如下
a.源端口:1,目的端口:23
b.源端口:2,目的端口:23
c.源端口:23,目的端口:1
d.源端口:23,目的端口:2
e.可能
f.不可能,不同的进程使用不同的端口号
P\(3\)
\(01010011+01100110=10111001\)
\(10111001+01110100=100101101\),产生进位,有\(00101101+00000001=00101110\),再将这个数字取反为\(11010001\).这就是这些数字的和的反码
不直接使用该和的原因:不依赖系统是大端小端。即无论你是发送方计算机或者接收方检查校验和时,都不要调用htons或者ntohs,直接通过上面的算法就可以得到正确的结果。而如果使用原码或者补码求和,得到的结果可能就不同
检测差错的方法:将所有字段和checksum相加,如果全为\(1\)就说明正确,否则错误
\(1\)比特的差错一定会检查出来,\(2\)比特的差错就可能检查不出来了(比如两个数字最后两位分别是\(01\)和\(10\),那么同时出错变成\(10\)和\(01\),显然和不变)
P\(6\)
考虑如下的过程:对于发送方,发送了一个序号为\(0\)的报文,此时转换到了等待ACK或NAK 0的状态;而接收方顺利收到了这个报文,转换到了等待来自下层的1的状态并且发送了一个ACK;但是这个ACK损坏掉了,于是发送方就会再发送一个序号为\(0\)的包,而这个包无论是否损坏,接收方都会发送一个NAK;同理这个NAK无论是否损坏,发送方都会重传。于是进入死锁
P\(14\)
偶尔发送数据:使用ACK更好。尽管发送间隔长,但ACK机制通过超时重传能更快检测丢包,而NAK需等待下一个包才能触发恢复
经常发送数据:使用NAK更好。ACK需为每个包发送确认,数据量大时产生过多开销;NAK仅在丢包时发送,节省带宽
P\(18\)
序列号的范围是\([0,3]\);具体的机制见下方的FSM
发送方:
接收方:
这个协议用超时处理丢包,举例说明如下

P\(19\)
\(A\)的FSM:

\(C\)的FSM(忽略向上交付数据的操作,这个trivial):

最开始直接重发的sndpkt,但是后面发现可能最开始没有定义这个包,所以重新写了
P\(20\)
\(A\)的FSM:

\(C\)的FSM(忽略向上交付数据的操作):

P\(22\)
a.考虑两种极端情况
- 接收方发送的ACK全部都丢了,此时发送方的窗口为\([k-4,k-1]\)
- 接收方发送的ACK全部都收到了,此时发送方的窗口为\([k,k+3]\)
于是序列号可能为\([k-4,k+3]\)
b.由于现在接收方期待\(k\),而inflight的ACK的数量不可能超过窗口长度,所以可能的ACK为\([k-4,k-1]\)
P\(23\)
对于图\(3-27\)的情况,肯定是不能让此时接收窗口与发送窗口有重合(否则就无法判断到底是重传的还是新发的);由于序列是一个环,所以需要\(k\geq2w\),其中\(w\)表示窗口长度
P\(26\)
a.TCP序号一共有\(2^{32}\)个,所以\(L=2^{32}\)字节
b.一共有\(\frac{L}{536}\times(536+66)\)字节需要传输,所以传输需要的时间为\(\frac{\frac{L}{536}\times(536+66)\times8}{155\times10^6}\approx249\)s
P\(27\)
a.序号:207 源端口号:302 目的端口号:80
b.确认号:207 源端口号:80 目的端口号:302
c.确认号:127
d.如下,长度的单位为字节

P\(32\)
a.假设初始EstimatedRTT=\(\text{SampleRT}_{T4}\),那么EstimatedRTT=
b.EstimatedRTT=
c.令\(n\)趋近于无穷,考察\(\text{SampleRT}_{Ti}\)的系数为\(\alpha\times(1-\alpha)^{i-1}=0.1\times0.9^{i-1}\);可以看到系数呈现指数形式,所以叫做指数加权平均
P\(36\)
由于信道不可靠,如果收到一个冗余ACK就重传的话,可能由于乱序,ACK确认的数据包并没有丢失而是还没有到,于是就会发生冗余数据包
P\(37\)
a.
- GBN:主机A一共发送了9个报文段,序号分别是1,2,3,4,5,2,3,4,5;B一共发送了8个ACK,确认号分别是1,1,1,1,2,3,4,5
- SR:主机A一共发送了6个报文段,序号分别是1,2,3,4,5,2;B一共发送了5个ACK,确认号分别是1,3,4,5,2
- TCP:主机A一共发送了6个报文段,序号分别是1,2,3,4,5,2;B一共发送了5个ACK,确认号分别是2,2,2,2,6
b.TCP,因为GBN和SR都会等待超时了才重传,而TCP直接快速重传
P\(40\)
a.由图,为\([1,6]\)和\([23,26]\)
b.书上的图画的不是很严谨。真实的快速恢复在PPT上。与老师讨论过,书上的图只能认为是进入快速恢复之后就立马收到了一个新的ACK结束了快速恢复进入了拥塞避免(但实际上还要将cwnd变成ssthresh)。所以拥塞避免的时间是\([6,16]\)和\([17,22]\)
c.3个冗余ACK,因为cwnd减半并加三
d.超时,因为cwnd变成一了
e.32,因为第\(6\)个传输轮回的时候开始拥塞避免,此时cwnd=32
f.由图,为21
g.由图,为14
h.累加可知,第七个传输轮回就传输了packet 70
i.由图,cwnd=7,ssthresh=4
j.cwnd=1,ssthresh=21
k.累加可知,总共发了\(52\)个
P\(41\)

如上图,可以看到AIAD不会收敛到公平点。上图是按照两条连接增减的量都是一样的来画的,即使不一样(比如一条连接增减的量是另一条连接的两倍)可以知道也是不是收敛到公平点的
P\(47\)
a.假设\(MSS=1\)字节,于是这段时间内发送的字节数为\(\frac{W}{2}+(\frac{W}{2}+1)+...+W=\frac{3}{8}W^2+\frac{3}{4}W\),所以丢包率为\(\frac{1}{\frac{3}{8}W^2+\frac{3}{4}W}\)
b.如果\(W\)较大,则\(L\approx\frac{3}{8}W^2\),代入\(\frac{0.75\times MSS}{RTT}\)即可
P\(48\)
a.由于传输速率为\(10\)Mbps,于是设最大窗口长度为\(x\),那么有\(\frac{1500x}{150\times10^{-3}}\times8\leq10\times10^6\),解得\(x\leq125\)
b.平均窗口长度为\(\frac{3}{4}\times x=93.75\);平均吞吐量为\(\frac{\frac{3}{4}\times125\times1500\times8}{150\times10^{-3}}=7.5\)Mbps
c.由题,这条TCP总是处于拥塞避免阶段,所以不考虑快速恢复(否则不知道什么时候接收到所期待的ACK从而结束快速恢复,这题就做不了了)和慢启动,于是丢包之后窗口大小变为\(62\),一个RTT增长1,所以需要\(63\)个RTT,一共是\(9.45\)s
P\(52\)
a.
可以看到,拥塞窗口都为\(1\)
b.从上表中可以看到,取得的带宽并不同,C1取得的带宽更多
P\(54\)
设\(W=\frac{W}{2}\cdot(1+\alpha)^n\),于是\(n=\log_{1+\alpha}2\);这段时间发送的总大小为\(\frac{W}{2}+\frac{W}{2}(1+\alpha)+...+\frac{W}{2}(1+\alpha)^n=W\times\frac{2\alpha+1}{2\alpha}\),于是丢包率\(L=\frac{1}{W\times\frac{2\alpha+1}{2\alpha}}\)
显然这段时间是\(nRTT\),与平均吞吐量无关
P\(56\)
优点:可以在短时间内发送大量数据,节省了发送数据的时间(也就是不用经历慢启动和拥塞避免)
缺点:此时cwnd和ssthresh的值可能不再准确,因为已经过去很长时间了,不知道现在的网络到底是怎么样的;如果已经很拥堵了,那么这个方法就会往一个已经很拥堵的网络发送大量的数据
建议方法:在空闲期间,每隔一定时间(如一个往返时间 RTT)将 cwnd 减半,直至达到最小值(如 1 MSS)。这可以在保留部分历史信息的同时,避免使用过大的窗口

浙公网安备 33010602011771号