5-6 ICMP
5-6-1 ICMP
ICMP基础
ICMP(lnternet Control MessageProtocol,Internet控制报文协议),封装在IP报文中,协议号为1,用来传递差错、控制、查询等信息典型应用ping/tracert依赖ICMP报文。比如,防火墙上配置过滤ping报文,就需要在防火墙上配置过滤IP协议号为1的报文
ICMP报文封装在IP数据报中(IP报头协议字段值为1),包含以下核心字段:
- 类型(Type):1字节,标识报文类型(如0为回显应答,3为目标不可达)。
- 代码(Code):1字节,细化类型含义(例如Type 3中Code 0表示网络不可达)。
- 校验和(Checksum):2字节,用于验证报文完整性。
- 数据部分:可变长度,可能包含原始IP报头及数据前8字节(用于错误追踪)
ICMP有多种报文,主要通过类型和代码来区分。需要记忆下图中标记绿色、黄色的条目

ICMP应用:ping
测试网络中的一台主机是否在线,通常使用ping命令。ping命令将向目标主机发送一个ICMP Echo Request报文(类型为8 代码为0),若目标主机在线且没有禁ping,则会回复一个ICMP Echo Reply报文(类型为0 代码为0)。Echo Request和Echo Reply分别用来查询和响应某些信息,进行差错检测

ICMP应用:tracert
tracert用来测试起点到目标节点,中间经过了哪些节点。通过逐步递增TTL值触发路由器的ICMP超时报文(Type 11),逐跳追踪数据包路径。
第1个报文:主机A发送
ICMP Echo Request报文(类型为8 代码为0),目的地址为主机B,TTL值设置为1,则该报文到达RTA时超时,RTA返回ICMP超时报文(类型为11 代码为0),主机A收到该ICMP超时报文,记录第1跳的IP地址;第2个报文:主机A发送
ICMP Echo Request报文(类型为8 代码为0),目的地址为主机B,TTL值设置为2,则该报文到达RTB时超时,RTB返回ICMP超时报文(类型为11 代码为0),主机A收到该ICMP超时报文,记录第2跳的IP地址;以此类推,从而跟踪到从源到目的的中间路径上的节点

例题
例题1


解析:注意区分两种TTL值为0的差错报文
- 专输期间生存时间为0:tracert过程中,TTL减为0时向源端回复该报文
- 在数据包组装期间生存时间为0:分片丢失,不能完成IP数据包重组。
例题2


解析:
- 给出的图显示已经将域名解析为IP地址202.117.112.36,故DNS正常,则B选项错误
- DNS是应用层协议,所以也不可能是TCP/IP协议问题,则A选项错误。
- 如果网关地址错误,DNS也不能正常解析,则C选项错误
- 目标网络不可达,可能是目标主机的ACL拦截,选择D。
例题3

解析:
当路由器或目的主去弃该数据报,并向源站发送类型12,代码0的ICMP报文,意为“坏的IP首部”。
实际网络中几乎不用纠错码,因为其开销较大;一般只是检错并通知重发
例题4


解析:
上表列出了不同操作系统的TTL值,常见ICMP报文TTL值初始值可能有如下几种:
255:
128:
64:FreeBSD默认TTL是64。FreeBSD是FreeBSD项目的发展成果[3],是开放源代码的类Unix操作系统,基于BSD Unix的源代码派生发展而来
注意:通过TTL值判断操作系统类型,现在已经不准,一是因为操作系统的TTL值可以手动更改,二是因为同一操作系统不同版本都可能TTL值不同本题目主要要求掌握第2空,解析如下
1 | 来自180.101.49.12的回复:字节=32 时间=4ms TTL=50 |
通过trancert可知,世界上访问任何主机,一般不超过30跳
假设180.101.49.12上ICMP报文的初始值为255,到达源端是TTL为50,说明经过了205跳,显然180.101.49.12上ICMP报文的初始值不是255;同理,也不是128。
因此64是合理的,说明经过14跳到达源端
例题5

例题6

解析:TTL超时报文,类型为11,代码为0
例题7

解析:exceed,超过、超出