协议簇:Ethernet Address Resolution Protocol (ARP) 解析

简介

前面的文章中,我们介绍了 MAC Frame 的帧格式。我们知道,在每个 Ethernet Frame 中都分别包含一个 48 bit 的源物理地址和目的物理地址. 对于源地址很容易理解,该地址可以直接从硬件上读取. 但是对于一个网络节点,他怎么知道一个 Frame 的目的物理地址呢? 本文我们将学习 ARP 协议来解答这个问题.

ARP 协议主要用来完成将网络层协议的地址(比如,IP 地址)解析为物理地址的工作.

为什么需要将网络层协议的地址转换为物理地址呢?

对于物理层来说,他仅仅能处理 48 bit 的物理地址,而网络层协议往往有自己协议中定义的协议地址,而这些协议的地址往往都不一样. 比如, IP 地址的长度为 32 bit,CHAOS 地址的长度为 16 bit, Xerox PUP 地址的长度为 8 bit.

反过来说,ARP 协议的存在也是必须的. 因为如果一个物理层想要同时支持上述的这些协议,他就不应该依赖于这些协议的实现,而是定义自己的地址格式,再通过一种方式将网络层协议的地址转化为物理地址. 这个方式就是 ARP 协议要实现的功能.

说明一点,接下来的描述将倾向于网络层协议是 IP 来进行描述.

ARP 包格式

ARP Packet Format
ARP 协议的包结构比较简单,我们直接看一个例子. 通过这个例子来解析每个字段的含义:

首先,我们注意到 ARP 包中 ar$op 字段可能的值有两个 REQUEST 和 REPLY。也就是说 ARP 协议的包大体分为两类,我们一一来看.

REQUEST

ARP Request Packet
这个包对应的二进制数据为:
00 01 08 00 06 04 00 01 dc a3 33 c4 1e 5a c0 a8
01 01 00 00 00 00 00 00 c0 a8 01 65

  1. 首先,我们看到 Wireshark 抓到的这个包中确实有9个字段,与我们上图中给出的 ARP 包结构完全吻合,并一一对应.
  2. Hardware type: Enternet(1) 该字段对应于 ar$hdr, 表明当前硬件地址的类型为 Ethernet 物理地址类型
  3. Protocol type: IPv4(0x0800) 该字段对应于 ar$pro, 表明网络层协议为 IP 协议,也就是说这个 ARP 请求包是为了完成将一个 IP 地址解析为物理地址的工作.
  4. Hardware size: 6 该字段对应于 ar$hln, 表明物理地址的长度, 这里 6 的单位为 byte,而不是 bit,需要注意.
  5. Protocol size: 4 该字段对应于 ar$pln, 表明网络层协议的长度, 这里 4 的单位为 byte,而不是 bit,需要注意.
  6. Opcode:request(1) 该字段对应于 ar$op, 表明当前 ARP 包的类型。这里,这个 ARP 包是一个请求包.
  7. Sender MAC Address: 该字段对应于 ar$sha, 表明发送这个ARP 请求包的网络节点的物理地址.
  8. Sender IP Address: 该字段对应于 ar$spa, 表明发送这个ARP 请求包的网络节点的网络层地址. 这里应为网络层协议为 IP 协议,因此这里是一个 IP 地址. 自然,不同的网络层协议实现的 ARP 协议,这个字段的长度和值是不同的.
  9. Target MAC Address: 该字段对应于 ar$tha,应为这个 ARP 包是一个请求包且当前网络节点不知道目的地址的物理地址,因此此处填上全0来占位.
    10.Target IP Address: 该字段对应于 ar$tpa, 表明想要将该IP地址解析为物理层地址.

总结:

  1. 这个 ARP 请求包想要解析 IP 地址 “192.168.1.101” 对应的物理地址
  2. 至于 arhln和arhln 和 arhlnarpln 的必要性,我们解释一下: ARP 协议用来完成将网络层协议地址解析为物理层地址的功能,而正如我们前文提到的,不同的网络层协议的地址长度是不同的,因此我们需要这两个字段来表明地址的长度。 只有这样,在接收者收到这个 ARP 请求时,才能正确的解析出来.
  3. 往往,ARP 请求都是以广播的形式发送。因为在发送这个 ARP 请求的时候,发送节点并不知道接收方的物理层地址.
REPLY

ARP Reply Packet
这个包对应的二进制数据为:
00 01 08 00 06 04 00 02 98 fa 9b 17 a8 f8 c0 a8
01 65 dc a3 33 c4 1e 5a c0 a8 01 01

  1. 在接收到 ARP 请求之后,接收者会比较这个ARP 请求中的网络层地址与自身的网络地址是否一致。如果一致,就使用自己的物理层地址构建一个 ARP Reply 包来响应这个请求。
  2. 这里,这个响应不再需要以广播的形式发送,因为在接收到的 ARP 请求包中包含了发送方的物理层地址,因此可以直接将响应发送给该网络节点.

END!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协议簇:IPv4 解析

简介 IP 是一种无连接的协议. 操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包。 尽最大努力意味着: IP 协议不保证数据的可靠传输, 没有流量控制机制, 不保证传输序列(意味着 IP 数据包会在传输过程中乱序), 没有…

协议簇:ICMP 解析

简介 ICMP 是 Internet Control Message Protocol 的简写. 它主要用来调试网络通信环境中存在的问题. 比如,当 IP 数据包总是无法正常的发送到目的地址, 当网关没有足够的 buffer 来转发对应的数据包 等问题. 值得一提的是,它属于网络层,不属…

协议簇:TCP 解析: 基础

简介 本文我们将从 RFC 学习一下 RFC793 中描述的 TCP 协议. 这将区别于通常讲解计算机网络书籍中所描述的 TCP. 但他们必然是相统一的,不会互相冲突. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议…

协议簇:TCP 解析: 建立连接

简介 接前文 协议簇:TCP 解析: 基础, 我们这篇文章来看看 TCP 连接建立的过程,也就是众所周知的”三次握手“的具体流程. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议簇&a…

协议簇:TCP 解析: 连接断开

简介 接前文 协议簇:TCP 解析: 建立连接, 我们这篇文章来看看 TCP 连接断开的过程,也就是众所周知的”四次挥手“的具体流程. 系列文章 协议簇:TCP 解析:基础 协议簇:TCP 解析:建立连接 协议…

协议簇:TCP 解析: Sequence Number

简介 序列号(Sequence Number) 是 TCP 协议中非常重要的一个概念,以至于不得不专门来学习一下。这篇文章我们就来解开他的面纱. 在 TCP 的设计中,通过TCP协议发送的每个字节都对应于一个序列号. 由于每个字节都有自己的序列号&a…

CodeTank iOS App Technical Support

CodeTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots

CentOS 7 防火墙命令

查看防火墙状态 systemctl status firewalld如果已经开启,状态为 active 如果未开启,状态为 inactive 开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld查看当前防火墙的配置 firewall-cmd --list-all这里,我…

QTcpSocket connectToHost 建立连接速度慢问题

问题场景 在使用 QT 开发一个客户端 App 的时候,我们通过 QTcpSocket 与后台服务器进程通信。 后台程序使用其他语言编写。 问题: 在客户端启用之后尝试建立与后台程序的 TCP 连接的时候,发现连接速度非常慢(肉眼可见的慢&#x…

GTank iOS App Technical Support

GTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots ​​

证书体系: CSR 解析

原文同时发布于本人个人博客: https//kutank.com/blog/cert-csr/ 简介 CSR 全称 “证书签名请求”(Certificate Signing Request). 本文我们将来详细的学习 CSR 的知识,重点集中在 CSR 所包含的信息,及其意义。 CSR 的作用: CSR 通常由想要获…

模拟网页行为之工具篇二

先说360浏览器,打开开发者选项,可以看到界面提供了几个功能选项,如图: 这个图片的第一个搜索图标点中过后,再去选中网页你感兴趣的部分就可以在Element选项中跳转到你感兴趣的代码。也可以直接ctrlF2搜寻你感兴趣网页元…

模拟网页行为之实践篇三

现在来谈下验证码图片的获取方式,带有验证码的地方都会附带有个刷新按钮,而刷新按钮的地方就是获取验证码网址代码。如果看过前面写的《模拟网页行为之工具篇》就会很容易定位到代码位置。定位到代码位置后看下图: 基本可以看到的是获取验证码…

SHA-256算法实现

SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512-bit 分组进行处理,产生 的输出是一个256-bit 的报文摘要。该算法处理包括以下几步: STEP1:附加填充比特。对报文进行填充使报文长度与448 模512 同余(长度…

ecc算法入门介绍

一、从平行线谈起。 平行线,永不相交。没有人怀疑把:)不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交了?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行…

Intel Hex概述

什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器…

AndroidStudio+ideasmali动态调试smali汇编

0x00 前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了。后来知道IDEA用一款插件也可以实现smali的动态调试&a…

使用IDA Pro动态调试SO文件

(1)在IDA的安装路径中找到android_server文件。 (2)将android_server拷贝到手机的/data/local/tmp目录下面。 (3) 将手机插上电脑,打开命令提示符, 先输入”adb shell”,然后输入”…

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作(大数据处理)主要是.split和re.findall和glob.glob运用。 读取文件的路径(为了获得文件内容)和提取文件路径中感兴趣的东西(标签) 1,“glob.glob”用于读取文件路径 2,“.…

Android系统架构图

一、Aplications(应用层) 应用是用Java语言编写的云新在虚拟机上的程序。 二、Application Framework(应用框架层) 这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。 V…