arp 协议

   日期:2024-12-26    作者:yql9bt 移动:http://mip.riyuangf.com/mobile/quote/35503.html

我们之前学习到的 IP 协议解决的是数据跨网络传输的问题。 数据链路层解决的是:直接相连的主机,进行数据交付的问题 直接相连的设备包括我们的电脑,路由器等等哈

我们在网络基础那篇文章中讲过什么是以太网,这里可以来复习一下

  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用最广泛的局域网技术。和以太网并列的还有令牌环网, 无线LAN等;
  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是 48 位,是在网卡出厂时固化的;

  • 帧协议类型字段有三种值,分别对应 IP、ARP、RARP;

  • 帧末尾是 CRC 校验码。用于在数据通信中检测传输过程中可能出现的错误。它是一种错误检测码,通过对数据进行多项式计算来生成校验值,并将该校验值附加到数据中一起发送。接收方在接收数据时也进行相同的计算,并与接收到的 CRC 值进行比较,以检查数据是否在传输过程中发生了损坏。

太网帧格式的报文也叫做 Mac 帧哈

  • Mac 帧如何做到解包呢?很简单,就是定长报文,掐头去尾就得到有效载荷啦!头:14 字节,尾:4 字节。
  • Mac 帧的有效载荷应该交给上层的那个协议呢?类型字段用来表示将有效载荷交给上层的那个协议
    • 类型字段为 0x0800 就是将有效子啊喝交给 IP 协议。
    • 类型字段为 0x0806 就是将有效子啊喝交给 ARP 协议。
    • 类型字段为 0x0835 就是将有效子啊喝交给 RARP 协议。

这里还是以以太网为例哈,这个部分在网络基础的那篇文章中已经详细讲解过了,这里简单提一下

如上图所示:假设一个局域网中的 H1 要发送一条数据给同一局域网中的 H7 主机!H1 主机进行 Mac 帧的封装,然后发送发哦局域网,然后整个局域网的主机都会收到这个 Mac 帧,收到 Mac 帧的主机会读取报文中的目的 Mac 地址,如果和自己的 Mac 地址不相同,报文就会被直接丢弃!如果和自己的 Mac 地址相同,就会继续进行解包和向上交付

路由器也是 有网络层和数据链路成的,路由器收到报文的时候,先解包,再查路由表,然后再进行封转,转发!直到到达目标主机所在的局域网

分析这个解包和封转的过程不难看出,Mac 帧只在局域网中有效。路由器进行转发的过程中,源 Mac 地址和 目标 Mac 地址是不端变化的

不知道你有没有这样一个疑问:在局域网中通信的两台主机,最开始的时候我们怎么知道目标主机的 Mac 地址呢?这就要引出 ARP 协议啦

ARP(Address Resolution Protocol,地址解析协议)是一种用于将IP地址映射到MAC地址的协议。ARP 不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。就是说 ARP 协议本身是被划分到了数据链路层的,但是 ARP 协议是 Mac 帧的上层协议

  • ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系.
  • 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址
  • 数据包首先是被网卡接收到再去处理上层协议的, 如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址;
  • 硬件类型指链路层网络类型, 1 为以太网;
  • 协议类型指要转换的地址类型, 0x0800 为IP地址,即将 IP 地址转换为 Mac 地址。
  • 硬件地址长度对于以太网地址为 6 字节,填 6 就行。
  • 协议地址长度对于 IP 地址为 4 字节,填 4 就行。
  • op字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

不难发现,对于 IP 地址到 Mac 地址的转化大部分的字段都是固定的写法

如上图所示,在局域网 A 中,主机 R 想要给主机 C 发送一条数据,但是主机 R 并不知道主机 C 的 Mac 地址。因此需要进行 ARP 请求获取主机 C 的Mac 地址

  1. 首先在主机 R 的 ARP 软件层进行 ARP 报文的封装
  • 硬件类型,协议类型,硬件地址长度,协议地址长度都是固定填法。

  • 发送的是 ARP 请求 OP 字段填写 1。

  • 目的以太网地址现在我们还不知道,直接填上全 F 就行

  1. APR 请求报文封转完毕之后,就会交付给下层,构建 Mac 帧
  • 目的以太网地址不知道,填全 F 表示广播地址,任何收到这个 Mac 帧的主机都需要进行解包向上交付。
  • 以太网源地址是填写 MacR 哈,上面的图有一点小错误。
  • 帧类型是 0x0806 表示有效载荷是 ARP 报文。将来需要交给 ARP 的软件层。
  1. Mac 帧构建完毕之后,就会通过网卡发送到局域网。因为目的 Mac 地址是广播地址,局域网中的任何主机都会收到这个 Mac 帧并进行解包,那么就会有两种情况

    1. 除了主机 C 之外的其他主机收到了这个 Mac 帧,假设就是主机 B。

      • 主机 B 收到这个 Mac 帧之后,进行固定长度地掐头去尾,发现帧的类型是 0x0806,也就是 ARP 协议,就会将有效载荷交付给 ARP 的软件层。
      • ARP 的软件层收到这个报文之后,首先会取出 OP 字段,发现 OP 字段为 1 ,即该报文是 ARP 请求。然后再去取目的 IP 地址,发现目的 IP 地址和自己的 IP 地址不相同,那么就会直接将报文在 ARP 层丢弃。
    2. C 主机收到了这个 Mac 帧。

      • 主机 C 收到这个 Mac 帧之后,进行固定长度地掐头去尾,发现帧的类型是 0x0806,也就是 ARP 协议,就会将有效载荷交付给 ARP 的软件层。

      • ARP 的软件层收到这个报文之后,首先会取出 OP 字段,发现 OP 字段为 1 ,即该报文是 ARP 请求。然后再去取目的 IP 地址,发现目的 IP 地址和自己的 IP 地址相同,那么主机 C 就会进行 ARP 应答

      • 在主机 C 的 ARP 软件层进行 ARP 应答的封装

        • 同样地,硬件类型,协议类型,硬件地址长度,协议地址长度都是固定填法。
        • op 字段填写 2 表示这是 ARP 应答
        • 站在主机 C 的视角,发送端以太网地址,发送端 IP 地址,目的以太网地址,目的 IP 地址都是清楚的
      • ARP 应答封装完成之后,就会向下交付,封装 Mac 帧。

        • 目的以太网地址,源以太网地址主机 C 都已经知道了。
        • 帧的类型是 0x0806 表示有效载荷是 APR 报文。将来需要交给 ARP 的软件层。
      • Mac 帧封装完毕之后,就会将他发送到局域网,此时也有两种情况

        1. 除了主机 R 以外的其他主机收到了这个 Mac 帧。这个主机发现目的以太网地址不是自己,会将报文直接丢弃
        2. 主机 R 收到了这个 Mac 帧,发现目的以太网地址是自己,那么机会接收这个报文,从而获取到主机 B 的 Mac 地址,就这样,完成了一次 ARP 请求和响应的过程。

    通过以上模拟的 ARP 通信过程,我们不难得出结论

    1. ARP 收发的过程中,收到的任何 ARP 报文都是先看 OP 字段。
    2. OP 字段决定了 ARP 报文的种类,是 ARP 请求报文还是 ARP 响应报文呢?不同类型的 ARP 报文又决定了接下来是看目的 IP 地址还是发送端的 Mac 地址。

在局域网中的主机每次进行通信之前都要进行 ARP 是不是有点麻烦,好在操作系统会帮我们缓存主机的 Mac 地址和 IP 地址的映射关系!我们可以使用 命令查看缓存的映射数据!下图是在 Windows 操作系统中查看到的结果


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号