ICMP协议
Internet控制消息协议ICMP(Internet Control Message Protocol),用来在网络设备间传递各种差错和控制消息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。
ICMP通用报文格式
- 8位的类型字段(Type);
- 8位的代码字段(Code);
- 16位的校验码(Checksum)。
- 还有32位是可变参数。在ICMP重定向(Redirect)消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。在Echo请求消息中,这个字段包含标识符和序列号,源端根据这两个参数将受到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端向目的端发送了多个Echo请求消息时,需要根据标识符和序列号将Echo请求和回复消息进行一一对应。
前4个字节是通用的,但其余部分在不同的报文中不同,主要分为查询报文、差错报文。
查询报文:主动发起请求,并获得主动应答,称为ICMP Echo Request。同理主动请求回复,称为ICMP Echo Reply。查询报文多了2个字段,分别是标识符、序列号。
差错报文:由异常情况发起,主要包括终点不可达、源站不可达、时间超时、路由器重定向等。
以下各种情况不会导致ICMP差错报文:
- ICMP差错报文;
- 目的地址是广播地址或多播地址的IP数据报;
- 作为链路层广播的数据报;
- 不是IP分片的第一片;
- 源地址不是单个主机的数据报,也就是,源地址不能为零地址、环回地址、广播地址或多播地址;
这些规则是为了防止ICMP差错报文响应所带来的广播风暴。
比较重要的消息类型:
- Echo请求/应答:用以测试连通性(Ping);
- 超时:用以报告过期的数据报(TTL=0);
- 重定向:用以告知主机有更合适的路由(网关):
- 目标消息不可达:用以告知主机无法将流量传送到特定的目的地,某个路由无法传送到目的地。
Ping报文格式
Ping使用的是ICMP的请求回显/回显应答类型的报文。
- 16位的标识符字段(Identifier),通常设置为Ping进程的进程ID;
- 16位的序列号字段(Sequence number),每个发出去的分组递增序列号。
实验环境
在eNSP上搭建模拟环境,交换机不用配置。
PC1的ip地址是192.168.1.1子网掩码255.255.255.0,
PC2的ip地址是192.168.1.2子网掩码255.255.255.0,
PC1 ping PC2,即可抓取到Ping包。
抓包分析
ping:
tracert的区别在于TTL设置为1: