ICMP协议详解

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICMP协议详解相关的知识,希望对你有一定的参考价值。

ICMP协议

        一.概念

        ICMP协议是一个网络层协议。和IP协议处于同一层,但是ICMP协议底层用的是IP协议。

        一个搭建好的网络,往往需要先进行简单的测试,来验证网络是否通畅。单单使用IP协议并不提供可靠性传输。似乎用IP协议如果丢包,并不能通知传输层是否丢包以及丢包原因。

        ICMP协议,如果在网络中丢包,会返回一个丢包原因给传输层。

        二.ICMP作用

  • 确认IP包是否成功达到目标IP。
  • 通知在发送过程中的IP包被丢弃的原因。

        注意:

  • ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍把它归结于网络层协议。
  • ICMP只能搭配IPv4使用。如果是IPv6的情况下,需要使用ICMPv6。

        三.ICMP报文格式

        由于ICMP底层用的是IP协议,所以ICMP报文是IP协议的有效载荷。

        所以IP报头的协议字段可能代表的是ICMP/TCP/UDP,当协议字段为1时,代表ICMP。

        由下可知ICMP报头一共8字节。

  • 类型:1字节,说明该报文属于什么类型。
  • 代码:1字节,说明ICMP报文的代码。
  • 检验和:2字节,检验ICMP报文是否有错误。

ICMP类型分两类:

  1. 通知出错原因
  2. 用于诊断查询

类型分类:

         四.基于ICMP协议的命令

        4.1 ping命令

 作用:验证网络连通性,统计响应时间和IP数据包的生存时间TTL。

 注意:ping的时一个域名,而不是url网址,域名可以通过DNS解析成IP地址。

 ping命令执行细节

  • ping命令会发送一个ICMP Echo Request给对端
  • 对端接收后,返回一个ICMP Echo Reply
  • 注意是在主机A网络层发出ICMP Echo Request,再主机B接收到网络层,再发出ICMP Echo Reply

 问题:ping是否有端口号?

没有,ping命令基于ICMP,再网络层,端口号是传输层的内容。ICMP根本就不关注端口号。

       4.2 traceroute命令

        基于ICMP协议实现,能够打印出可执行程序主机到目标主机之间尽力了多少路由器。

说明:

  • 记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关。
  • 我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间
  • 有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

以上是关于ICMP协议详解的主要内容,如果未能解决你的问题,请参考以下文章

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解 卷1:协议—ICMP:Internet控制报文协议

TCP/IP详解,卷1:协议--第6章 ICMP:Internet控制报文协议