0. 前言
主机A将数据跨网络交给主机B,首先是要将数据交给下一跳路由器,最后到达入口路由器,入口路由器要通过内网转发发给主机B,此时就要把数据封装成mac帧,这就要知道该主机的mac地址,所以就需要将IP地址再转换成mac地址,这就需要ARP协议。
1. ARP原理
当数据跨网络发送到入口路由器之后,路由器在局域网广播“谁的IP是xxx.xxx.x.x啊,请把你的mac地址告诉我”,然后IP地址为xxx.xxx.x.x的主机收到之后,就一对一将自己的mac地址发送了出去
2. ARP报头
ARP协议属于MAC帧上层,但是归属到数据链路层层
- **硬件类型:**一般都是网络类型,1代表以太网
- **协议类型:**转化的地址,0800表示将IP转化为mac地址
- **硬件地址长度:**以太网长度为6byte
- **协议地址长度:**IP地址为4byte
- **操作:**如果是1,表示arp请求;如果是2,表示arp应答
- **以太网发送端地址:**发起arp请求的以太网地址
- **发送端IP地址:**发起者的IP地址
- **目的以太网地址:**这个目的并不清楚,需要收到应答之后才知道,填成全f
- **目的IP地址:**目标主机的IP
3. 模拟ARP过程
发起arp请求的时候,并不知道目的以太网地址,所以全f。
当arp请求构建完毕之后,交给mac帧封装,此时也不知道目的以太网地址,全f表示广播,0806表示arp请求/应答。
发送到局域网当中时,其他主机首先看的是请求还是应答,然后再对比IP,如果不是则直接丢弃;如果是,则要构建mac帧应答,此时源地址和目的地址都知道,所以可以表明发送的目标。
应答发送到局域网当中时,也是先看op
是请求还是应答,只有曾经发起过请求的主机,才知道这个应答是自己的,然后提取发送端的IP地址和mac地址。其他主机没有发送过请求,所以在数据链路层就直接丢弃了。
所以在ARP过程当中,收到的任何报文,都是先看OP字段
OP字段决定是请求和应答,请求看的是目的mac和目的IP,应答看的是发送端mac和发送端IP
4. ARP相关问题
- arp并不是每次都需要做的,因为arp会进行缓存(时间有限制,过一段时间就清空)
-
如果想要拿到同一网段所以主机的IP和mac,可以通过IP&子网掩码得到网络号,然后直接ping所以的主机
-
如果收到多次arp应答,会以最新的为主
在局域网中,路由器的IP地址一般都是比较确定的,如果有一个C主机冒充路由器IP地址,向另一台A主机发送大量的arp应答,那么此时A主机就会更新映射关系。
此时这A主机发送的以太网请求,就全部到C主机这里来了,如果C主机将报文直接丢弃,就相当于定性让A主机断网,这叫ARP欺骗;如果不丢弃,将报文发给路由器,路由器就以为是C主机要发起请求,将报文当中的源IP和源mac,替换成了C主机的,这个请求的应答就会发给C主机,此时路由器和A主机都不知道,C就成了中间人机器