Skip to content

2012年 408 计算机网络 第 33 题

计算机网络2012年选择题2分

题目

在 TCP/IP 体系结构中,直接为 ICMP 提供服务的协议是( )。

错因

A

PPP 是链路层协议(如拨号上网、PPPoE),位于 IP 下方。ICMP 报文是先封装到 IP 中、再交链路层(PPP 或以太网)传输——PPP 服务的是 IP,不是直接服务 ICMP。错的根源:把"间接经过"误以为是"直接服务"。

C

UDP 是传输层协议,与 ICMP 是平级关系——UDP 也封装在 IP 里、ICMP 也封装在 IP 里,两者并列、互不调用。把 ICMP 当作"上层应用"再下到 UDP 是认知偏差。

D

TCP 同 C 的错——TCP 与 ICMP 都是 IP 上层的并列协议,TCP 不为 ICMP 服务。错的根源:以为"协议都要走传输层",但 ICMP 是个特例,跳过传输层直接跑在 IP 上。

总解析

第一步:明确 ICMP 在协议栈中的位置

ICMP(Internet Control Message Protocol,因特网控制报文协议)是用于网络诊断、错误报告、路径探测的协议。它是网络层的辅助协议,与 IP 平级又紧密协作:

应用层    HTTP, DNS, FTP ...
传输层    TCP, UDP
网络层    IP   ←─── ICMP 在这里,直接封装在 IP 数据报里(协议号 1)
链路层    PPP, 以太网
物理层    ...

第二步:ICMP 报文怎么被传输

ICMP 报文的封装路径:

[ICMP 报文]
    ↓ IP 头里 protocol=1 标识 ICMP
[IP 头 | ICMP 报文]
    ↓ 链路层封装(PPP/以太网)
[帧头 | IP 包 | 帧尾]

ICMP 直接调用 IP 的服务——不经过 TCP/UDP,跳过传输层。

第三步:常见跳过传输层的协议(仅作对照)

协议协议号(IP 头里)直接服务者
ICMP1IP
IGMP2IP
OSPF89IP
TCP6IP(TCP 与 ICMP 平级)
UDP17IP(UDP 与 ICMP 平级)

ICMP、IGMP、OSPF 这三种"直接用 IP"的协议是网络层内部的辅助协议,所以它们的下层就是 IP 本身。

最终答案是 B(IP)

编者注(生僻术语):ping 和 traceroute 命令都用 ICMP——

  • ping 发 ICMP Echo Request(类型 8),等 Echo Reply(类型 0)
  • traceroute 发 TTL 递增的 ICMP Echo(或 UDP),由中间路由器返回 ICMP Time Exceeded 报告路径

这两个命令是 ICMP 最常见的应用场景。注意 ICMP 不能单独运行——它必须依赖 IP 来"投递"。这与 ARP 不同(ARP 直接封装在以太网帧中、不走 IP)。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数