之前实验室办网的时候用过这个ping命令,现在转载总结一下,本文主要来自小林coding微信公众号
链接:
https://mp.weixin.qq.com/s/55bbQX2-SUNe6PEI9My5fA
ICMP协议
简介
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。
网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。
ICMP 主要的功能
确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
在 IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。
ICMP 报文
ICMP 报文是封装在 IP 包里面,它工作在网络层,是 IP 协议的助手。
ICMP报文:
ICMP报文类型
ICMP 包头的类型字段,大致可以分为两大类:
一类是用于诊断的查询消息,也就是「查询报文类型」
另一类是通知出错原因的错误消息,也就是「差错报文类型」
查询报文类型
回送消息 —— 类型0和8
回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。
回送应答:ICMP Echo Reply Message 向对端主机发送
回送请求:ICMP Echo Request Message 接收对端主机
相比原生的 ICMP,这里多了两个字段:
标识符:用以区分是哪个应用程序发 ICMP 包,比如用进程PID作为标识符;
序号:序列号从0开始,每发送一次新的回送请求就会加1, 可以用来确认网络包是否有丢失。
在选项数据中,ping还会存放发送请求的时间值,来计算往返时间,说明路程的长短。
差错报文类型
目标不可达消息 —— 类型 为3
原点抑制消息 —— 类型4
重定向消息 —— 类型5
超时消息 —— 类型11
目标不可达消息(Destination Unreachable Message)
IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因,原因记录在 ICMP 包头的代码字段。
由此,根据 ICMP 不可达的具体消息,发送端主机也就可以了解此次发送不可达的具体原因。
6 种常见的目标不可达类型
网络不可达代码为0
IP 地址是分为网络号和主机号的,所以当路由器中的路由器表匹配不到接收方 IP 的网络号,就通过 ICMP 协议以网络不可达的原因告知主机。
自从不再有网络分类以后,网络不可达也渐渐不再使用了。
主机不可达代码为1
当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过 ICMP 协议以主机不可达的原因告知主机。
协议不可达代码为2
当主机使用 TCP 协议访问对端主机时,能找到对端的主机了,可是对端主机的防火墙已经禁止 TCP 协议访问,那么会通过 ICMP 协议以协议不可达的原因告知主机。
端口不可达代码为3
当主机访问对端主机 8080 端口时,这次能找到对端主机了,防火墙也没有限制,可是发现对端主机没有进程监听 8080 端口,那么会通过 ICMP 协议以端口不可达的原因告知主机。
需要进行分片但设置了不分片位代码为4
发送端主机发送 IP 数据报时,将 IP 首部的分片禁止标志位设置为
1
。根据这个标志位,途中的路由器遇到超过 MTU 大小的数据包时,不会进行分片,而是直接抛弃。随后,通过一个 ICMP 的不可达消息类型,代码为 4 的报文,告知发送端主机。
原点抑制消息(ICMP Source Quench Message)
在使用低速广域线路的情况下,连接 WAN 的路由器可能会遇到网络拥堵的问题。
ICMP 原点抑制消息的目的就是为了缓和这种拥堵情况。
当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息。
收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大 IP 包的传输间隔,减少网络拥堵的情况。
然而,由于这种 ICMP 可能会引起不公平的网络通信,一般不被使用。
重定向消息(ICMP Redirect Message)
如果路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机。
在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息告知发送端,让它下次发给另外一个路由器。
超时消息(ICMP Time Exceeded Message)
IP 包中有一个字段叫做TTL(Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。
此时,IP 路由器将会发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。
设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发。
ping命令使用
调出cmd
输入ping /? 会显示出ping命令的帮助说明
-t 表示不间断向目标地址发送数据包,直到我们强迫其停止。若要终止发送数据包,按下Ctrl+C组合键