HTTP
本文最后更新于9 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

第13题

本题考查的是“DNS 查询 RTT + HTTP/1.1 流水线访问页面对象”的综合计算。

题干关键信息是:

主机访问 http://www.cskaoyan.com/index.html,页面中还引用了同一网站上的 7 个小图像文件。浏览器使用流水线方式的 HTTP/1.1。主机到本地域名服务器、各域名服务器之间的往返时延都为 1RTT。本地域名服务器提供递归查询,其他域名服务器提供迭代查询。

先算 DNS 解析。最坏情况下没有缓存,需要:

主机 → 本地域名服务器:1RTT
本地域名服务器 → 根域名服务器:1RTT
本地域名服务器 → .com 顶级域名服务器:1RTT
本地域名服务器 → cskaoyan.com 权威域名服务器:1RTT

所以 DNS 解析最多需要:

4RTT

再算 HTTP 访问过程。解析出 IP 后,需要先建立 TCP 连接:

TCP 三次握手:1RTT
请求并接收 index.html:1RTT
请求并接收 7 个小图像文件:1RTT

注意这里是 HTTP/1.1 流水线方式,同一 TCP 连接上可以连续发送多个请求,不需要每个图片都单独等 1RTT。所以 7 个小图像文件不是 7RTT,而是可以按 1RTT 处理。

总时间为:

DNS 解析 4RTT + TCP 建连 1RTT + 获取主页 1RTT + 获取 7 个图片 1RTT = 7RTT

所以第13题选 C,7。

易错点在于把 7 个图片误算成 7 个 RTT。流水线 HTTP/1.1 的关键就是多个请求可以连续发出,不必等前一个响应回来后再发下一个请求。

你这个质疑是对的:第14题我之前的解释没有展开“拥塞窗口/发送窗口变化”,所以推理不够严谨;只是最后的 4RTT + 2MSL 恰好和官方答案一致。第15题我之前按“内网主机新发起一个连接”理解了,但这道题的官方考点是“源端口 80 表示 HTTP 响应分组,响应分组必须匹配已有 NAT 表项”,所以按考研题意应选 C。

第14题:为什么必须考虑拥塞窗口,但我没考虑也得到同样答案?

本题的关键不是单纯的“四次挥手需要 2RTT”,而是:服务器 S 还有 4KB 数据没发完,并且初始拥塞窗口只有 1MSS = 1KB,因此数据不能一次性全发出去。

题干条件是:

RTT = 50ms
MSL = 800ms
MSS = 1KB
HTTP 响应数据 = 5KB
初始拥塞窗口 = 1MSS = 1KB
H 收到第一个 1KB 后,就向 S 发送 FIN

官方的正确过程可以这样看:

t = 0
H → S:SYN

t = 1RTT
H 收到 SYN+ACK,然后发送第 3 次握手 ACK
这个 ACK 中顺便携带 HTTP 请求

t = 2RTT
H 收到 S 发来的第 1KB 数据
因为初始拥塞窗口只有 1KB,所以 S 一开始只能发 1KB
H 收到后,向 S 发送 ACK + FIN

t = 2.5RTT
S 收到 H 的 ACK + FIN
此时 ACK 确认了前 1KB 数据,拥塞窗口增大到 2KB
S 还有 4KB 没发,于是先发送 2KB

t = 3RTT
H 收到这 2KB,向 S 发送 ACK

t = 3.5RTT
S 收到 ACK,再发送最后 2KB,并在最后一个报文段中携带 FIN

t = 4RTT
H 收到最后 2KB + FIN,向 S 发送 ACK
H 进入 TIME-WAIT,等待 2MSL

所以总时间是:

4RTT + 2MSL
= 4 × 50ms + 2 × 800ms
= 200ms + 1600ms
= 1800ms

所以第14题选 D。

我之前的说法把过程粗略写成:

三次握手 1RTT
请求并收到第一个数据 1RTT
连接释放 2RTT
TIME-WAIT 2MSL

这个分解最后也是:

4RTT + 2MSL

但它的问题在于:我没有说明剩余 4KB 数据为什么正好又占用了 2RTT。官方真正的依据是拥塞窗口变化:

初始 cwnd = 1KB,所以第一次只能发 1KB
收到 ACK 后 cwnd = 2KB,所以第二批发 2KB
再收到 ACK 后,最后 2KB 和 FIN 一起发出

也就是说,我之前把“剩余数据发送 + FIN 释放”粗略压成了“释放过程 2RTT”,数值上撞对了,但严格考研解题必须按官方这种窗口变化来算。否则换一组窗口大小,简化算法就可能错。

第15题:怎么判断 192.168.32.56 是私有地址?

IPv4 私有地址范围在考研中要直接记住:

10.0.0.0 ~ 10.255.255.255        即 10.0.0.0/8
172.16.0.0 ~ 172.31.255.255      即 172.16.0.0/12
192.168.0.0 ~ 192.168.255.255    即 192.168.0.0/16

题目中的地址是:

192.168.32.56

它落在:

192.168.0.0/16

所以它是私有地址。

NAT 路由器的公网地址是:

205.56.79.35

这个不在上面三个私有地址范围内,所以是公网地址。

第15题:为什么源端口 80 表示 HTTP 响应分组?

HTTP 使用 TCP 80 端口时,通常有这样的方向关系:

HTTP 请求:
客户端随机端口 → Web 服务器 80 端口

HTTP 响应:
Web 服务器 80 端口 → 客户端随机端口

所以判断 HTTP 报文方向时,要看 80 端口出现在源端口还是目的端口。

如果是:

源端口 = 80

通常说明这个报文是 Web 服务器发出的响应报文。

如果是:

目的端口 = 80

通常说明这个报文是客户端发给 Web 服务器的请求报文。

本题给的是:

源 IP 地址:192.168.32.56
源端口:80

所以按考研题意,它表示:

内网主机 192.168.32.56 作为 Web 服务器,正在发出 HTTP 响应分组。

第15题:为什么不是“新增一个 NAT 表项”?

NAT 表中已有表项是:

2056  ↔  192.168.32.56:21
2057  ↔  192.168.32.56:20
1892  ↔  192.168.48.26:80
2256  ↔  192.168.55.106:80

现在收到的分组来自:

192.168.32.56:80

表中没有这个映射。

注意,不能只看 IP 地址相同。NAT/PAT 转换要看的是:

内部 IP 地址 + 内部端口号

表中虽然有:

192.168.32.56:21
192.168.32.56:20

但没有:

192.168.32.56:80

所以它不匹配已有 NAT 表项。

如果这个报文真的是发给外网主机的 HTTP 响应,那么前提是外网主机曾经向内网 Web 服务器 192.168.32.56:80 发过 HTTP 请求。

但是外网主机不能直接访问私有地址 192.168.32.56。它必须访问 NAT 路由器的公网地址,再由 NAT 路由器根据表项转发到内网服务器。因此,若外网请求真的能到达 192.168.32.56:80,NAT 表中必然应该存在类似:

某个转换端口 ↔ 192.168.32.56:80

可是现在表中没有这一项。

所以这个 HTTP 响应分组不可能是对外网主机合法请求的响应。

第15题:官方说“只可能是对内网主机请求的响应”怎么理解?

官方的意思是:

这个分组源地址是私有地址,源端口是 80,说明它像是内网 Web 服务器发出的 HTTP 响应。既然 NAT 表中没有 192.168.32.56:80 的转换项,那么它不可能是在响应外网主机通过 NAT 发来的请求。

那它更可能是在响应另一个内网主机的 HTTP 请求。

例如:

内网主机 A:192.168.32.56:80
内网主机 B:192.168.x.x:随机端口

B 请求 A 的 Web 服务,A 返回 HTTP 响应。这种通信本来就在内网中完成,不需要 NAT 路由器把它转发到公网。

因此 NAT 路由器看到这个没有匹配表项的分组时,不应该新增 NAT 转换项,也不应该转发到公网,而是丢弃。

所以第15题选 C。

第15题的快速判断口诀

这类 NAT 题可以按这个顺序判断:

第一步:看地址是不是私有地址
192.168.x.x、10.x.x.x、172.16~31.x.x 都是私有地址

第二步:看端口 80 在源端口还是目的端口
目的端口 80:通常是 HTTP 请求
源端口 80:通常是 HTTP 响应

第三步:查 NAT 表是否有 “内部 IP + 内部端口” 对应项
有表项:按表项转换
无表项:
    如果是内网主机新发起的请求,可以新增表项
    如果是响应分组,则不能凭空新增表项,应丢弃

本题是:

192.168.32.56 是私有地址
源端口 80,说明是 HTTP 响应
NAT 表中没有 192.168.32.56:80
所以丢弃

因此第15题按官方答案选 C。

第16题

本题问“使用浏览器访问某大学的 Web 网站主页时,不可能使用到的协议”。

选项是:

A. PPP
B. ARP
C. UDP
D. SMTP

浏览 Web 主页时,主要涉及:

应用层:HTTP
传输层:TCP
网络层:IP
数据链路层:可能用以太网、PPP 等

此外,访问域名时需要 DNS,而 DNS 通常使用 UDP,所以 UDP 可能被用到。若主机在局域网中访问网关,还可能用 ARP 获取网关的 MAC 地址。PPP 也可能用于某些接入链路。

SMTP 是 Simple Mail Transfer Protocol,简单邮件传输协议,用于电子邮件传输,不用于浏览器访问 Web 主页。

所以第16题选 D,SMTP。

这题的陷阱是不要只盯着 HTTP。访问网页虽然应用层是 HTTP,但整个通信过程中可能会涉及 ARP、DNS/UDP、PPP 等其他层次的协议。

第17题

HTTP 请求报文为:

GET /index.html HTTP/1.1
Host: www.test.edu.cn
Connection: Close
Cookie: 123456

逐项分析。

A 说“该浏览器请求浏览 index.html”。这是正确的。GET /index.html HTTP/1.1 表示请求服务器上的 /index.html 资源。

B 说“index.html 存放在 www.test.edu.cn 上”。从考试语境看,Host: www.test.edu.cn 表示请求的目标主机是 www.test.edu.cn,所以可以认为该资源是向这个主机请求的。严格说,请求报文不能保证资源一定存在,服务器也可能返回 404,但本题不是考这个细节。

C 说“该浏览器请求使用持续连接”。这是错误的。HTTP/1.1 默认支持持续连接,但这里请求头明确写了:

Connection: Close

这表示客户端希望服务器响应后关闭 TCP 连接,不使用持续连接。

D 说“该浏览器曾经浏览过 www.test.edu.cn”。这是正确的。请求中带有:

Cookie: 123456

Cookie 通常是服务器此前通过 Set-Cookie 设置到浏览器中的,浏览器之后再次访问该站点时会携带 Cookie。因此可以判断该浏览器之前访问过该站点,或者至少之前获得过该站点相关 Cookie。

所以第17题选 C。

这题最常见的误区是看到 HTTP/1.1 就直接认为一定是持续连接。HTTP/1.1 默认持续连接,但 Connection: Close 会明确要求关闭连接。

本题结论如下:

1)Web 服务器的 IP 地址是 64.170.98.32
该主机默认网关的 MAC 地址是 00-21-27-21-51-EE

2)该主机使用 ARP 协议确定目的 MAC 地址。
封装 ARP 请求报文的以太网帧目的 MAC 地址是广播地址:

FF-FF-FF-FF-FF-FF

3)从发出图 2 中的 Web 请求开始,到浏览器收到全部内容为止,需要:

6 RTT

4)该 IP 分组经过路由器 R 转发时,需要修改 IP 首部中的字段主要有:

TTL、生存时间
源 IP 地址
首部校验和

如果只按普通路由转发,不考虑 NAT,则修改 TTL首部校验和;但本题主机 IP 是私有地址 10.2.128.100,路由器外网接口是 101.12.123.15,所以应考虑 NAT,因此还要修改 源 IP 地址


这道题本质上是把一个以太网帧从头拆开,考查“以太网首部、IP 首部、TCP 首部、HTTP 报文、ARP、HTTP RTT、路由器转发/NAT”几个知识点的综合。

图 2 给出的前 80B 以太网帧内容开头是:

00 21 27 21 51 ee  00 15 c5 c1 5e 28  08 00  45 00 ...

以太网帧首部结构是:

目的 MAC 地址:6B
源 MAC 地址:6B
类型字段:2B
数据字段:46~1500B
CRC:4B

所以前 14B 可以这样拆:

目的 MAC:00-21-27-21-51-EE
源 MAC:00-15-C5-C1-5E-28
类型字段:08 00

08 00 表示后面封装的是 IPv4 分组。题干已经给出该主机 MAC 地址为 00-15-C5-C1-5E-28,这正好对应以太网帧中的源 MAC 地址,因此这个帧确实是该主机发出的。

这里最容易错的地方是:访问 Web 服务器时,以太网帧的目的 MAC 地址不一定是 Web 服务器的 MAC 地址。因为 Web 服务器在 Internet 上,不在本局域网内,所以主机发出的以太网帧只需要交给下一跳,也就是默认网关。于是图 2 中的目的 MAC 00-21-27-21-51-EE 是默认网关的 MAC 地址,不是 Web 服务器的 MAC 地址。

继续看 IP 首部。以太网首部之后从 45 00 开始是 IP 首部:

45 00 01 ef 11 3b 40 00 80 06 ba 9d 0a 02 80 64 40 aa 62 20

其中:

45:IPv4,首部长度为 5 × 4B = 20B
01 ef:IP 分组总长度,0x01ef = 495B
80:TTL = 128
06:上层协议是 TCP
0a 02 80 64:源 IP 地址
40 aa 62 20:目的 IP 地址

把目的 IP 地址转换成十进制:

40 aa 62 20
= 0x40.0xaa.0x62.0x20
= 64.170.98.32

所以 Web 服务器的 IP 地址是 64.170.98.32

源 IP 地址:

0a 02 80 64
= 10.2.128.100

这正好是题干给出的主机 IP 地址。

第 2 问考 ARP。主机要发以太网帧,必须知道“下一跳 IP 对应的 MAC 地址”。由于 Web 服务器不在本地网络中,所以主机不是去 ARP 查询 64.170.98.32 的 MAC 地址,而是查询默认网关 10.2.128.1 的 MAC 地址。

ARP 请求是局域网广播发送的,因为发送方此时还不知道目标 MAC 地址,所以封装 ARP 请求的以太网帧目的 MAC 地址是:

FF-FF-FF-FF-FF-FF

但是 ARP 得到的结果,即默认网关的 MAC 地址,就是之后真正发送 Web 请求时以太网帧里的目的 MAC 地址:

00-21-27-21-51-EE

这两个地址不要混淆:ARP 请求帧的目的 MAC 是广播地址;Web 请求数据帧的目的 MAC 是默认网关 MAC。

第 3 问考 HTTP 持续连接和非流水线方式。

题干说:

HTTP/1.1 协议以持续的非流水线方式工作
一次请求-响应时间为 RTT
rfc.html 页面引用了 5 幅 JPEG 小图像
从发出图 2 中的 Web 请求开始计算

图 2 中的请求内容能看到:

GET /rfc.html HTTP/1.1

也就是说此时已经发出了对基本 HTML 页面 rfc.html 的请求。收到这个 HTML 页面需要 1 个 RTT。

浏览器收到并解析 rfc.html 后,发现里面引用了 5 幅 JPEG 小图像。由于是持续连接,所以不需要为每个对象重新建立 TCP 连接;但由于是非流水线方式,所以必须等一个请求的响应回来后,才能发送下一个请求。于是 5 幅小图像需要依次请求,分别消耗 5 个 RTT。

所以总时间是:

HTML 页面:1 RTT
5 幅 JPEG 小图像:5 RTT
合计:6 RTT

因此答案是 6 RTT

这里如果题目说的是“非持续连接”,并且每个对象都要重新建立 TCP 连接,就会多算 TCP 建立连接的 RTT;如果题目说的是“持续连接 + 流水线”,5 个小图像的请求可以连续发出,RTT 数又会减少。本题明确是“持续的非流水线”,所以是一个对象一个 RTT,但不用重新握手。

第 4 问考路由器转发 IP 分组时对首部字段的修改。

先看该 IP 分组长度:

IP 总长度 = 0x01ef = 495B

题图中外网链路 MTU 是 1500B,495B 小于 1500B,所以不需要分片。因此不需要修改片偏移、标志、总长度等分片相关字段。

普通路由器每转发一次 IP 分组,都会把 TTL 减 1。原 TTL 是:

80H = 128

经过 R 转发后变成:

127

TTL 变了,IP 首部校验和也必须重新计算,所以首部校验和也要修改。

此外,本题特别给出主机 IP 是:

10.2.128.100

这是私有地址。路由器连接 Internet 的接口地址是:

101.12.123.15

私有地址不能直接在 Internet 上路由,所以 R 转发到 Internet 时通常要进行 NAT,把源 IP 地址从私有地址改为路由器外网接口地址:

10.2.128.100  →  101.12.123.15

因此 IP 首部中还要修改源 IP 地址。源 IP 一变,IP 首部校验和也必须重新计算。

所以第 4 问按本题语境应答:

TTL 字段:减 1
源 IP 地址字段:由 10.2.128.100 改为 101.12.123.15
首部校验和字段:重新计算

补充一点:如果进行的是 NAPT,路由器还可能修改 TCP 首部中的源端口,并重算 TCP 校验和。但题目问的是“IP 分组头中的哪些字段”,所以主答案只写 IP 首部字段即可,不要把 TCP 源端口写进 IP 首部字段里。


官方答案:1)以太网帧的数据部分是数据报,只要数出相应字段所在的字节即可。由图3可知以太网帧首部有6+6+2=14B,由图4可知数据报首部的目的IP地址字段前有4×4=16B从图2的帧第1字节开始数14+16=30B,得到目的地址为40.aa.62.20(十六进制数)转换成十进制数为64.170.98.32。由图2可知以太网帧的前6字节 00-21-27-21-51-ee是目的 MAC 地址,即为主机的默认网关10.2.128.1端口的 MAC 地址。2)ARP用于解决PP地址到MAC地址的映射问题。主机的ARP进程在本以太网以广播形式发送ARP请求分组,在以太网上广播时,以太网帧的目的地址为全1,即FF-FF-FF-FF-FF-FF3)HTTP/1.1协议以持续的非流水线方式工作时,服务器发送响应后仍在一段时间内保持这段连接,客户在收到前一个请求的响应后才能发出下一个请求。注意题目说的是从发出Web请求开始,所以此时TCP连接已经建立。第1个RTT用于请求 Web页面,客户收到第一个请求的响应后(还有5个请求未发送),每访问一次对象就用去1RTT。因此共需1+5=6RTT后浏览器收到全部内容。
4)私有地址和Internet上的主机通信时,须由NAT路由器进行网络地址转换,把数据报的源IP地址(本题为私有地址10.2.128.100)转换为NAT路由器的一个全球地址(本题为 101.12.123.15)。因此,源地址字段0a028064变为65 0c7b 0f。IP 数据报每经过一个路由器,TTL值就减1,并重新计算首部检验和。若分组的长度超过输出链路的 MTU,则总长度字段、标志字段、片偏移字段也会发生变化。 解答里面我们注意到他做第一小问,求数据包也要求那些内容,高起来让人混淆。我想知道,对于这种类型的题目,看这种数据包里面,然后去区分哪一块是哪一块去找细节的那种类型题目该怎么做?非流水线方式与流水线有什么区别?就是说它http有两个版本的协议,能否采用流水,能否运行这些区别,该如何进行思考和区分呢?

官方答案第一问看起来绕,是因为它没有从“协议含义”开始讲,而是直接用了“按字节偏移量定位字段”的方法。对于这种题,最稳的思路不是死盯十六进制串,而是先明确一件事:

以太网帧里面装的是 IP 数据报,IP 数据报里面装的是 TCP 报文段,TCP 报文段里面才是 HTTP 请求报文。

也就是:

以太网帧
└── IP 数据报
    └── TCP 报文段
        └── HTTP 请求报文

所以解析十六进制数据时,本质就是“层层剥壳”。


一、这类十六进制数据帧题怎么做

遇到这种题,先不要急着找答案,而是先画出分层边界。图 2 的开头是:

00 21 27 21 51 ee  00 15 c5 c1 5e 28  08 00  45 00 ...

以太网帧首部固定是 14B:

目的 MAC 地址:6B
源 MAC 地址:6B
类型字段:2B

所以可以直接切开:

00 21 27 21 51 ee    目的 MAC
00 15 c5 c1 5e 28    源 MAC
08 00                类型字段,表示后面是 IPv4
45 00 ...             IP 数据报开始

注意,这里 08 00 是以太网类型字段,表示以太网帧的数据部分封装的是 IPv4 数据报。也就是说,从 45 00 开始才是 IP 首部。

官方答案说“以太网帧的数据部分是数据报”,这里的“数据报”指的就是 IP 数据报。不要把“以太网帧的数据部分”和“HTTP 数据内容”混在一起。以太网帧的数据部分并不是直接 HTTP,而是先装 IP,IP 里面再装 TCP,TCP 里面才装 HTTP。


二、为什么目的 IP 要从 14 + 16 开始找

IP 首部结构中,源 IP 地址和目的 IP 地址在首部靠后的位置。标准 IPv4 首部中:

版本 + 首部长度:1B
服务类型:1B
总长度:2B
标识:2B
标志 + 片偏移:2B
TTL:1B
协议:1B
首部检验和:2B
源 IP 地址:4B
目的 IP 地址:4B

从 IP 首部开始算,目的 IP 地址前面一共有 16B:

前 12B:版本、首部长度、服务类型、总长度、标识、标志、片偏移、TTL、协议、首部检验和
再 4B:源 IP 地址
合计:16B

而 IP 首部不是从整个以太网帧第 0 字节开始的,而是在以太网首部 14B 之后开始的。

所以目的 IP 地址在整个以太网帧中的位置是:

以太网首部 14B + IP 首部中目的 IP 前面的 16B = 跳过 30B

因此从整个帧开头跳过 30B 后,接下来 4B 就是目的 IP 地址。

图 2 中可以定位到:

40 aa 62 20

每个字节转换成十进制:

40H = 64
aaH = 170
62H = 98
20H = 32

所以目的 IP 地址是:

64.170.98.32

这里有一个容易混淆的点:官方说“从图 2 的帧第 1 字节开始数 14 + 16 = 30B”,意思不是“第 30 个字节就是目的 IP”,而是“跳过前 30B,接下来的 4B 是目的 IP 地址”。十六进制转储里经常用偏移量,比如 000000100020,这些是地址偏移,不是普通行号。


三、做这种题要掌握的字段定位模板

这类题最常考的字段其实不多。以太网 + IPv4 + TCP + HTTP 组合题,常用模板如下。

以太网帧首部固定 14B:

字段长度作用
目的 MAC6B当前链路下一跳的 MAC
源 MAC6B当前发送方的 MAC
类型2B0800 表示 IPv4,0806 表示 ARP

IPv4 首部最小 20B,但要看首部长度字段。第一个字节 45 的含义是:

4:IPv4
5:首部长度 = 5 × 4B = 20B

IPv4 首部常考字段:

IP 首部内偏移字段长度
0版本 + 首部长度1B
2总长度2B
4标识2B
6标志 + 片偏移2B
8TTL1B
9协议1B
10首部检验和2B
12源 IP 地址4B
16目的 IP 地址4B

所以本题中:

以太网首部 14B
IP 首部从第 14B 后开始
源 IP 地址 = 14 + 12 后的 4B
目的 IP 地址 = 14 + 16 后的 4B

图 2 中:

源 IP:0a 02 80 64 = 10.2.128.100
目的 IP:40 aa 62 20 = 64.170.98.32

TCP 首部在 IP 首部之后。本题 IP 首部长度是 20B,所以 TCP 首部开始位置是:

以太网首部 14B + IP 首部 20B = 34B

TCP 首部里面前 2B 是源端口,后 2B 是目的端口。图中可以看到:

04 ff 00 50

其中:

04 ff:源端口
00 50:目的端口 = 80

目的端口 80,说明这是发往 Web 服务器的 HTTP 请求。

TCP 首部长度也要看 TCP 首部中的数据偏移字段。图中有:

50 18

其中 50 的高 4 位是 5,表示 TCP 首部长度是:

5 × 4B = 20B

所以 HTTP 请求报文从:

以太网首部 14B + IP 首部 20B + TCP 首部 20B = 54B

处开始。

图中后面确实能看到 ASCII 内容:

47 45 54 20 ...

转换成字符就是:

GET ...

因此这是一个 HTTP GET 请求。


四、这类题的核心不是“背图”,而是建立偏移意识

遇到这类题,可以按下面顺序做:

第一步,先切以太网首部。前 6B 是目的 MAC,接着 6B 是源 MAC,再 2B 是类型字段。

第二步,看类型字段。如果是 0800,后面是 IPv4;如果是 0806,后面是 ARP。

第三步,从 IP 首部第一个字节判断 IP 首部长度。例如 45 表示 IPv4,IP 首部长度 20B。

第四步,按 IP 首部固定位置找源 IP、目的 IP、TTL、协议字段。协议字段如果是 06,说明上层是 TCP;如果是 11,说明上层是 UDP;如果是 01,说明是 ICMP。

第五步,如果是 TCP,再根据 TCP 首部找源端口、目的端口,并根据 TCP 首部长度确定应用层数据从哪里开始。

第六步,如果应用层数据能转成 ASCII,就可以识别 HTTP 请求行,比如 GET /rfc.html HTTP/1.1

这种题不要一开始就从一大串十六进制里硬找。应该先问:“现在我在哪一层?这一层首部多长?下一层从哪里开始?”


五、目的 MAC 和目的 IP 为什么不是一回事

这道题最容易混的地方是:目的 MAC 是默认网关的 MAC,但目的 IP 是 Web 服务器的 IP。

原因是 IP 地址负责端到端通信,MAC 地址只负责当前链路上的下一跳通信。

本题中主机是:

10.2.128.100

Web 服务器是:

64.170.98.32

它们不在同一个局域网内,所以主机不能直接把以太网帧发给 Web 服务器。主机只能先把帧发给默认网关 10.2.128.1。因此:

以太网帧目的 MAC:默认网关的 MAC
IP 数据报目的 IP:Web 服务器的 IP

图 2 前 6B 是:

00 21 27 21 51 ee

这是以太网帧的目的 MAC,也就是默认网关接口的 MAC 地址。

而 IP 首部中的目的 IP 是:

40 aa 62 20 = 64.170.98.32

这是 Web 服务器的 IP 地址。

这类题常考一句话:

跨网段通信时,目的 IP 是最终目标主机,目的 MAC 是下一跳路由器。

六、非流水线方式和流水线方式的区别

HTTP 的 RTT 题,核心不是背版本,而是区分三个概念:

非持续连接
持续连接,非流水线
持续连接,流水线

“持续连接”和“流水线”不是一回事。

持续连接的意思是:TCP 连接建立后,可以在同一个 TCP 连接上传多个 HTTP 请求和响应,不必每请求一个对象就重新建立一次 TCP 连接。

流水线的意思是:客户端可以不等前一个响应回来,就连续发送多个请求。

所以:

持续连接解决的是:TCP 连接是否复用
流水线解决的是:多个 HTTP 请求是否可以连续发出

七、HTTP/1.0、HTTP/1.1 和流水线怎么区分

在考研语境中,通常这样理解:

类型默认连接方式是否考虑流水线
HTTP/1.0默认非持续连接一般不考虑流水线
HTTP/1.1默认持续连接可以有非流水线或流水线,题目会说明
HTTP/2多路复用一般不是 408 传统 RTT 题重点

HTTP/1.0 默认是非持续连接,也就是每请求一个对象,通常都要建立一个新的 TCP 连接,响应结束后连接关闭。当然 HTTP/1.0 后来也有 Keep-Alive 扩展,但考研题如果没特别说明,一般按默认非持续连接处理。

HTTP/1.1 默认是持续连接,也就是一个 TCP 连接可以复用。但 HTTP/1.1 持续连接又分为非流水线和流水线两种情况。

本题明确说:

HTTP/1.1 协议以持续的非流水线方式工作

所以不能只看到 HTTP/1.1 就默认“全部请求一起发”。题目已经限定为非流水线。


八、持续非流水线如何计算 RTT

持续非流水线的特点是:

同一个 TCP 连接可以复用
但必须收到前一个响应后,才能发送下一个请求

本题说“从发出图 2 中的 Web 请求开始”,说明此时 TCP 连接已经建立,不需要再算 TCP 三次握手的 1 个 RTT。

图 2 中请求的是:

GET /rfc.html HTTP/1.1

收到这个 HTML 页面需要 1 RTT。

浏览器收到并解析 HTML 页面后,发现里面引用了 5 幅 JPEG 小图像。由于是非流水线,5 幅图片不能一次性把请求全部发出去,而是必须这样:

请求图片1 -> 等响应回来
请求图片2 -> 等响应回来
请求图片3 -> 等响应回来
请求图片4 -> 等响应回来
请求图片5 -> 等响应回来

每个对象 1 RTT,所以:

rfc.html:1 RTT
5 幅 JPEG:5 RTT
合计:6 RTT

因此本题答案是:

6 RTT

九、如果是流水线方式,会怎么算

如果题目改成“HTTP/1.1 持续连接,流水线方式”,那么流程不同。

仍然要先请求 rfc.html,因为浏览器必须先拿到 HTML 页面,解析后才知道里面引用了哪 5 幅图片。

所以 HTML 页面仍然需要:

1 RTT

但是解析出 5 幅 JPEG 后,流水线方式允许客户端连续发出 5 个请求,而不用等前一个响应回来。

理想情况下,这 5 个图片请求可以合并看成再用:

1 RTT

所以从已经发出第一个 Web 请求开始算:

HTML 页面:1 RTT
5 幅图片流水线请求:1 RTT
合计:2 RTT

如果题目从“开始建立 TCP 连接”算,还要额外加上 TCP 三次握手的 1 RTT。


十、HTTP RTT 题的常用判断公式

假设一个 HTML 页面引用了 N 个小对象,并且不考虑 DNS、传输时延、服务器处理时延,只按 RTT 计算。

如果题目说“从发出 Web 请求开始”,说明 TCP 已经建立,常见结论是:

方式RTT 数
持续连接,非流水线1 + N
持续连接,流水线1 + 1
非持续连接,串行请求1 + 2N

这里的 1 是请求基本 HTML 页面。非持续连接下,后面每个嵌入对象都要重新建立 TCP 连接,所以每个对象约 2 RTT:一个 RTT 建立连接,一个 RTT 请求响应。

如果题目说“从用户点击链接开始”或者“从建立 TCP 连接开始”,就要注意是否要加 TCP 三次握手的 1 RTT。如果还涉及 DNS 查询,还要把 DNS 查询时间也算进去。

本题题干专门说“从发出图 2 中的 Web 请求开始”,就是为了告诉考生:不要再加 TCP 建立连接的 RTT。


十一、这道题的易错点总结

第一,看到目的 MAC,不要以为它就是 Web 服务器的 MAC。跨网段通信时,以太网帧的目的 MAC 是下一跳路由器,也就是默认网关的 MAC。

第二,看到目的 IP,才是最终目标 Web 服务器。IP 地址端到端不变,MAC 地址逐跳变化。若有 NAT,源 IP 会在 NAT 路由器处被改写。

第三,解析十六进制数据时,不要把以太网帧、IP 数据报、TCP 报文段、HTTP 请求混成一层。要先切 14B 以太网首部,再看 IP 首部,再看 TCP 首部。

第四,HTTP/1.1 默认持续连接,但持续连接不等于流水线。题目如果说“持续非流水线”,就必须一个请求响应结束后再发下一个请求。

第五,RTT 题要特别看起算点。题目说“从发出 Web 请求开始”,通常表示 TCP 连接已经建立,不再计算三次握手的 1 RTT。

最后可以把这类题压缩成一句做题口诀:

先剥以太网,再剥 IP,再剥 TCP,最后看 HTTP;
MAC 看下一跳,IP 看最终端;
持续看是否复用连接,流水看是否连续发请求;
RTT 先看起算点,再看对象数。

本题结论:

1)H1 除了 HTTP,还运行了 DNS 应用层协议,用于把域名 www.abc.com 解析成 Web 服务器的 IP 地址。DNS 报文从应用层到数据链路层的封装过程是:

DNS 报文 → UDP 数据报 → IP 数据报 → 以太网帧

另外,为了把 IP 数据报封装成以太网帧,H1 还需要使用 ARP 获取目的 MAC 地址,但 ARP 不是 DNS 报文的“逐层封装协议”,而是为发送以太网帧服务的地址解析协议。

2)t1 时刻,S 的交换表内容至少为:

<00-11-22-33-44-cc, 4>
<00-11-22-33-44-bb, 1>
<00-11-22-33-44-aa, 2>

也就是:

H1 的 MAC 地址 → 端口 4
本地域名服务器的 MAC 地址 → 端口 1
路由器 R 的 MAC 地址 → 端口 2

不会有 H2 的表项,因为 H2 在这个过程中没有发送帧,交换机只能根据“收到帧的源 MAC 地址”学习表项。

3)从 t0 到 t1 期间,H2 至少收到 2 个与此次 Web 访问相关的帧。这两个帧都是 ARP 请求广播帧,目的 MAC 地址均为:

FF-FF-FF-FF-FF-FF

这道题的主线是:H1 访问 www.abc.com,先要做域名解析,再发送 HTTP 请求。因为 t0 时刻 H1 的 ARP 表和 S 的交换表都是空的,所以中间会发生 ARP 广播、DNS 查询、ARP 广播、HTTP 请求这几个阶段。

先看拓扑中的地址:

H1:192.168.1.2/25,MAC = 00-11-22-33-44-cc,接 S 的 4 号端口
H2:192.168.1.3/25,MAC = 00-11-22-33-44-dd,接 S 的 3 号端口
本地域名服务器:192.168.1.126/25,MAC = 00-11-22-33-44-bb,接 S 的 1 号端口
路由器 R 内网接口:192.168.1.1/25,MAC = 00-11-22-33-44-aa,接 S 的 2 号端口

这里的 /25 表示子网掩码是:

255.255.255.128

所以本地子网范围是:

192.168.1.0 ~ 192.168.1.127

H1、H2、本地域名服务器、路由器 R 的内网接口都在同一个局域网中。因此 H1 要访问本地域名服务器时,可以直接发给本地域名服务器;H1 要访问 Internet 上的 Web 服务器时,则需要把帧交给默认网关 R。


H1 在浏览器中访问 www.abc.com,不能一开始就发 HTTP 请求,因为 HTTP 请求需要知道 Web 服务器的 IP 地址。用户输入的是域名,所以首先要做 DNS 解析。

DNS 是应用层协议。常规情况下,DNS 查询报文封装在 UDP 中,UDP 再封装进 IP,IP 再封装进以太网帧。因此第 1 问应答为:

应用层协议:DNS
封装过程:DNS → UDP → IP → Ethernet

这里有个容易混的点:ARP 一定会出现,但它不是 DNS 报文从应用层向下封装的一层。DNS 报文不会封装在 ARP 里面。ARP 的作用是:在发送以太网帧之前,先把下一跳 IP 地址解析成 MAC 地址。


从 t0 到 t1 的过程可以按时间顺序拆开。

第一步,H1 要向本地域名服务器 192.168.1.126 发送 DNS 查询。由于 H1 的 ARP 表为空,它不知道本地域名服务器的 MAC 地址,所以 H1 先发送 ARP 请求:

谁是 192.168.1.126?请告诉 192.168.1.2。

这个 ARP 请求封装成以太网帧时,目的 MAC 是广播地址:

FF-FF-FF-FF-FF-FF

源 MAC 是 H1 的 MAC:

00-11-22-33-44-cc

该帧从 S 的 4 号端口进入交换机。交换机收到帧后,根据源 MAC 学习到:

<00-11-22-33-44-cc, 4>

因为这是广播帧,S 会从除 4 号端口以外的其他端口转发出去,所以本地域名服务器、R、H2 都会收到这个 ARP 请求。于是 H2 收到第 1 个相关帧,目的 MAC 是全 1 广播地址。

第二步,本地域名服务器收到 ARP 请求后,向 H1 发送 ARP 响应。ARP 响应是单播帧:

源 MAC:00-11-22-33-44-bb
目的 MAC:00-11-22-33-44-cc

这个帧从 S 的 1 号端口进入,所以 S 学习到:

<00-11-22-33-44-bb, 1>

同时,S 已经知道 H1 的 MAC 在 4 号端口,所以这个 ARP 响应只会被转发到 4 号端口,不会发给 H2。

第三步,H1 已经知道本地域名服务器的 MAC,于是发送 DNS 查询。这个 DNS 查询帧大致是:

源 MAC:H1 的 MAC = 00-11-22-33-44-cc
目的 MAC:本地域名服务器的 MAC = 00-11-22-33-44-bb

因为 S 已经知道 bb 在 1 号端口,所以该帧只转发给 1 号端口,不会转发给 H2。

随后本地域名服务器返回 DNS 响应,告诉 H1 www.abc.com 对应的 Web 服务器 IP 地址。这个响应帧从 1 号端口进来,发往 4 号端口,也不会发给 H2。

第四步,H1 得到 Web 服务器 IP 后,准备发 HTTP 请求。因为 Web 服务器在 Internet 上,不属于本地子网,所以 H1 不能直接 ARP Web 服务器的 MAC,而是要把 IP 数据报交给默认网关 R。

H1 此时还不知道 R 内网接口 192.168.1.1 的 MAC 地址,所以还要发送一次 ARP 请求:

谁是 192.168.1.1?请告诉 192.168.1.2。

这个 ARP 请求同样是广播帧,目的 MAC 仍然是:

FF-FF-FF-FF-FF-FF

交换机会把它泛洪到除 4 号端口外的其他端口,所以 H2 又会收到一个相关帧。这是 H2 收到的第 2 个相关帧。

第五步,路由器 R 收到 ARP 请求后,向 H1 返回 ARP 响应:

源 MAC:00-11-22-33-44-aa
目的 MAC:00-11-22-33-44-cc

这个帧从 S 的 2 号端口进入,所以 S 学习到:

<00-11-22-33-44-aa, 2>

S 已经知道 H1 在 4 号端口,所以这个 ARP 响应只发给 H1,不会发给 H2。

第六步,H1 终于可以发送 HTTP 请求了。题干说 t1 时刻 S 第一次收到封装 HTTP 请求报文的以太网帧,这个帧从 H1 的 4 号端口进入,目的 MAC 是路由器 R 的 MAC:

源 MAC:00-11-22-33-44-cc
目的 MAC:00-11-22-33-44-aa

由于 S 已经知道 aa 在 2 号端口,所以该 HTTP 请求帧只会被转发给路由器 R,不会发给 H2。

因此 t1 时刻 S 的交换表中已经学到了 H1、本地域名服务器、路由器 R 三个 MAC 地址:

<00-11-22-33-44-cc, 4>
<00-11-22-33-44-bb, 1>
<00-11-22-33-44-aa, 2>

H2 的 MAC 地址是 00-11-22-33-44-dd,但 H2 只是收到了广播帧,没有主动发送帧。交换机不会通过“发出去的帧”学习,也不会通过“某台主机收到帧”学习,只会通过“收到帧的源 MAC 地址”学习。因此交换表中没有:

<00-11-22-33-44-dd, 3>

这道题最容易错的地方有三个。

第一,DNS 和 ARP 的角色不能混。DNS 解决的是:

域名 → IP 地址

ARP 解决的是:

IP 地址 → MAC 地址

所以访问 www.abc.com 时,先 DNS 得到 Web 服务器 IP;要真正发以太网帧时,再用 ARP 得到下一跳 MAC。

第二,访问远程 Web 服务器时,H1 不会去 ARP Web 服务器的 MAC。因为 Web 服务器在 Internet 上,不在本局域网中。H1 只需要知道默认网关 R 的 MAC 地址。

第三,交换机学习表项只看源 MAC,不看目的 MAC。H2 收到了 ARP 广播帧,但没有发帧,所以 S 学不到 H2 的 MAC 地址。

这类题以后可以按一句话快速做:

先 DNS 解析域名,再 ARP 找本地域名服务器;
DNS 得到服务器 IP 后,再 ARP 找默认网关;
交换机只按源 MAC 学习,广播帧会到 H2,单播帧只按表转发。

部分是图中官方的给给的回答,你在思考的时候中似乎少了不少部分内容,特别是关于csma CD协议,第二问还是不太理解,不够直观

你这个疑问很关键:官方答案第一问把“CSMA/CD 帧”写进封装链路里,容易让人误以为 CSMA/CD 也是像 UDP、IP 那样的一层“封装协议”。实际上在考研语境下要分两套说法理解。

严格说,数据链路层封装的是“以太网帧”或“以太网 V2 帧”;CSMA/CD 是传统共享式以太网的介质访问控制协议,不是一个像 IP、UDP 那样承载上层数据的网络层/传输层协议。官方答案写“DNS 报文 → UDP 数据报 → IP 数据报 → CSMA/CD 帧”,是沿用了早期教材中“传统以太网采用 CSMA/CD,因此数据链路层帧称为 CSMA/CD 帧”的表述。更规范的写法应是:

DNS 报文 → UDP 数据报 → IP 数据报 → 以太网 V2 帧

如果题目或答案明显按传统以太网教材表述,可以写:

DNS 报文 → UDP 数据报 → IP 数据报 → 以太网帧(传统以太网可称 CSMA/CD 帧)

这样最稳。因为现代交换机通常工作在全双工方式下,基本不再使用 CSMA/CD 进行冲突检测;但是 408 题目如果沿用教材术语,还是会把传统以太网的数据链路层和 CSMA/CD 联系起来。


这题第 1 问完整思路是:H1 在浏览器里输入 www.abc.com,HTTP 请求不能直接发出,因为 H1 还不知道 Web 服务器的 IP 地址。域名要先解析成 IP 地址,所以除了 HTTP,H1 还要运行 DNS 应用层协议。

DNS 是应用层协议,通常运行在 UDP 之上,所以逐层封装是:

DNS 报文
↓
UDP 数据报
↓
IP 数据报
↓
以太网 V2 帧

这里不要把 ARP 混进这条封装链。ARP 也会发生,但 ARP 的作用是“为了发以太网帧,先查询下一跳 IP 对应的 MAC 地址”。ARP 不是 DNS 报文的下层封装,DNS 报文不会被 ARP 封装。


第二问之所以不直观,是因为它同时考两个表:

H1 的 ARP 表:记录 IP 地址 → MAC 地址
S 的交换表:记录 MAC 地址 → 交换机端口

这两个表的学习规则完全不同。

H1 的 ARP 表是通过 ARP 请求/响应得到的。比如 H1 问“谁是 192.168.1.126”,本地域名服务器回答“我是 192.168.1.126,我的 MAC 是 bb”,于是 H1 记录 192.168.1.126 → bb

交换机 S 的交换表不是靠 ARP 内容学习,而是靠“收到的以太网帧的源 MAC 地址”学习。交换机从哪个端口收到某个源 MAC 发来的帧,就记住这个 MAC 在哪个端口。

也就是:

ARP 表看 ARP 报文内容。
交换表只看以太网帧的源 MAC 和进入端口。

这是第二问的核心。


先把图中的设备和端口整理一下:

H1:
IP = 192.168.1.2/25
MAC = 00-11-22-33-44-cc
连接 S 的 4 号端口

本地域名服务器:
IP = 192.168.1.126/25
MAC = 00-11-22-33-44-bb
连接 S 的 1 号端口

路由器 R 内网接口:
IP = 192.168.1.1/25
MAC = 00-11-22-33-44-aa
连接 S 的 2 号端口

H2:
IP = 192.168.1.3/25
MAC = 00-11-22-33-44-dd
连接 S 的 3 号端口

这里 /25 的子网范围是:

192.168.1.0 ~ 192.168.1.127

所以 H1、本地域名服务器、H2、路由器 R 的内网接口都在同一个局域网里。

但是 www.abc.com 对应的 Web 服务器在 Internet 上,不在本局域网中。因此 H1 的访问过程是:

先找本地域名服务器做 DNS 查询
得到 Web 服务器 IP 后
再把 HTTP 请求交给默认网关 R 转发

现在从 t0 开始一步一步看。

t0 时刻,题目说 H1 的 ARP 表为空,S 的交换表为空。

H1 想访问 www.abc.com,第一步要问本地域名服务器。H1 知道本地域名服务器的 IP 是 192.168.1.126,但是不知道它的 MAC 地址。因为 H1 的 ARP 表是空的,所以 H1 要先发 ARP 请求:

谁是 192.168.1.126?请告诉 192.168.1.2。

这个 ARP 请求封装成以太网帧时:

源 MAC = H1 的 MAC = 00-11-22-33-44-cc
目的 MAC = FF-FF-FF-FF-FF-FF

目的 MAC 是全 1,因为 ARP 请求是广播帧。

这个帧从 S 的 4 号端口进入。交换机 S 看到源 MAC 是 cc,进入端口是 4,于是学习到:

00-11-22-33-44-cc → 4

因为这个帧是广播帧,所以 S 会把它从除了 4 号端口以外的其他端口都转发出去,也就是发给本地域名服务器、R、H2。

所以 H2 会收到这个帧。


本地域名服务器收到 ARP 请求后,发现问的是自己的 IP 地址 192.168.1.126,于是给 H1 发 ARP 响应:

192.168.1.126 的 MAC 地址是 00-11-22-33-44-bb。

这个 ARP 响应是单播帧:

源 MAC = 本地域名服务器 MAC = 00-11-22-33-44-bb
目的 MAC = H1 MAC = 00-11-22-33-44-cc

这个帧从 S 的 1 号端口进入。S 看到源 MAC 是 bb,进入端口是 1,于是学习到:

00-11-22-33-44-bb → 1

同时,S 前面已经知道 cc 在 4 号端口,所以这个 ARP 响应只会从 4 号端口转发给 H1,不会发给 H2。

到这里,S 的交换表已经有:

cc → 4
bb → 1

H1 的 ARP 表也有了:

192.168.1.126 → 00-11-22-33-44-bb

接下来 H1 可以向本地域名服务器发送 DNS 查询了。这个 DNS 查询帧大致是:

源 MAC = H1 MAC = cc
目的 MAC = 本地域名服务器 MAC = bb

S 收到该帧时,会再次看到 cc 从 4 号端口进来,确认或刷新 cc → 4。因为 S 已经知道 bb 在 1 号端口,所以这个 DNS 查询帧只发给 1 号端口,不会广播,也不会发给 H2。

本地域名服务器返回 DNS 响应时:

源 MAC = bb
目的 MAC = cc

S 已经知道 cc 在 4 号端口,所以 DNS 响应也只发给 H1,不会发给 H2。

这一步完成后,H1 得到了 www.abc.com 对应的 Web 服务器 IP 地址。


然后 H1 准备发送 HTTP 请求。此时 H1 会判断:Web 服务器 IP 是否和自己在同一个子网?

题目说 Web 服务器在 Internet 上,所以不在本局域网。既然目的主机不在本地网络,H1 就不会去查询 Web 服务器的 MAC 地址,而是要把 IP 数据报交给默认网关,也就是路由器 R 的内网接口 192.168.1.1

但是 H1 的 ARP 表里还没有 R 的 MAC 地址,所以还要发第二次 ARP 请求:

谁是 192.168.1.1?请告诉 192.168.1.2。

这个 ARP 请求也是广播帧:

源 MAC = H1 MAC = 00-11-22-33-44-cc
目的 MAC = FF-FF-FF-FF-FF-FF

S 从 4 号端口收到这个帧,继续确认 cc → 4。由于是广播帧,S 会从 1、2、3 号端口都转发出去,所以 H2 会再次收到一个与本次 Web 访问相关的帧。

这就是第 3 问中 H2 至少收到两个帧的来源:两个 ARP 请求广播帧。


路由器 R 收到 ARP 请求后,向 H1 返回 ARP 响应:

192.168.1.1 的 MAC 地址是 00-11-22-33-44-aa。

这个 ARP 响应是单播帧:

源 MAC = R 的 MAC = 00-11-22-33-44-aa
目的 MAC = H1 的 MAC = 00-11-22-33-44-cc

该帧从 S 的 2 号端口进入。S 看到源 MAC 是 aa,进入端口是 2,于是学习到:

00-11-22-33-44-aa → 2

S 已经知道 cc 在 4 号端口,所以这个 ARP 响应只发给 H1,不发给 H2。

到这里,S 的交换表已经有:

cc → 4
bb → 1
aa → 2

H1 的 ARP 表里也有:

192.168.1.126 → bb
192.168.1.1 → aa

现在 H1 才能发送真正的 HTTP 请求。题目说 t1 时刻是“S 第一次收到封装 HTTP 请求报文的以太网帧”。这个 HTTP 请求帧是发往 Internet 的,所以以太网帧的目的 MAC 是默认网关 R 的 MAC,而不是 Web 服务器的 MAC。

这个 HTTP 请求帧大致是:

源 MAC = H1 MAC = 00-11-22-33-44-cc
目的 MAC = R 的 MAC = 00-11-22-33-44-aa

从 S 的 4 号端口进入。S 已经知道 aa 在 2 号端口,所以它只把这个帧转发到 2 号端口给路由器 R。

因此 t1 时刻 S 的交换表为:

MAC 地址                   端口
00-11-22-33-44-cc          4
00-11-22-33-44-bb          1
00-11-22-33-44-aa          2

没有 H2 的表项:

00-11-22-33-44-dd → 3

原因是 H2 虽然收到了广播帧,但 H2 没有主动发送帧。交换机不会因为“某个端口发出去过帧”就学习目的主机的 MAC,它只根据“进入交换机的帧的源 MAC”学习。

这句话很重要:

交换机学习源 MAC,不学习目的 MAC;学习进入端口,不学习出去端口。

第 2 问可以用一个表格看得更直观:

步骤发生的帧源 MAC目的 MAC进入 S 的端口S 学到什么是否到 H2
1H1 ARP 查询本地域名服务器ccFF-FF-FF-FF-FF-FF4cc → 4
2本地域名服务器 ARP 响应 H1bbcc1bb → 1不到
3H1 发 DNS 查询ccbb4刷新 cc → 4不到
4DNS 服务器返回 DNS 响应bbcc1刷新 bb → 1不到
5H1 ARP 查询默认网关 RccFF-FF-FF-FF-FF-FF4刷新 cc → 4
6R ARP 响应 H1aacc2aa → 2不到
7H1 发 HTTP 请求ccaa4刷新 cc → 4不到

所以第 3 问说 H2 至少收到几个帧,答案就是:

至少 2 个。

这 2 个都是 ARP 请求广播帧,它们的目的 MAC 地址都是:

FF-FF-FF-FF-FF-FF

再回到你提到的 CSMA/CD。官方答案第一问写“数据链路层使用 CSMA/CD 帧进行封装”,考试时要知道它想表达的是“封装成传统以太网 MAC 帧”。但从严格概念上说:

以太网帧:帧格式,负责数据链路层封装。
CSMA/CD:介质访问控制方法,负责共享介质上如何争用信道、检测冲突。

在本题拓扑里有交换机 S。交换机连接的以太网通常可以工作在全双工方式下,全双工链路不需要 CSMA/CD。因此官方也提示“写以太网 V2 帧更合适”。所以后续做题时可以这样处理:

如果题目问“逐层封装关系”,优先写:

DNS 报文 → UDP 数据报 → IP 数据报 → 以太网 V2 帧

如果答案或教材强调传统以太网,则补充:

传统以太网的数据链路层采用 CSMA/CD 协议。

不要把 CSMA/CD 理解成 DNS 的下一层协议。它不是网络层或传输层协议,而是数据链路层 MAC 子层的介质访问控制机制。


这类题以后可以按固定套路做:

先判断有没有域名。有域名,先 DNS;DNS 服务器在本地网段,先 ARP DNS 服务器。

再判断目标服务器是否在本地网段。不在本地网段,HTTP 请求交给默认网关;不知道网关 MAC,就 ARP 网关。

最后更新交换表时只看一条规则:

交换机从哪个端口收到帧,就把该帧的源 MAC 记到哪个端口。

H2 是否收到帧,只看该帧是不是广播帧,或者交换机未知目的 MAC 时是否泛洪。本题中 H2 至少收到的就是两次 ARP 广播。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇