• 以太网基础学习(二)——ARP协议


    一、什么是MAC地址

            MAC地址(英语:Media Access Control Address),直译为媒体访问控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。

            它是网络设备(如计算机、手机、路由器等)在物理层上的唯一身份标识符。它由48位二进制数组成,通常表示为12个十六进制数,每两个数用冒号或短横线隔开。MAC地址是由设备厂商预设的,无法修改,因此可以用来区分不同的网络设备。在局域网中,数据包的传输是根据MAC地址进行路由的。

    二、什么是ARP协议

            ARP(Address Resolution Protocol,地址解析协议)是一种网络协议,用于将IP地址转换成MAC地址,以便在网络中传输数据。它可以通过广播方式使网络中的所有主机都能够知道IP地址与MAC地址的对应关系,从而实现网络上的数据通信。

            当主机需要与另一个主机通信时,它会首先向网络中广播一个ARP请求,询问该主机的MAC地址。接收该请求的主机会返回自己的MAC地址,以便发送方能够将数据发送到接收方。ARP协议是IPv4中非常重要的一种协议,它是实现网络通信的关键之一。(注意:ARP 只用于 IPv4 协议中,IPv6 协议使用的是 Neighbor Discovery Protocol,译为邻居发现协议,它被纳入 ICMPv6 中。)

            简而言之,ARP 就是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应该接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的 MAC 地址。

    三、ARP工作流程

            主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;

            主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

            当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

    • 第1步:根据主机A上的路由器内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
    • 第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
    • 第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
    • 第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
    • 第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

     下面我们通过图片进一步理解一下:

    四、ARP帧格式

     

    1、MAC头部

            前 14 个字节是 MAC(以太网)头部 ,其余部分由 ARP 协议定义。 ARP 帧的前 8 个字节是通用的,剩余部分用于将 IPv4 协议映射到 48 位的以太网地址。

            首先让我们看看以太网头部,第一个字段是 DST 即目的地址 ,第二个字段是 SRC 即源地址 。这里需要注意一点,对于一个 ARP 请求来说,目的地址字段填充的是以太网地址 ff:ff:ff:ff:ff:ff ,即以太网广播地址,这样在同一个广播域中的每个接口都能收到该帧。第三个字段是长度或类型,此字段占据 2 字节大小,对于 ARP 请求或响应该字段的值一定为 0x0806 。

    2、最后 4 个字段的类型和大小

            接下来的 4 个字段指定了最后 4 个字段的类型和大小

            (1)硬件类型字段:硬件地址类型。硬件地址常见的有 MAC 物理地址或者以太网地址,对于以太网,硬件类型字段值为 1 。

            (2)协议类型字段:映射的协议地址类型。对于 IPv4 ,协议类型字段的值为 0x0800 。

            (3)硬件大小字段:硬件地址的字节数。对于以太网中使用 IPv4 地址的 ARP 请求或响应,硬件大小字段的值为 6 。

            (4)协议大小字段:协议地址的字节数。对于以太网中使用 IPv4 地址的 ARP 请求或响应,协议大小字段的值为 4 。

       (5)Op 字段:如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。

    3、发送方和目的的硬件地址和协议地址

            接下来的字段指出了发送方和目的的硬件地址和协议地址。

            (1)发送方硬件地址字段:发送方的以太网 MAC 地址。

            (2)发送方协议地址字段:发送方的 IPv4 地址。

            (3)目的硬件地址字段:目的以太网 MAC 地址。

            (4)目的协议地址字段:目的IPv4 地址。

    4、填充字段和FCS

            接下来是填充字段,当要发送一个 ARP 请求时,除了目的硬件地址设为0之外,其他字段
    都需要进行填充。FCS字段作为最后的校验。

    五、ARP 的 4 种典型情况总结

            1、发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。

            2、发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。

            3、发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。

            4、发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。

     

  • 相关阅读:
    ElementUI之MessgageBox使用
    maven 的多镜像次序生效问题
    基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统
    Python爬虫编程思想(157):使用Scrapy从CSV格式转换到JSON格式
    手写数字识别Mnist数据集和读取代码分享
    前端开发学习之【Vue】-下
    单细胞聚类,究竟聚类聚成多少类比较合适?全代码分享
    ARP欺骗
    java中@Async注解通常与Springboot框架一起使用,如何在Springboot框架开启这个注解?
    C++中(封闭)类的定义及使用特性---知识要点篇1
  • 原文地址:https://blog.csdn.net/apple_53311083/article/details/133528186