今天跟大家聊一聊你们认为最熟悉又是最陌生的ARP地址解析协议,现在网络都是 Ethernet,在这个环境中,我们的 PC router 三层设备都包含 mac IP 地 址 。
一、ARP的简单介绍
在以太网环境中,我们要发送帧,帧要添加SD( 源目,下面统一说成SD)MAC 地址信息,通信的时候,不关注 MAC 地址是什么,ping IP 地址,很多情况下 S 和 D 通信的时候 S 知道 D的 IP 地址,不知道MAC 地址是不能通信的,因为在 Ethernet 环境中将成帧(成帧 我们的数据帧能够成功的被封装),如果不知道 MAC 地址,那么 MAC 地址帧头的第一个字段没有办法填写,所以通信的时候,不但知道对端的 IP 地址,还要知道对端 MAC 地址 。
当PC 发送一个数据包去往目的节点的时候,回做一个判断自身的 IP 地址和目标 IP 地址是否在同一个自网段内,使用自身的掩码和目的 IP 地址做一个云运算,得出网络号和自身的网络号对比,一致代表在同一个网络内或者广播域内,这个时候可以使用对端 MAC 地址做数据封装,不在同一网络内,那么就检查是否指定网关,去查看网关的 MAC 地址信息,因为去往外网的时候目的 MAC 地址必须是网管的,否则出不去,因为 router 收到 MAC 地址为自己的接受接口地址的时候才会拆包,获得 3 层查 DIP,做转发,这就是 PC 对待网络内 网络间通信差异化处理 。
还有一种可能,就是 PC 要访问外网节点,并没有指定网关,那么可以尝试解析对端的 MAC 地址,只要通过 Ethernet 接口发送数据,我一定要根据下一跳 IP 地址在 ARP 表中找对应的表项 ,情况有以下两种:
找到:直接使用该表项的地址信息填充 MAC 字段,
没有找到:发送 ARP 请求来解析,
在同一网络内,我的下一跳就是目的地;不在同一网络内 下一跳就是网关 。当两来主机在同一网络内的时候直接针对目的 IP 做 ARP 检查,要访问外网的时候指定网关,对网关做 ARP 地址检查 。ARP请求广播,应答为单播,那什么情况下发送ARP请求呢?就是在已知目的主机 IP,解析目的主机MAC 地址的时候,如下图:
文章插图
可以看到,ARP 封装一定是封装 Ethernet 帧头 。
下面我们就来说看看ARP数据包格式,如下图所示:
文章插图
推荐阅读
- 用Python演示ARP攻击的过程及应对办法
- 浅谈 React 中的 XSS 攻击
- 用Python开发一个交互式网络和IP地址计算器
- 户籍地址是填什么地址?
- 浅谈postman和jmeter的用法与区别
- 如何建立一个完美的 Python 项目
- 路由器怎么自动获取IPv6地址?
- 网络地址转换NAT技术
- 网络地址转换NAT,配置讲解
- 浅谈Linux 中的进程栈、线程栈、内核栈、中断栈