ARP详解

ARP详解

1、前言

地址解析协议(Address Resolution Protocol,ARP)是一个通过解析网络层地址来寻找数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP是通过网络地址来定位MAC地址。

1.1 建立TCP连接与ARP的关系

应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文到达网络层并开始查询路由表:

1)如果目的IP和自己在同一个网段:

当发送端的ARP高速缓存表中在目的端对应的MAC地址时,则发送端在TCP SYN封装时,直接将目的端IP和MAC地址进行填充并发送出去。

当发送端的ARP高速缓存表中不存在目的端对应的MAC地址时,则IP层将TCP SYN连接缓存下来,发送ARP广播请求目的端的MAC地址,在目的端收到ARP请求,将自己的MAC和IP进行封装形成应答包,发送给发送端,发送端在收到ARP应答包之后,将目的端的IP和MAC缓存至自己的ARP高速缓存表中并进行填充,随后发送端将自己的TCP SYN连接发送出去。

(1)ARP请求包

(2)ARP应答

 

2)如果目标地址和自己不在同一个网段,就需要将包发送给默认网关,这需要知道默认网关的MAC地址:

当IP层的ARP高速缓存表中在默认网关对应的地址时,则发送端在TCP SYN封装时,直接将目的MAC填充为默认网关发送出去。

当发送端的ARP高速缓存表中不存在默认网关对应的MAC地址时,则IP层将TCP SYN连接缓存下来,发送ARP广播请求默认网关的MAC地址,在网关收到ARP请求,将自己的MAC和IP进行封装形成应答包,发送给发送端,发送端在收到ARP应答包之后,将默认网关的IP和MAC缓存至自己的ARP高速缓存表中,随后发送端将自己的TCP SYN连接发送出去。

 

1.2 ARP的位置

       OSI模型有7层,TCP在4层传输层,IP在3层网络层,ARP在2层数据链路层,高层对底层有强制依赖性,所以在TCP的建立前需要读取网络层中ARP高速缓存表中的数据,如果有则直接使用;如果没有就需要网络层对数据链路层进行依赖,则数据链路层进行ARP请求和应答,并发送给网络层并对ARP高速缓存进行补充。

 

2、ARP分组格式

以太网地址就是指MAC地址

2.1 以太网链路层-以太网首部(14字节)

目标以太网地址:ARP请求的目标MAC地址,FF:FF:FF:FF:FF:FF(二进制全为1)为广播地址。

源以太网地址:ARP发送方的MAC地址。

帧类型:以太网类型表示的是后面的数据类型,ARP为0x0806

2.2以太网报文数据-ARP请求/应答(28字节)

硬件类型:如以太网(0x0001)、分组无线网

协议类型:如网际协议(IP,0x0800)、IPv6(0x86DD)

硬件地址长度:每种硬件地址的字节长度,一般为6

协议地址长度:每种协议地址的字节长度,一般为4

操作码:1为ARP请求,2为ARP应答;3为RARP请求,4为RARP应答

源硬件地址:发送端ARP请求或应答的应答地址,这里是以太网地址,和填充在源以太网地址相同

源协议地址:发送ARP请求或应答的IP地址

目的硬件地址:在ARP请求时为FF:FF:FF:FF:FF:FF(二进制全为1)广播地址;在ARP应答时发送端的MAC。

目的协议地址:在ARP请求时为目的IP地址。

 

3、ARP高速缓存

3.1 定义:

ARP缓存是一个缓存区。用来储存IP地址和MAC地址,本质是<IP地址,MAC地址>的对应表中。表中一个条目记录了网络上一个主机的IP地址和其对应的MAC地址。

每一个以太网或令牌环网网络设配器都会有一个自己的ARP表,如下图:

Linux:

Windows:

当地址解析协议被询问一个已知IP地址节点,先查看本地ARP缓存表,若存在则直接返回对应的MAC地址;如果不存在,本地端才会发送ARP请求报文。

 

3.2 ARP缓存时间

在ARP缓存表中,动态ARP和静态ARP:

动态ARP:动态ARP条目随着时间推移自动添加或删除,每一个动态ARP缓存项目都设置了生存时间(TTL),TTL为0时此项目就会从ARP表中删除,

Linux默认60秒:

Windows默认120秒:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters(如下不存在,需要创建)

(1)ArpCacheLife:定义arp老化时间,默认120秒

(2)ArpCacheMinReferencedLife:定义arp最大老化时间,默认10分钟

 

4、ARP报文总长度

ARP报文总长度为64字节

但是在ARP传输过程中只有42字节:

以太网首部+ARP包头=14+28=42字节(bytes)

而在现实情况下,为了保证以太网帧的最小帧长为64字节(bytes),所以会在报文李添加一个padding字段用来填充,而保证帧大小为64字节(bytes)。

 

posted @ 2020-02-21 22:48  Diligent_Maple  阅读(928)  评论(0编辑  收藏  举报