ARP协议

(1)什么是ARP

ARP(Address Resolution Protocol,地址解析协议)是IPv4中必不可少的协议,它根据IP地址来获取物理地址。OSI模型将网络工作分为7层,最底下三层分别是物理层、链路层(MAC)、和网络层(IP)。其中IP层(指IPv4)为32位,mac地址为48位。通过网络发送数据包时,首先封装第三层(IP地址)报头,然后封装第二层(MAC地址)报头。但是在我们发送时,只知道IP地址而不知道mac地址,所以需要用到ARP协议。通过该协议,将网络层IP数据报报头中IP地址解析出目标硬件地址(MAC地址)。
ARP协议是网络层和链路层的重要枢纽。

(2)ARP缓存表

为了实现IP地址与MAC地址的查询与转换,ARP协议引入了ARP缓存表的概念,每台主机或路由器在维护着一个ARP缓存表(ARP table),这个表包含IP地址到MAC地址的映射关系,表中记录了对,我称之为ARP表项,他们是主机最近运行时获得关于其他主机的IP地址到MAC地址的映射,当需要发送数据的时候,主机就会根据数据报中的目标IP地址信息,然后在ARP缓存表中进行查找对应的MAC地址,最后通过网卡将数据发送出去。ARP缓存表包含一个寿命值(TTL,也称作生存时间),它将记录每个ARP表项的生存时间,生存时间到了就会从缓存表中删除。从一个表项放置到ARP缓存表中开始,一个表项通常的生存时间一般是10分钟吗,当然,这些生存时间是可以任意设置的,我们一般使用默认即可。
每次主机开机,ARP缓存表是空的。主机便会去建立ARP缓存表项。

(3)ARP报文结构

ARP协议_第1张图片

硬件类型:16位字段,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。
协议类型:16位字段,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议
硬件长度:8位字段,物理地址的长度,以字节为单位。例如:对于以太网的值为6。
协议长度:8位字段,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4。
操作码:16位字段,用来定义报文的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2)。
源硬件地址:这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节。
源逻辑地址:这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节。
目的硬件地址:这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。
目的逻辑地址:这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节。

(4)ARP报文封装

ARP协议_第2张图片
ARP协议_第3张图片
(5)局域网工作流程
主机A的IP地址:192.168.1.1
主机A的MAC地址为:0A-11-22-33-44-01
主机B的IP地址为192.168.1.2;
主机B的MAC地址为0A-11-22-33-44-02;

当主机A与主机B通信时,主机A只直到主机B的IP地址,可以通过ARP将主机B的IP地址解析为MAC地址。
工作流程如下:
第一步:根据主机A的路由表内容,IP确定用于访问主机B的转发IP地址为192.168.1.2,然后主机A在自己本地的ARP缓存中检查主机B的匹配MAC地址;
第二步:如果主机A在本地缓存中没有没有找到映射,则会询问192.168.1.2的硬件MAC地址。主机A通过计算发现,该IP地址与自己处于同一网段(局域网)中,因此主机A将ARP请求帧广播到本地网络上的所有主机。该请求帧中包含源主机A的IP地址和MAC地址,目标IP地址和目标MAC地址。由于并不知道目标MAC地址,因此一开始将目标IP地址设为FF-FF-FF-FF-FF-FF。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,则丢弃该ARP请求。
第三步: 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第四步:主机B将包含其MAC地址的ARP回复消息发送回主机A.
第五步:主机A收到主机B发来的ARP回复,将主机B的IP地址和MAC地址映射更新到ARP缓存表。
随后就可以与主机B进行IP通信了。

(6)局域网抓包分析

同一网段内,主机A192.168.3.4与主机B192.168.3.2通信。经过计算,主机A确定该IP地址与自己处在同一个网段(局域网)中,因此会进行广播的ARP请求。

先是ARP请求包报文:
ARP协议_第4张图片
可以看到:
源IP地址为192.168.3.1,源MAC地址为网卡地址。
目标IP地址为192.168.3.2,但是目标IP地址为全0。
广播后,局域网内该IP地址的主机进行回应,更新自己的ARP缓存表,并回复ARP回应包。ARP协议_第5张图片
回应时,将自己的源IP地址和MAC告诉主机A。主机A更新ARP缓存表,之后两个主机就可以通信了。

(7)公网

对于公网的ARP是通过网关来实现的。
当主机A想访问一个外网主机B时,通过计算发现该IP地址与自己并不在同一个网段中。

此时就需要通过网关来实现ARP解析。
第一步:主机A首先通过局域网ARP的同样方法,发送ARP请求来请求网关A的MAC地址,此时的网关A与主机A处于同一局域网中;
第二步:网关A收到这个ARP请求,然后进行回应。之后主机A就可以在数据包进行封装了,封装源IP地址和源MAC地址,主机B的IP地址和网关的MAC地址(而不是主机B的MAC地址)。数据包传送出去后,送到网关。
第三步:网关收到该数据包时,发现MAC地址是自己,但是IP地址不是自己,所以它不打开该数据包,而是将数据包转发给路由器。转发时,网关将目标MAC地址改为下一跳路由器的MAC地址;以此类推,一直到转发到目标IP主机B所在的局域网网关。网关最终找到主机B。回复类似。

你可能感兴趣的:(学习,网络协议)