1. 原因
为了使用指定的源IP或者源端口进行ping操作。比如一个服务器有2个网卡,一台交换机有多个网口都与对端设备互通,如果使用简单的ping ip形式的命令得到ping通的结果,只能证明两者之间可以ping通,那究竟是使用了哪个接口去ping另一台设备?
2. 发送Ping报文的源IP地址是怎样选择的
- Ping测试时如果带源IP,则指定的IP地址就是发送Ping报文的源IP地址。
- Ping测试时如果没有带源IP,则通过查找路由表,找到目的IP地址对应的出接口,采用出接口的IP地址作为Ping报文发送的源IP地址。
- 如果目的IP地址存在等价路由,则根据目的IP、报文协议号、ICMP type和ICMP code值进行HASH选路,选择对应出接口的IP地址作为Ping报文发送的源IP地址。
3. 不同设备带源ping
3.1. 网络设备
格式:ping -a <源地址> <目的地址>
<SwitchA> ping -a 192.168.2.20 -c 7 192.168.2.21
PING 192.168.2.21: 2048 data bytes, press CTRL_C to break
Reply from 192.168.2.21: bytes=2048 Sequence=1 ttl=255 time=24 ms
Reply from 192.168.2.21: bytes=2048 Sequence=2 ttl=255 time=6 ms
Reply from 192.168.2.21: bytes=2048 Sequence=3 ttl=255 time=13 ms
Reply from 192.168.2.21: bytes=2048 Sequence=4 ttl=255 time=6 ms
Reply from 192.168.2.21: bytes=2048 Sequence=5 ttl=255 time=12 ms
Reply from 192.168.2.21: bytes=2048 Sequence=6 ttl=255 time=6 ms
Reply from 192.168.2.21: bytes=2048 Sequence=7 ttl=255 time=13 ms
--- 192.168.2.21 ping statistics ---
7 packet(s) transmitted
7 packet(s) received
0.00% packet loss
3.2. Linux
格式:ping -I <源地址> <目的地址>
如果计算机上有多个接口,则可以使用以下-I选项指定源接口或源IP(对虚拟网络同样适用)
> ping -I eth0 192.168.1.10
PING 1921.168.1.10 (1921.168.1.10) from 192.168.0.3 eth0: 56(84) bytes of data.
64 bytes from 1921.168.1.10: icmp_seq=2 ttl=109 time=201 ms
64 bytes from 1921.168.1.10: icmp_seq=3 ttl=109 time=201 ms
64 bytes from 1921.168.1.10: icmp_seq=4 ttl=109 time=200 ms
...
3.3. Windows
ping -S(大写) <源地址> <目的地址>
ping -S 192.168.1.215 192.168.1.1
正在 Ping 192.168.1.1 从 192.168.1.215 具有 32 字节的数据:
来自 192.168.1.1 的回复: 字节=32 时间=2ms TTL=59
来自 192.168.1.1 的回复: 字节=32 时间=2ms TTL=59
来自 192.168.1.1 的回复: 字节=32 时间=2ms TTL=59
来自 192.168.1.1 的回复: 字节=32 时间=2ms TTL=59
192.168.1.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 2ms,最长 = 2ms,平均 = 2ms