计算机网络第三次作业
北京邮电大学 2023212723 吴宇锴
第一题 P2
- 源端口:80,目的端口:26145,源IP:B, 目的IP:C
- 源端口:80,目的端口:7532,源IP:B, 目的IP:C
- 源端口:80,目的端口:26145,源IP:B, 目的IP:A
第二题 P3
-
8bit字节和=100101101,溢出的一位加到第零位,得到00101110,取反后得到11010001。
-
直接使用字节和可能因为进位溢出而丢失部分信息,而反码通过将溢出位加到第零位再取反保留了更多信息。
- 接收方将所有数据(包括校验和)按相同方式计算和。如果结果全为1(即反码和为
11111111),说明数据正确;否则存在错误。 - 如果有1比特差错,会导致最终的结果不全为1,可以检测出来。
- 如果有2比特差错,假设相同位1变0,0变1,那么将会检测不出。
第三题 P5
不能,正如上一题所说的,2比特差错,或者说偶数比特差错,有可能检测不出来。因此接收方不能确信没有出现过比特差错。
第四题 P6
当接收方的ACK在传输过程中损坏或丢失时,接收方等待下一个包,但是发送方由于没有收到ACK而一直发上一个包,导致双方都进入死锁状态。
第五题 P14
- 当发送方偶尔发送数据时,使用仅NAK的协议更好,因为数据发送频率低,丢包或出错概率较小,NAK仅在丢包或出错时触发,减少了确认消息的数量,节省网络资源。另外,发送方无需为每个数据包维护ACK计时器,降低了协议的复杂度与资源开销。
- 当发送方传输大量数据且丢包率低时,使用仅NAK的协议仍然更优。因为在低丢包率的场景下,NAK的触发次数较少,避免了大量ACK的数据传输。另一方面,发送方可以持续发送数据而无需等待ACK,能提高吞吐量。
第六题 P15
发送一个分组进入 \(1\text{Gbps}\) 链路所需时间为: $$ t_{trans} = \frac{L}{R} = \frac{8\times15\text{bit/pkt}}{10^9\text{bit/s}}=1.2\times10^{-5}\text{s} $$ 为使信道利用率超过 \(90\%\), $$ U_{sender} = \frac{n\times t_{trans}}{\text{RTT} + t_{trans}} = \frac{0.012n}{30.012} \ge 90\% $$ 解得 \(n \ge 2251\)。
即窗口长度需要大于等于2251。
第七题 P31
-
得到106ms后:
-
\(DevRTT = 0.75 \times 5 + 0.25 \times |106 - 100| = 5.25\) ms
- \(EstimatedRTT = 0.875 \times 100 + 0.125 \times 106 = 100.75\) ms
-
\(TimeoutInterval = 100.75 + 4 \times 5.25 = 121.75\) ms
-
得到120ms后:
- \(DevRTT = 0.75 \times 5.25 + 0.25 \times |120 - 100.75| = 8.75\) ms
- \(EstimatedRTT = 0.875 \times 100.75 + 0.125 \times 120 = 103.16\) ms
- \(TimeoutInterval = 103.16 + 4 \times 8.75 = 138.16\) ms
-
得到140ms后:
- \(DevRTT = 0.75 \times 8.75 + 0.25 \times |140 - 103.16| = 15.77\) ms
- \(EstimatedRTT = 0.875 \times 103.16 + 0.125 \times 140 = 107.76\) ms
- \(TimeoutInterval = 107.76 + 4 \times 15.77 = 170.84\) ms
-
得到90ms后:
- \(DevRTT = 0.75 \times 15.77 + 0.25 \times |90 - 107.76| = 16.27\) ms
- \(EstimatedRTT = 0.875 \times 107.76 + 0.125 \times 90 = 105.54\) ms
- \(TimeoutInterval = 105.54 + 4 \times 16.27 = 170.62\) ms
-
得到115ms后:
- \(DevRTT = 0.75 \times 16.27 + 0.25 \times |115 - 105.54| = 14.57\) ms
- \(EstimatedRTT = 0.875 \times 105.54 + 0.125 \times 115 = 106.72\) ms
- \(TimeoutInterval = 106.72 + 4 \times 14.57 = 165\) ms
第八题 P33
当发送端第一次发送报文,等待ACK,超时后重传,假设在此时启动计时,当发送端接收到ACK后结束计时,但此时接收到的ACK可能是第一次发送报文的返回ACK,因此重传报文的sampleRTT计算有误。所以要避免测量重传报文段的sampleRTT。
第九题 P40
a. 慢启动时间为0\~6与23\~26,每隔一个轮回窗口长度翻倍。
b. 拥塞避免的时间为6\~16与17\~22,窗口长度线性增长。
c. 是根据三个冗余ACK测出的,否则窗口长度会降低到1。
d. 第22个传输轮回后是根据超时检测出的,因为窗口长度降低到1。
e. ssthresh的初始值设置为32,因为窗口 长度到32时开始拥塞避免。
f. 在第16个传输轮回检测到丢包,ssthresh设置为42的一半,也就是21。
g. 在第22个传输轮回检测到丢包,ssthresh设置为29的一半下取整,也就是14.
h. 窗口长度[1,2,4,8,16,32,33,34,...],取一个前缀和,得到[1,3,7,15,31,64,100,...],在第7个传输回合超过70,因此在第7个回合发送第70个报文段。
i. ssthressh变成一半的窗口长度,也就是4,窗口长度变成ssthresh+3,也就是7。
j. 如果是TCP Tahoe,在第17回合变成1,18回合变成2,19回合变成4。ssthressh为21。
k. 17~21轮,共31个分组,22轮21个分组,共52个分组。
第十题 P54
考虑窗口长度从 \(W/2\) 增加到 \(W\) 的过程,传输的总报文段数为: $$ \begin{aligned} s &= \frac{W}{2} + \frac{W}{2} \times (1+\alpha) + \cdots + \frac{W}{2} \times (1+\alpha)^{\lfloor \log_{1+\alpha} 2 \rfloor} \ &\approx W \times \frac{2\alpha + 1}{2\alpha} \end{aligned} $$ 丢包率为: $$ \begin{aligned} L &= \frac{1}{s} \ &= \frac{2\alpha}{W \times (2\alpha + 1)} \end{aligned} $$ 所需时间为: $$ RTT \times \lfloor log_{\alpha+1}{2} \rfloor $$ 与TCP的平均吞吐无关。