介绍
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)
ICMP是互联网的标准协议
ICMP允许主机或路由器报告差错情况和提供有关异常的报告。
但ICMP不是搞成协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层协议。
ICMP报文作为IP层数据报的数据,加上数据包的首部,组成IP数据报发出去。
ICMP报文作为IP层数据报的数,加上数据报的首部,组成IP数据报发送出去。ICMP报文格式如下

1 ICMP报文的种类
ICMP报文的前4个字节是统一的格式,共有三个字段:
类型、代码和校验和
接着的4个字节的内容与ICMP类型有关
1.1 ICMP差错报告报文
1、终点不可达
2、时间超过
3、参数问题
4、改变路由(重定向)(Redirect)

不同发送ICMP差错报告报文的几种情况
1、对ICMP差错报告报文不在发送ICMP差错报告报文
2、对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
3、对具有多播地址的数据报都不发送ICMP差错报告报文。
4、对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
1.2 ICMP询问报文
有两种:
1、回送请求和回答报文
2、时间戳请求和回答报文
下面集中的ICMP报文不在使用
1、信息请求与回答报文
2、掩码地址请求和回答报文
3、路由器询问和通告报文
4、源点抑制报文
2 ICMP应用举例
2.1 ping
PING (Packet InterNet Group)
1、ping用来测试两个主机之间的连通性
2、ping使用了ICMP回送请求与回送回答报文
3、ping是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCP会UDP
ping测试主机的性

2.2 Tracetoute
1、在Windows操作系统各种这个命令是tracert
2、用来跟踪一个分组从源点到终点的路径
3、它利用IP数据报中的TTL字段和ICMP时间超过差错报告报文实现对源点到终点路径的跟踪。
<h2><a id="_0"></a>介绍</h2>
<p>为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了<strong>网际控制报文协议 ICMP</strong>(Internet Control Message Protocol)</p>
<p>ICMP是互联网的标准协议</p>
<p>ICMP允许主机或路由器报告差错情况和提供有关异常的报告。</p>
<p>但ICMP不是搞成协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层协议。</p>
<p>ICMP报文作为IP层数据报的数据,加上数据包的首部,组成IP数据报发出去。</p>
<p>ICMP报文作为IP层数据报的数,加上数据报的首部,组成IP数据报发送出去。ICMP报文格式如下</p>
<p><img src="https://static.couragesteak.com/article/8deba4b4e812c83cf190de26232efc30.png" alt="ICMP数据报" /></p>
<h2><a id="1_ICMP_16"></a>1 ICMP报文的种类</h2>
<p>ICMP报文的前4个字节是统一的格式,共有三个字段:</p>
<p>类型、代码和校验和</p>
<p>接着的4个字节的内容与ICMP类型有关</p>
<h3><a id="11_ICMP_24"></a>1.1 ICMP差错报告报文</h3>
<p>1、终点不可达</p>
<p>2、时间超过</p>
<p>3、参数问题</p>
<p>4、改变路由(重定向)(Redirect)</p>
<p><img src="https://static.couragesteak.com/article/fb425cf1454d0b57ccb597df6fa4ffd8.png" alt="ICMP差错报告报文" /></p>
<p><strong>不同发送ICMP差错报告报文的几种情况</strong></p>
<p>1、对ICMP差错报告报文不在发送ICMP差错报告报文</p>
<p>2、对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文</p>
<p>3、对具有多播地址的数据报都不发送ICMP差错报告报文。</p>
<p>4、对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文</p>
<h3><a id="12_ICMP_48"></a>1.2 ICMP询问报文</h3>
<p>有两种:</p>
<p>1、回送请求和回答报文</p>
<p>2、时间戳请求和回答报文</p>
<p><strong>下面集中的ICMP报文不在使用</strong></p>
<p>1、信息请求与回答报文</p>
<p>2、掩码地址请求和回答报文</p>
<p>3、路由器询问和通告报文</p>
<p>4、源点抑制报文</p>
<h2><a id="2_ICMP_70"></a>2 ICMP应用举例</h2>
<h3><a id="21_ping_72"></a>2.1 ping</h3>
<p><code>PING (Packet InterNet Group)</code></p>
<p>1、ping用来测试两个主机之间的连通性</p>
<p>2、ping使用了ICMP回送请求与回送回答报文</p>
<p>3、ping是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCP会UDP</p>
<p><strong>ping测试主机的性</strong></p>
<p><img src="https://static.couragesteak.com/article/18098ecfb35f4ea171452aae61ac018c.png" alt="ping测试主机的性" /></p>
<h3><a id="22_Tracetoute_88"></a>2.2 Tracetoute</h3>
<p>1、在Windows操作系统各种这个命令是<code>tracert</code></p>
<p>2、用来跟踪一个分组从源点到终点的路径</p>
<p>3、它利用IP数据报中的TTL字段和ICMP时间超过差错报告报文实现对源点到终点路径的跟踪。</p>
留言