ARP详解
Published on 2020-02-21 22:48 in 分类: 05.网络协议 with Diligent_Maple
分类: 05.网络协议

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 @   Diligent_Maple  阅读(937)  评论(0编辑  收藏  举报
    编辑推荐:
    · SQL Server 2025 AI相关能力初探
    · Linux系列:如何用 C#调用 C方法造成内存泄露
    · AI与.NET技术实操系列(二):开始使用ML.NET
    · 记一次.NET内存居高不下排查解决与启示
    · 探究高空视频全景AR技术的实现原理
    阅读排行:
    · 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
    · 单线程的Redis速度为什么快?
    · SQL Server 2025 AI相关能力初探
    · AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
    · 展开说说关于C#中ORM框架的用法!
    点击右上角即可分享
    微信分享提示