首页 >> 技术文档 >> 独立服务器

ICMP,ping

来源:数脉科技 编辑:数脉科技编辑部 发布时间:2020-11-10 01:22

ICMP 协议介绍

IP 协议并不是一个可靠的协议,它不保证数据被送达,那么保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是 ICMP(网络控制报文)协议。

当传送 IP 数据包发生错误,比如主机不可达,路由不可达等等,ICMP 协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在 IP 层以上的协议是可能做到安全的原因。

ICMP即互联网控制消息协议(Internal Control Message Protocol),与IP协议一样同属TCP/IP模型中的网络层,并且ICMP数据包是包裹在IP数据包中的。
他的作用是报告一些网络传输过程中的错误与做一些同步工作。
ICMP数据包有许多类型。每一个数据包只有前4个字节是相同域的,剩余的字段有不同的数据包类型的不同而不同。ICMP数据包的格式如下:

  • 类型字段:指明该数据包属于什么类型(大分类),长度1个字节。
  • 代码字段:指明数据包属于大类里面的哪个小类,长度1个字节。类型字段与代码字段共同决定ICMP数据包类型,以及后续字段含义。
  • 校验和 : 指明该数据包的校验和,长度2个字节。该校验和覆盖整个ICMP数据包。

常见的ICMP数据包:

  • ICMP端口不可达差错
  • ICMP地址请求与应答。

其中第1种为ICMP差错数据包;第2种是ICMP查询数据包。

ping 命令

示例:

ping ms.com
Pinging ms.com [10.195.48.99] with 32 bytes of data:
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Ping statistics for 10.195.48.99:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 251ms, Maximum = 251ms, Average = 251ms

TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。
Ping命令只使用众多ICMP报文中的两种:"请求回送'(ICMP_ECHO)和"请求回应'(ICMP_ECHOREPLY)。
ping命令的工作原理是:用类型码为8(请求回显)的 ICMP 发请求,收到请求的主机则用类型码为0(回显应答)的 ICMP 回应。ping 程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。

ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。

ping还给我们一个看主机到目的主机的路由的机会。这是因为 ICMP 的 ping 请求数据报在每经过一个路由器的时候,路由器都会把 自己的 IP 地址放到该数据报中。而目的主机则会把这个 IP 地址列表复制到回应 ICMP 数据包中发回给主机。

Ping工作过程:
假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内。
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议,IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址),一并交给数据链路层。

后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
其中映射表由ARP实现。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(OSI的第三层)地址解析为数据连接层(OSI的第二层)的MAC地址。

主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。