【TCP/IP】ICMP协议

ICMP协议

互联网中的网络报文经常会由于网络不可达,MTU限制,端口不可用以及服务器不可服务等问题而导致丢失。为了能够将网络报文传输过程中发生的一些错误及时的反馈该用户或者用户进程,ICMP(网络控制报文协议)应运而生。

【TCP/IP】ICMP协议

1、主要用途

ICMP主要用户差错通知和信息查询。

【TCP/IP】ICMP协议
[1]给送信者的错误通知;[2]送信者的信息查询。

[1]是到IP 数据包被对方的计算机处理的过程中,发生了什么错误时被使用。不仅传送发生了错误这个事实,也传送错误原因等消息。

[2]的信息询问是在送信方的计算机向对方计算机询问信息时被使用。被询问内容的种类非常丰富,他们有目标IP 地址的机器是否存在这种基本确认,调查自己网络的子网掩码,取得对方机器的时间信息等。

2、ICMP的报文格式

ICMP协议是工作在IP层的,因此ICMP报文由IP首部+ICMP数据构成。ICMP报文的主要内容在于IP首部的源宿IP地址和ICMP部分的类型字段,代码字段。

【TCP/IP】ICMP协议

3、ICMP应用

3.1 ping

ping主要是检查和目的主机是否连通或者存在可用的路由。

在ping时,除了重要的类型和代码字段(类型是8,代码是0)外,会在选项数据部分增加标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报文时,在这两个字段里填入任意的值。对于标识符,应用程序执行期间送出的所有报文里填入相同的值。对于序号,每送出一个报文数值就增加1。而且,回送请求的选项数据部分用来装任意数据。这个任意数据用来调整ping 的交流数据包的大小。目的主机服务器回答这一请求的时候,向送信方发送回送请求(类型是0,代码是0)。这个ICMP 回送回答报文在IP 层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送回答的0。同时会把原来发送主机发送的ICMP报文中的标识符和序号字段一起返回给发送主机。

【TCP/IP】ICMP协议

3.2 traceroute

traceroute命令主要用来获取发送主机到目的主机之间的路由信息。最初发送主机将IP 首部的TTL(生存时间)字段设为1 这一点。
路由器每转送一次数据包就将TTL 的值减1。当TTL 变为0 的时候,路由器按规定将丢弃这个数据包。路由器丢弃数据包的同时,用ICMP 报文来通知错误。这时使用的ICMP 报文是,类型为11,代码为0 的ICMP 超时报文。计算机接到针对第一个数据包的ICMP 超时报文后,接下来将TTL 加1(TTL=2)并同样地送出。这次通过第一个路由器,TTL 变为1,到达第二个路由器。但是第二个路由器象前面一样,由于TTL变为0,将不能转发该包。因此,同第一个路由器一样,将该包丢弃,并返回ICMP 超时报文。以后,收到错误的发送方计算机将TTL 加1,重复同样的工作。

【TCP/IP】ICMP协议