Ping命令的原理
参考文献:ping命令详解
ping命令的原理其实网上十分多大佬已经解答了,这里我就简单的记录下自己的理解。
若主机A要想ping主机B,分为两种情况,一种是同一网段,一种是不同网段。不过大致的流程都差不多。先说统一的大致步骤。
第一步:查Mac地址表。没有目的Mac地址就发送ARP请求,以得知目的Mac地址。
ARP地址解析协议
地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
第二步:有目的Mac地址就发送ICMP报文。
ICMP互联网控制报文协议。
ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
MAC地址信息
Vlan、Mac Address、 Type 、 Ports
第一种情况:主机A和主机B在同一网段。它们通过一个交换机连接。
A ping B。
主机A会先查询本机的Mac地址表。发现没有主机B的Mac地址。这时主机A会向交换机发出ARP请求。
请求内容包括:源Mac地址(在这里就是A的Mac地址)、目的Mac地址(现在未知)、源IP地址、目的IP地址等。
交换机收到后,发现自己A、B的Mac地址都没有,它就会先学习主机A的Mac地址,将其和对应端口加入到自己的Mac地址表中。然后将除主机A所在端口以外的其他端口,转发ARP请求。
其他主机收到ARP请求后,对看看是否找的是自己,不是则丢弃,是则回应。
那么主机B收到后,则会学习到主机A的Mac地址,并回复ARP请求。
回复请求内容包括:源Mac地址(在这里就是B的Mac地址)、目的Mac地址(在这里就是A的Mac地址)、源IP地址、目的IP地址等。
然后这个ARP请求就原路返回:主机B->交换机->主机A。返回过程中,交换机和主机A就学习到了主机B的Mac地址和对应的端口。
好了,现在大家都知道对方的Mac地址了。可以传输ICMP报文了。
主机A发送ICMP协议报文。
主机A发送ICMP报文内容包括:源Mac地址(在这里就是A的Mac地址)、目的Mac地址(在这里就是B的Mac地址)、源IP地址、目的IP地址、ICMP报文等。
主机A->交换机->主机B。
主机B收到后,回复主机A,也是ICMP协议报文。
主机B发送ICMP报文内容包括:源Mac地址(在这里就是B的Mac地址)、目的Mac地址(在这里就是A的Mac地址)、源IP地址、目的IP地址、ICMP报文等。
主机A<-交换机<-主机B。
第二种情况:主机A和主机B在不同网段。它们通过一个路由器通讯。
主机A想ping主机B,发现对方和自己不是一个网段。怎么办,主机A就会通过网关路由器转发给主机B。
主机A->路由器端口1->路由器端口2->主机B
主机A就会发送ICMP报文给路由器端口1,但它不知道路由器端口1的Mac地址。那么就通过ARP请求,就可以相互学习到对方的Mac地址和对应端口了。
主机A->路由器端口1
端口1收到ICMP报文后,通过路由器端口2,发给主机B。如果端口2不知道主机B的Mac地址。也可以通过ARP请求,相互学习Mac地址。并加入到Mac地址表中。
路由器端口1->路由器端口2->主机B
主机B收到主机A的ICMP报文后,也会返回ICMP报文以回应主机A。
主机A<-路由器端口1<-路由器端口2<-主机B
这就是主机Aping主机B的大致的流程了