计算机网络题目

繁杂且无聊之问题

1

image-20201005162149274

十分简单的死记硬背知识:

type name value
A 主机域名 IP地址
NS 域(edu.cn) 该域权威域名解析服务器的主机域名
CNAME 某一真实域名的别名 真实域名
MX Value是与name相对应的邮件服务器的别名

2

image-20201005162319442 image-20201005162329044

报文交换以及分组交换的传输延迟以及排队延迟问题

常见问题

image-20200921161624525

为了叙述简单,A向C传输的文件用A表示,同理,B向D传输的文件用B表示。

对于这道题而言,需要考虑的仅仅有传输延迟以及排队延迟。

报文交换

下面为分析过程:

0.2s时,A完全到达第一个路由器,0.2+e时,B也完全到达第一个路由器。由于e的存在,第一个路由器会先传输A的数据包。这里,B产生2Mb / 20Mb/s = 0.1s的排队延迟。严格来讲,这里应该时(0.1 - e) s,不过一般而言,回省略e。

0.3s时,A完全到达第二个路由器,0.35s时,B完全到达第二个路由器。A在0.3s开始由第二个路由器向第三个路由器进行传输,在0.4s时完成。B因而产生了0.05s的排队延迟。

B所产生的0.05s的排队延迟将会出现在第2,3,4,5个路由器,第6个路由器不会产生排队延迟。

下面为结果:

对于A的传输而言,其在链路传导过程中,其一直处于B之前,故而其不存在排队延迟,只需要计算传输延迟即可。其传输延迟为:2Mb / 10Mb/s + 2Mb / 20Mb/s * 5 + 2Mb / 10Mb/s = 0.9 s

对于B向D的文件传输而言,其在链路传导过程中,其一直处于A向C传输的文件之后,需要考虑排队延迟。其排队延迟为:0.1 + 0.05 * 4 = 0.3,而其传输延迟为 1Mb / 10Mb/s + 1Mb / 20Mb/s * 5 + 1Mb / 10Mb/s = 0.45 s,故而,其总的延迟为0.75 s。

分组交换

一般来讲,这里0.1s时,A已经向第一个路由发送了1000个包。而后,A的后1000个包将会与B的1000包共同被传输。

这里一般采用分享带宽的观点进行处理。即:A的后1000个包将会与B的1000包将会分得10Mb/s的带宽,而后只用公式:transmission delay = (M / R) + n*(L/R) 直接进行计算得到结果。

那么,A的延迟为:0.1 + (1Mb / 10Mb/s) + 6 * (1kb / 1Mb/s) = 1.006s。而B的延迟为 (1Mb / 10Mb/s) + 6 * (1kb / 1Mb/s) = 1.006s。

那么这种分享带宽的做法究竟是否成立呢?

下面将采用对该问题的简化版进行分析,得到结果。

image-20200921164227888

这里采用的前提是:A,B的数据包轮流被第一个路由器传输。

  • 0.1s时,A已经向第一个路由器发送1000个数据包,还有1000个数据包未传输。

  • 那么A的剩余1000个数据包与B的1000个数据包将会在同时进行传输。

  • 0.10005s,A的第1000个包到达第二个路由。

  • 0.10015s,A的第1000个包到达C。

  • 那么,一个包的传输时间为: 1k / 2Mb/s = 0.00005s。

  • 0.10010s,A的第1001个包到达第一个路由,B的第1个包到达第一个路由。

  • 0.10015s,A的第1001个包到达第二个路由。

  • 0.10020s,B的第1个包到达第二个路由。

  • 0.10020s,A的第1002个包到达第一个路由,B的第2个包到达第一个路由。

  • 0.10025s,A的第1002个包到达第二个路由。

  • 0.10030s,B的第2个包到达第二个路由。

  • 0.20005s,A的第2000个包到达第二个路由。

  • 0.20010s,B的第1000个包到达第二个路由。

  • 0.20015s,A的第2000个包到达C。

  • 0.20020s,B的第1000个包到达D。

  • A将2Mbits的文件交付给C需要时间为0.20015s.

  • B将1Mbits的文件交付给D需要时间为0.20020s - (0.1 + e) = (0.10020 - e)(s)

那么可以观察到的是:这种分带宽的做法在B的处理上是正确的,但是对于A的处理有点偏失。

产生偏失的原因是:当进行分带宽处理时,默认A,B的包同时在0.1s后传输,而实际上,A在0.05s就完成传输,B在之后的0.05s完成传输,所以A的结果错误,A正确。

所以,如果要达到精确的结果,可以在分流后先进行传输的包的延迟上减去一个包在全部带宽下的传输延迟。

常见问题的拓展

同样的上述问题,如果,其中某条20Mb/s线上的带宽变为10M/b,会发生什么事情呢?

image-20200921161624525

分析第一个路由器到第二个路由器之间的带宽边成10Mb/s

0.2s时,A完全到达第一个路由器,0.2+e时,B也完全到达第一个路由器。由于e的存在,第一个路由器会先传输A的数据包。这里,B产生2Mb / 10Mb/s = 0.2s的排队延迟。严格来讲,这里应该时(0.1 - e) s,不过一般而言,回省略e。

0.4s时,A完全到达第二个路由器,0.5s时,B完全到达第二个路由器。A在0.4s开始由第二个路由器向第三个路由器进行传输,在0.5s时完成。B此时不需要进行排队。

0.5s时,A完全达到第三个路由器,0.55s时,B完全到达第三个路由器。A在0.5s时开始由第三个路由器向第四个路由器进行传输,在0.6s时完成,B产生了0.05s的排队延迟。

B所产生的0.05s的排队延迟将会出现在第3,4,5个路由器,第6个路由器不会产生排队延迟。

那么也就说,除了最开始由于带宽的降低,A由第二个路由器传送到第三个路由器的时间恰好等于B由第一个路由器到达第二个路由器的时间,所以没有排队延迟,带宽的2倍弥补了数据规模的2倍。而之后,带宽相同,自然产生延迟。

分析第二个路由器到第三个路由器之间的带宽边成10Mb/s

0.2s时,A完全到达第一个路由器,0.2+e时,B也完全到达第一个路由器。由于e的存在,第一个路由器会先传输A的数据包。这里,B产生2Mb / 20Mb/s = 0.1s的排队延迟。严格来讲,这里应该时(0.1 - e) s,不过一般而言,回省略e。

0.3s时,A完全到达第二个路由器,0.35s时,B完全到达第二个路由器。A在0.3s开始由第二个路由器向第三个路由器进行传输,在0.5s时完成。B因而产生了0.15s的排队延迟。

0.5s时,A完全到达第三个路由器,0.6s时,B完全到达第三个路由器,A在0.5s开始由第三个路由器向第四个路由器进行传输,在0.6s时完成。B没有排队延迟。

0.6s时,A完全到达第四个路由器,0.65s时,B完全到达第三个路由器,A在0.6s开始由第三个路由器向第四个路由器进行传输,在0.7s时完成。B因而产生了0.05s的排队延迟。

B所产生的0.05s的排队延迟将会出现在第4,5个路由器,第6个路由器不会产生排队延迟。

那么也就是说,似乎并没有什么规律,貌似分析就好了。

分析第四个路由器到第五个路由器之间的带宽边成10Mb/s

0.2s时,A完全到达第一个路由器,0.2+e时,B也完全到达第一个路由器。由于e的存在,第一个路由器会先传输A的数据包。这里,B产生2Mb / 20Mb/s = 0.1s的排队延迟。严格来讲,这里应该时(0.1 - e) s,不过一般而言,回省略e。

0.3s时,A完全到达第二个路由器,0.35s时,B完全到达第二个路由器。A在0.3s开始由第二个路由器向第三个路由器进行传输,在0.4s时完成。B因而产生了0.05s的排队延迟。

0.4s时,A完全到达第三个路由器,0.45s时,B完全到达第四个路由器。A在0.4s开始由第三个路由器向第四个路由器进行传输,在0.5s时完成。B因而产生了0.05s的排队延迟。

0.5s时,A完全到达第四个路由器,0.55s时,B完全到达第四个路由器。A在0.5s开始由第三个路由器向第四个路由器进行传输,在0.7s时完成。B因而产生了0.15s的排队延迟。

0.7s时,A完全到达第五个路由器,0.8s时,B完全到达第五个路由器。A在0.7s开始由第三个路由器向第四个路由器进行传输,在0.8s时完成。B没有产生排队延迟。

0.8s时,A完全到达第六个路由器,0.85s时,B完全到达第六个路由器。

B所产生的0.05s的排队延迟将会出现在第2,3个路由器,第6个路由器不会产生排队延迟。

GBN传输协议最大信道利用率问题

解题思路

此类题目一般都是根据这个图经行计算,值得注意的是,此图中所给的n与序号个数之间不完全相等。

此图中所给的n应当等于GBN协议中发送窗口的大小,而GBN协议中发送窗口的大小至多为序号个数 - 1,因为一旦多于序号个数 - 1,可能会造成接受端的分组误判,造成错误的分组被接受。

具体可参见本人另一篇博客,链接之后再整。

所以,可以总结如下:

  • 序号个数:n
  • 单项信号传播延迟:RTT / 2
  • 数据传输速率:R
  • 数据帧长度(分组大小):L

那么,其信道最大利用率为:

  • \[\frac{(n - 1) * \frac{L}{R}}{RTT + L / R} \]

image-20201003171939927

image-20201004100310594

1

image-20201004152409953

关于这道题,需要注意的是,不能死记硬背的公式进行计算,需要理解其中的逻辑。

  • 一个帧的数据传输时间为:(500 * 8)b / 16kbps = 0.25s = 250 ms
  • 当第一个数据帧从传输开始到接收到其ACK信号的时间为:250ms + 250ms * 2 = 750 ms
  • 而整个窗口大小至多为3,即其可以的传输3个帧,共用时750ms
  • 也就是说,理想情况下,其窗口中帧全部传输完毕时,其第一个帧的ACK已经返回,其最大利用率自然就是 100%

2

image-20201004153601218

关于这道题,最大平均数据传输速率 = 信道带宽 * 最大信道利用率

  • 一个帧的数据传输时间为:(1000 * 8)b / 8Mbps = 0.08ms
  • 当第一个数据帧从传输开始到接收到其ACK信号的时间为:0.08ms + 50ms * 2 = 100.08 ms
  • 而整个窗口大小为999,即其可以的传输999个帧,共用时79.92ms
  • 其最大利用率为 79.92ms / 100.08ms = 0.8 (估算)
  • 最大平均数据传输速率 = 100Mbps * 0.8 = 80Mbps (估算)

这里可以套用原理中的公式,可能更为简单

3

image-20201004154026948

  • 这道题直接套用公式进行求解,以便了解不同求法令窗口尺寸为n
  • (n * 1000*8b / 128kbps) / (250 ms + 250 ms +1000 * 8b / 128kbps ) = n / 9 >= 0.8
  • n >= 7.2 ,而其序号个数应当 > n+1 > 8.2
  • 至少为 3

TCP连接问题

1

image-20201012082005045

其中比较特殊的点:

  • 一般的报文段不携带数据将不消耗序号。SYN报文段虽然不携带数据, 但是也要消耗1个序列号。
  • 故而从图中可以看出:前两次握手客户端和服务端都需要向对方回复 x+1 或 y+1。最后一次握手在默认不携带数据的情况下, 由于SYN 不是 1 , 是不消耗序列号的。 所以三次握手结束后, 客户端下一个发送的报文中 seq 依旧是 x+1
  • 从下图也可以进行说明

2 一些论述类问题

下面部分部分问题参考自博客:TCP 为什么三次握手而不是两次握手(正解版)

为什么 TCP 需要握手这个操作

TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出序号(sequence number)确认号(acknowledgement number) 的使用。

为什么必须是三次握手,不能用两次握手进行连接?

  • 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
  • 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
posted @ 2020-10-13 19:23  zqybegin  阅读(247)  评论(0编辑  收藏  举报