当前位置:文档之家› ICMP协议

ICMP协议

ICMP协议

背景知识:

●在以太网中,数据帧大小最大为1518字节,最小为64字节(由以太网

CSMA/CD决定)

以太网中数据帧的封装格式:

6 6 2 — 4

●IP数据报格式:

其中,较常用“协议”的取值有:

ICMP数据包格式

ICMP协议基于IP协议,ICMP数据包封装在IP数据包内。

ICMP封装格式:

20字节

ICMP数据包的结构:

ICMP头部长度为8bytes。

ICMP查询报文ICMP两种报文形式

ICMP差错报文

检测连通性

ICMP报文作用

提示错误信息

常见ICMP类型、代码值及应用场景:

下面是几种常见的ICMP报文:

1).响应请求

我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

Ping程序的参数如下:

C:\Users\qich>ping

用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL]

[-r count] [-s count]

[-R] [-S srcaddr] target_name

选项:

-t Ping 指定的主机,直到停止。

若要查看统计信息并继续操作- 请键入Control-Break;

若要停止- 请键入Control-C。

-a 将地址解析成主机名。 -n count 要发送的回显请求数。 -l size 发送缓冲区大小。

-f 在数据包中设置“不分段”标志(仅适用于 IPv4)。 -i TTL 生存时间。

-r count 记录计数跃点的路由(仅适用于 IPv4)。 -s count 计数跃点的时间戳(仅适用于 IPv4)。 -S srcaddr 要使用的源地址。

使用Ping 程序时,如果指定了参数-f (不分片),则参数-l 后,可以指定的最大发送缓冲区大小为1472。

1500(IP MTU)-20(IP 头部大小)-8(ICMP 头部大小)=1472

2) 需要进行分片但设置了DF 标记位

在封装UDP 的IP 数据包中,一般支持分片。

以太网中IP 数据包的MTU 为1500,这与初期设备的接收缓存小有关。当发送数据包的大小大于MTU 时,需要对该数据包进行分片。

发生ICMP 不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP 首部又设置了不分片(DF )的标志比特。如果某个程序需要判断到达目的端的路途中最小MTU 是多少—称作路径MTU 发现机制(PMTUD ),那么这个差错就可以被该程序使用。

这种情况下的ICMP 不可达差错报文格式如下图所示。在第2个32bit 字中,16~31bit 可以提供下一跳的MTU 。

ICMP 报文中的IP 首部和原始IP 数据报中数据的前8字节,也成为伪首部

类型(3)

代码(4)

检验和

8

字节 下一跳网络的MTU

未用(必须为0)

IP 首部(包括选项)+原始IP 数据报中数据的前8字节 (

信息。

Juniper NetScreen防火墙中根据五元组(源IP、目的IP、协议、源端口、目的端口)匹配时,将根据伪首部信息进行匹配,关联现有会话,然后放行。

相关case处理结果为:

数据包举例:

3)ICMP超时差错报文

4)ICMP端口不可达差错报文

下面各种情况都不会产生ICMP差错报文:

1)ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)

2)目的地址是广播地址或多播地址的IP数据报

3)作为链路层广播的数据报

4)不是IP分片的第一片

5)源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。

附:ICMP类型、代码取值表

相关主题