Linux网络基础——ARP协议

ARP协议:
地址解析协议
对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址。ARP协议为IP地址到对应的硬件地址之间提供动态映射。
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧⾸首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。

ARP数据报的格式:
这里写图片描述

以太网目的地址:目的主机的硬件地址。目的地址全为1的特殊地址是广播地址。
以太网源地址:源主机的硬件地址。
帧类型:对于ARP协议,该字段为0x0806。对于RARP协议,该字段为0x8035。
硬件类型:表示硬件地址的类型。值为1时表示以太网地址。也就是说ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。
协议类型:表示要映射的协议地址类型。值为0x0800时表示IP协议。
硬件地址长度:与硬件类型对应的硬件地址的长度,以字节为单位。如果是以太网,则是6字节(MAC长度)。
协议地址长度:与协议类型对应的协议地址长度,以字节为单位。如果是IP协议,则是4字节(IP地址长度)。
操作类型(op):四种操作类型。ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
发送端硬件地址:如果是以太网,则是源主机以太网地址,此处和以太网头中的源地址对应。
发送端协议地址:如果是IP协议,则表示源主机的IP地址。
目的端硬件地址:如果是以太网,则是目的以太网地址,和以太网头中的目的地址对应。
目的端协议地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。
对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。请求包是广播的,但是ARP应答帧是单播的。
以太网数据报最小长度是60字节(14字节的以太网头,不包含4字节的FCS),ARP数据包长度为42字节(14字节的以太网头和28字节的ARP数据),需要加入填充字符到以太网最小长度要求:60字节。

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

RARP协议:
逆地址解析协议

将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。

RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址。

数据报格式:
帧格式同ARP协议,只有帧类型字段和操作类型(op)不同。
对于(op)RARP请求(3),RARP应答(4)

原理:
1.主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。

2.本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。

3.如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用。

4.如果不存在,RARP服务器对此不做任何的响应。

5.源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

如下是一个简单的利用arp脚本抓取对应主机mac地址例子:
arp.sh

#!/bin/bash

i=1
count=0

while [ $i -le 254 ]
do 
    if [ $count -gt 20 ];then
        count=0
        sleep 2
    fi
    ping -c1 "192.168.0.$i" &
    let i++
    let count++
done

在终端输入sh arp.sh 运行程序可以查看结果,输入arp -a命令可以查看当前所有mac地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值