一、ARP协议工作原理
ARP协议能实现任意网络地址到任意物理地址的转换,其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标主机的网络地址,此网络上的其他机器都受到这个请求,但只有被请求的目标机器回回应一个ARP应答,其中包含自己的物理地址。
二、以太网ARP请求/应答报文详解
以太网ARP请求/应答报文格式如下:
- 硬件类型字段定义物理地址类型,它的值为1表示MAC地址。
- 协议类型字段表示要映射的协议地址类型,IP协议地址为0X800。
- 硬件地址长度字段和协议地址长度字段:对MAC地址来说,其长度为6;对IP(v4)地址来说,其长度为4。
- 最后4个字段指定通信双方的以太网地址和IP地址。发送端填充除目的端以太网地址外的其他3个字段,构成ARP请求并发送。接收端发现该请求的目的端IP地址是自己,就把自己的以太网地址填进去,然后交换两个目的端地址和发送端地址,构成ARP应答并返回。
三、ARP告诉缓存的查看和修改
通常,ARP维护一个高速缓存,其中包含经常访问(比如网关地址)或最近访问的机器IP地址到物理地址的映射。这样就避免了重复ARP请求,提高了发送数据包的速度。
LINUX可以使用arp命令来查看和修改ARP请求,以下是arp命令的用法:
arp: 显示所有的表项。
arp -d address: 删除一个arp表项。
arp -s address hw_addr: 设置一个arp表项。
常用参数:
-a 使用bsd形式输出。(没有固定的列)
-n 使用数字形式显示ip地址,而不是默认的主机名形式。
-D 不是指定硬件地址而是指定一个网络接口的名称,表项将使用相应接口的MAC地址。一般用来设置ARP代理。
-H type, --hw-type type: 指定检查特定类型的表项,默认type为ether,还有其他类型。
-i If, --device If: 指定设置哪个网络接口上面的arp表项。
-f filename: 作用同'-s',不过它通过文件来指定IP地址和MAC地址的绑定。文件中每行分别是主机和MAC,中间以空格分割。如果没有指定文件名称,则使用/etc/ethers文件。