Linux之ARP协议
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬 件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这 个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求 广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到 广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一 般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
ARP数据报的格式如下所示:
源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层 为以太网 的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表⽰示ARP应答。
对以太网首部来说:如果是请求ARP报文的话,
以太网目的地址: 是(全1)的,是广播报,目的是让同一个局域网上所有主机都收到ARP请求包 以太网源地址: 就是发送端地址。
帧类型:如果是ARP报文,值为0x0806 硬件类型: 表明ARP协议实现在那种类型的网络上,它的值为1,即表示以太网地址
协议类型:表示解析协议(上层协议),这里一般是0800,即IP 硬件地址长度:也就是MAC地址长度,即6个字节
协议地址长度:也就是IP地址长度,即4个字节
操作类型:表示ARP协议数据报类型。1ARP表示请求包,2ARP表示应答包,3表示RARP请求包,4表示RARP应答包
发送端以太网地址:也就是源MAC地址 发送端IP地址:也就是源IP地址 目的端以太网地址:目标端MAC地址(如果是请求报文,是全0)
目地端IP地址:也就是目地端的IP地址
编写arp脚本抓取对应主机mac地址:
arp.sh
#!/bin/bash
i=1
count=0
while [ $i -le 254 ]
do
if [ $count -gt 20 ];then
count=0
sleep 3
fi
ping -c1 "192.168.0.$i" &
let i++
let count++
done
运行结果:
可以看出,已经有两个电脑连上了该网络。
上一篇: jsonp请求数据的基本流程是什么
下一篇: PHP教程.经验技巧(上)_PHP