ARP笔记
今天在工作的时候有一次涉及到了ARP的问题,作为一个计算机科班的同学,在学过几轮计算机网络之后,一直了解的都是IP/TCP协议,并没有集中学习过ARP,只知道在数据链路层,ARP协议是用来进行IP地址和MAC地址转换的,今天希望借此机会,做一个ARP的笔记,了解ARP的内容,作用以及应用场景,以及不同的操作系统如何进行ARP的绑定和解绑。
定义
ARP三个字母是地址解析协议的缩写,他的作用其实就是将IP地址转换为MAC地址,换句话说,就是形成IP地址和MAC地址之间的映射。因为在以太网环境中,各个设备之间数据的传输依赖的MAC地址,所以当一个数据包中的IP地址需要解析时,就需要查看ARP转发表,看一看这个IP地址对应的是哪一个MAC地址。
ARP工作流程
假设主机A和主机B在同一个网段,现在主机A要向主机B发送数据,就会发送下面有关ARP的过程:
- 主机A查看自己的ARP转发表,看看自己的这些IP地址有没有一个是和当前的目标IP(主机B的IP)一致的ARP表项,如果有,那主机A就利用这个MAC地址对IP数据包进行封装。
- 如果主机A找不到对应的MAC地址,则缓存该数据报文,以广播方式发送一个ARP请求报文,该报文的目标IP地址为主机B的IP地址,MAC地址全为0。
- 该网段上的所有主机都可以收到该ARP请求,但是只有主机B收到该请求的时候,会处理该请求,因为它发现这个请求的目标IP地址和自己的IP地址是一致的。
- 主机B会将ARP请求报文中的发送端IP和MAC存入自己的ARP转发表中,这样主机B想要访问主机A时就能够直接访问,然后以单播的方式发送ARP响应报文发给主机A,其中就有B他自己的MAC地址,这个时候主机A的ARP转发表也会有B的MAC地址了,下次想要访问B就不用先广播了。
所以说,没有ARP转发表,就没法实现IP地址到MAC地址的转换,想象一下如果我们通讯的时候,直接用MAC地址,那也太麻烦了,毕竟MAC地址都不是很好记的。其实IP地址是一堆数字我们也不是很好记的,我们一般记住的都是域名(比如baidu.com),所以域名和IP地址之间还有一层映射,这个需要DNS解析来实现,这个以后再说。
ARP表
既然ARP转发表如此重要,那我们如何查看当前主机的ARP表呢, 查看ARP表的命令是arp -a,
我们看到,ARP表中有三列属性,分别是IP地址,MAC地址和类型,前面两个属性通过前面的讲解,知道这是两类地址之间的映射,最后一个类型就和ARP解绑和绑定相关了。
ARP解绑和绑定
首先我们得知道,什么是动态ARP表,什么是静态ARP表。动态ARP表就是通过ARP报文来自动生成和维护的,可以被老化和更新。静态ARP的含义就是IP地址和MAC地址是绑定在一起的,是不会被更新掉的。这个是我们自己手动配置的,它限定了和指定IP地址的设备通信时,只能使用指定的MAC地址,比如同样的IP,有时候我们需要用到模拟通讯设备的另一个主机,IP地址没变,但是硬件条件变了,这时候就连不上我们有对应静态ARP表的主机了,因为我限定了你这个IP只能是唯一的实际的装置来和我通讯,不能被模拟,这样就增加了通信的安全性。
有的时候,我们会发现IP地址都是对的,怎么就通讯不上呢,特别是有模拟场景存在时,所以就需要考虑到对已经存在的静态ARP表进行解绑,最常用的命令就是 arp -d <ip>
,通常会很很多个这样的ARP表需要绑定和解绑,绑定的命令就是arp -s <ip> <MAC>
。至于ARP一件绑定和解绑,还需要继续研究,需要找到文档《ARP绑定方案》