一、准备
1.1 准备2台机器设置为不同的网段,并用一根网线连接起来。(这里使用两台linux系统的arm开发板)
设置其中一台为的ip为1.1.1.1,子网掩码为 255.255.255.0,在命令行输入命令:
ifconfig eth0 1.1.1.1 netmask 255.255.255.0
设置另一台机器的ip为 2.2.2.2,子网掩码为 255.255.255.0
ifconfig eth0 2.2.2.2 netmask 255.255.255.0
1.2 了解 ping命令 的基本原理
ping命令是基于ICMP协议且用于检测主机到主机之间是否可通信的命令。
ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。
ping过程:源主机发生ICMP包到目的主机,目的主机收到后发送ICMP应答包给源主机,源主机在一定时间内收到后则认为目的主机可达。
二、同网段的2台PC直连,可以ping通的原因
假设有一台机器的ip为 1.1.1.1,子网掩码为 255.255.255.0,另一台机器的ip为 1.1.1.2,子网掩码为 255.255.255.0;那么这两台机器为什么能够ping得通呢?
原因:当我们设置ip地址时,系统会默认为我们添加一个 “同网段的路由信息” 到路由表。
所以,ping同网段的ip时,系统就能在路由表找到路由信息,然后发送ICMP包出去;同样,另一台也能通过默认的路由信息返回应答包。
三、不同网段的2台PC直连,怎样才能ping通
由前面可以知,ping命令的ICMP包能发送出去是因为路由表有对应网段的路由信息。那么,不同网段的2台机器ping不通的原因可能就是路由表里没有目的网段的路由信息。所以我们可以尝试添加路由信息来使不同网段的2台机器ping通。
3.1 往ip地址为 1.1.1.1 的机器添加 2.2.2.0 的路由信息,使 ICMP 包可以发送到目的ip为 2.2.2.X 的主机,使用这个命令添加路由信息:
route add -net 2.2.2.0 netmask 255.255.255.0 dev eth0
3.2 往ip地址为 2.2.2.2 的机器添加 1.1.1.0 的路由信息,使目的主机可以返回 ICMP 应答包:
route add -net 1.1.1.0 netmask 255.255.255.0 dev eth0
3.3 在 1.1.1.1 主机 ping 目的ip为 2.2.2.2 的主机,可以正常ping通
3.4 在 2.2.2.2 主机 ping 目的ip为 1.1.1.1 的主机,也正常ping通
四、总结
两台不同网段的pc直连,之所以ping不通是因为两台pc的路由表都没有目的网段的路由信息,添加完对应网段的路由信息后就可以ping通。
以下是ip为 1.1.1.1 的机器操作的整个流程,有收获的话,点个赞让我知道 ^_^