arp协议与icmp协议在ping中的应用
ping命令可以用于查询目标网络或主机是否可达,其内部实现依赖于arp协议与icmp协议。
对于arp协议,其工作在网络层,实现IP地址到Mac地址的映射。
协议报文的格式如下:
那么PING命令具体如何执行:
以同一局域网内host1 => host2 为例:
首先host1查询自己是否有host2的ip-mac地址映射缓存,若有,结束
若没有,那么对外广播ARP请求,请求包填充自身的IP地址、MAC地址、以及目标的IP地址,MAC地址填充00:00:00:00:00:00
一个典型的ARP请求帧(外层套上以太网帧)报文如下:
以太网目的MAC | 以太网源MAC | 以太网帧类型 | OP | 发送者MAC | 发送者IP | 目标MAC | 目标IP |
00:00:00:00:00:00 | 20:47:47:72:fb:64 | 0806 | 1(请求报文) | 20:47:47:72:fb:64 | 192.168.2.2 | 00:00:00:00:00:00 | 192.168.2.1 |
在交换机收到该ARP请求后,查询自身是否包含host2的MAC地址,若包含那么返回给host1
若没有,那么对外广播该ARP请求,host2收到之后,发现目标IP正是自己
根据ARP请求中host1的MAC地址,填充相应的信息,执行一个ARP回复(op=2)
进一步,若host1和host2处于不同的广播域,那么需要进一步向网关route请求处理该ARP包,网关根据目标IP地址
从合适的端口向外转发该ARP请求,直到host2收到该ARP请求。
双方确认对方的MAC地址后,在网络IP层,还需要确认IP包是否能够正确的传输。其采取的是ICMP协议。
IP协议在出现问题时,将通过ICMP获知出错的问题。即ICMP协议功能:
- 确认目标IP是否可达
- 若不可达,给出错误信息
常见的ICMP报文控制信息有:
- 目标不可达
- 路由器超时
- 重定向或改变路由
- ......
这些信息用于判断当IP包无法到达时,给出相应的错误信息用于诊断。
ping命令基于ICMP协议,获知目标主机是否可达,以及相应的回复信息。
linux中traceroute命令同样基于ICMP协议,将给出路径上经过的路由器