地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
1、硬件类型字段定义物理地址的类型,值为1表示MAC地址
2、协议类型字段表示要映射的协议地址类型,它的值为0x800,表示IP地址。
3、硬件地址长度字段和协议地址长度字段(单位是字节),对MAC地址来说长度是6,对IP(v4)地址来说长度是4。
4、操作字段指出四种操作类型(op):ARP请求:1,ARP应答:2,RARP请求:3,RARP应答:4。
5、最后四个字段指定通信双方的以太网地址和IP地址,发送端除了去填充目的端以太网地址外的其他3个字段,以构建ARP请求并发送。
由此可见,ARP请求/应答的长度为28,加上以太网帧头部和尾部的18字节,则一个ARP请求/应答的长度为46字节。有的实现要求以太网帧的数据长度最少为46字节,此时ARP的长度就是64字节。
#!/bin/bash
net='192.168.1.'
i=1#i表示IP地址的最后三位
count=0
while [ $i -le 254 ]#三位进制数最大可表示0-255,去掉0和ff剩下254个数
do
if [ $count -eq 20 ];then#每隔20个地址ping一次,sleep1秒
count=0
sleep 1
fi
ping -c1 $net$i &
let i++
let count++
done
wait
echo '###################################################'
arp -a | grep -v 'incomplete'#打印所有不包含incomplete的IP地址和对应MAC地址
echo '###################################################'