ICMP

ICMP

英特网控制消息协议

在网络设备间传递各种差错和控制信息

甲:你听到了吗?(ICMP Echo Request)

乙:听到了!(ICMP Echo Reply)

ICMP中最重要的是类型(type)与代码(code)

类型 编码 描述
0 0 Echo Reply
3 0 网络不可达
3 1 主机不可达
3 2 协议不可达
3 3 端口不可达
5 0 重定向
8 0 Echo Request

ping的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
[-4] [-6] target_name

选项:
-t Ping 指定的主机,直到停止。
若要查看统计信息并继续操作,请键入 Ctrl+Break;
若要停止,请键入 Ctrl+C。
-a 将地址解析为主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已被弃用,
对 IP 标头中的服务类型字段没有任何
影响)。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。
-k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。
根据 RFC 5095,已弃用此路由标头。
如果使用此标头,某些系统可能丢弃
回显请求。
-S srcaddr 要使用的源地址。
-c compartment 路由隔离舱标识符。
-p Ping Hyper-V 网络虚拟化提供程序地址。
-4 强制使用 IPv4。
-6 强制使用 IPv6。

PING的错误类型

正常状态(ping路由器上的网关)

发送数据并受到回复

1
2
3
4
5
6
7
8
9
10
11
12
[C:\~]$ ping 192.168.123.1

正在 Ping 192.168.123.1 具有 32 字节的数据:
来自 192.168.123.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.123.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.123.1 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.123.1 的回复: 字节=32 时间<1ms TTL=64

192.168.123.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

不可达/无法访问目标主机(ping一个不存在的地址)

网关没有路由、找不到这个地址的mac地址,发不过去数据

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# ping 192.168.123.55
PING 192.168.123.55 (192.168.123.55) 56(84) bytes of data.
From 192.168.123.100 icmp_seq=1 Destination Host Unreachable
From 192.168.123.100 icmp_seq=2 Destination Host Unreachable
From 192.168.123.100 icmp_seq=3 Destination Host Unreachable
From 192.168.123.100 icmp_seq=4 Destination Host Unreachable
^C
--- 192.168.123.55 ping statistics ---
6 packets transmitted, 0 received, +4 errors, 100% packet loss, time 4999ms
pipe 4

超时

这里我是ping我的旁路由(禁ping)

可以发数据过去,对方不回复(mac表中有对方地址)

一般为对方不在线或者屏蔽

1
2
3
4
5
6
7
8
9
10
[C:\~]$ ping 192.168.1.1

正在 Ping 192.168.1.1 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

192.168.1.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

这里我发现一个其他的现象,我在使用linux来ping没有禁ping时的旁路由时

首先得到了一个1.39ms的回复

接着我的网关所在的路由告知了我一个新的下一跳

接下来的延迟都在0.3ms左右了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.39 ms
From 192.168.123.1 icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)
From 192.168.123.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.402 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.371 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.319 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.303 ms
64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=0.346 ms
^C
--- 192.168.1.1 ping statistics ---
6 packets transmitted, 6 received, +1 errors, 0% packet loss, time 5001ms
rtt min/avg/max/mdev = 0.303/0.523/1.399/0.393 ms