欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux之ARP协议

程序员文章站 2022-05-16 22:37:23
...

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬 件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这 个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求 广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到 广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。

每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一 般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

Linux之ARP协议

ARP数据报的格式如下所示:

Linux之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
Linux之ARP协议

#!/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

运行结果:
Linux之ARP协议

Linux之ARP协议

可以看出,已经有两个电脑连上了该网络。

相关标签: ARP