ARP协议是一种地址解析协议,在实际应用中 ,我们经常会遇到这样的问题,已经知道啦一个主机的IP地址,需要找出与之相应的物理地址,或者反过来已经知道了物理地址需要找出相应的IP地址。地址解析协议ARP和逆地址解析协议就是用来解决这样的问题的。
IP地址是表示网络中不同主机的地址,而端口号就是同一台主机上表示不同进程的地址,IP号和端口号合起来表示网络中的唯一进程
虽然IP,ARP,RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层
以太网的帧格式:
其中源地址和目的地址都是指网卡地址(也叫MAC地址)长度是48位帧协议类型的字段分别有三种值,分别为IP,ARP,RARP
以太网中的数据长度规定最小为46个字节,最大为1500个字节,ARP和RARP数据包的长度不够46个字节要在后面补填充位。最大值1500称为以太网的最大传输单元MTU,不同的网络类型有不同的MTU。
ARP数据报格式
在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡收到再去处理上层协议的,如果接收到的数据包的硬件地址与本主机不符,就直接丢弃,因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。
源主机发送ARP请求,询问地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求 ⼴广播到本地⽹网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表⽰示⼴广播),目的主机接收到 ⼴广播的ARP请求,发现其中的IP地址与本机相符,则发送⼀一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表,可以⽤用arp -a命令查看。缓存表中的表项有过期时间(⼀一 般为20分钟),如果20分钟内没有再次使⽤用某个表项,则该表项失效,下次还要发ARP请求来获得 ⽬目的主机的硬件地址。
ARP的请求和应答过程:
上述例子的源主机和目的主机是在同一个网段的。
编写ARP脚本:
#!/bin/bash
i=1
count=0
while [ $i -le 254 ]
do
if [ $count -gt 10 ];then
count=0
fi
ping -c1 192.168.0.$i &
let i++
let count++
done
wait
echo "#####################################"
arp -a |grep -v incomplete
echo "#####################################"