简介

前面的文章中,我们介绍了 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 协议的包结构比较简单,我们直接看一个例子. 通过这个例子来解析每个字段的含义:

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

REQUEST


这个包对应的二进制数据为:
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 和 arhln和arpln 的必要性,我们解释一下: ARP 协议用来完成将网络层协议地址解析为物理层地址的功能,而正如我们前文提到的,不同的网络层协议的地址长度是不同的,因此我们需要这两个字段来表明地址的长度。 只有这样,在接收者收到这个 ARP 请求时,才能正确的解析出来.
  3. 往往,ARP 请求都是以广播的形式发送。因为在发送这个 ARP 请求的时候,发送节点并不知道接收方的物理层地址.
REPLY


这个包对应的二进制数据为:
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!

协议簇:Ethernet Address Resolution Protocol (ARP) 解析相关推荐

  1. 地址解析协议(Address Resolution Protocol)

    将IP地址转换成MAC地址的网络层协议 为什么需要ARP 位于网络层的主机和路由器是通过其逻辑地址标识的,在TCP/IP协议簇中,逻辑地址对应为IP地址,长度为32比特. 报文是通过物理网络送达主机和 ...

  2. ARP(Address Resolution Protocol)地址解析协议初识

    ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议.它工作在OSI七层模型的中第二层--数据链路层. 使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址 ...

  3. 地址解析协议(Address Resolution Protocol,ARP)

    1. IP地址 要说ARP,首先我们要知道IP地址的概念,IP地址是分配给主机的逻辑地址(或称协议地址),同时每个主机还有一个在子网内部唯一的MAC地址,我们把这个地址叫做物理地址或硬件地址.从网络互 ...

  4. netsh 查询mac地址_ARP(Address Resolution Protocol)地址解析协议

    当主机通过数据链路发送数据的时候,IP 数据报会先被封装为一个数据帧,而MAC 地址会被添加到数据帧的报头(链路层介绍时已讲过). ARP 便是在这个过程中通过目标主机的 IP 地址,查询目标主机的 ...

  5. 协议簇: Media Access Control(MAC) Frame 解析

    Media Access Control(MAC) Frame 解析 前言 千里之行,始于足下. 因为个人从事网络协议开发,一直想深入的学习一下协议族,从这篇开始,我将开始记录分享我学习到的网络协议相 ...

  6. ISO七层协议模型架构、各层的解析及其协议

    什么是ISO? ISO是"国际标准化组织"的英文简称,其全称是International Organization for Standardization.ISO成立于1947年2 ...

  7. ARP-Address Resolution Protocol-地址解析协议

    主要内容摘自:图解TCP/IP ARP是一种解决地址问题的协议.以目标IP地址为线索,用来定位下一个应该接受数据分包的网络设备的mac地址. 如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路 ...

  8. 【CyberSecurityLearning 11】OSI与TCP/IP协议簇以及Packet Tracer模拟器

    目录 计算机网络参考模型 一.分层模型 1.1 分层思想 1.2 OSI七层模型 1.3 OSI七层模型---->TCP/IP五层协议簇 二.数据传输过程 2.1 数据的封装与解封装过程 ​ O ...

  9. 关于TCP/IP协议簇

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个网络间实现信息传输的协议簇.TCP/IP协议严格来说 ...

最新文章

  1. 01.移动先行之谁主沉浮----我的第一个程序
  2. JVM 调优 —— 新生代 Survivor 空间不足
  3. ntellijIDEA用鼠标滚轮调整代码文字大小
  4. 八十五、再探希尔排序,桶排序,计数排序和基数排序
  5. boost::endian模块实现reverse的测试程序
  6. [PY3]——内置数据结构(4)——字符串格式化(format)
  7. java更新数据库错误就回滚_Java 中对数据库操作时的 回滚
  8. 注意力机制 神经网络_图注意力网络(GAT)
  9. linux来源usb驱动在哪下载,Linux USB驱动程序基础
  10. Centos 7.3 搭建php7,mysql5.7,nginx1.10.1,redis
  11. 华为机试HJ9:提取不重复的整数
  12. 7-22 切分表达式——写个tokenizer吧 (20 分)
  13. MySQL数据库基础命令
  14. 微信小程序请求本地服务器测试成功
  15. 百度网盘突破下载限速
  16. OpenCv之黑白上色小技巧,奥黛丽赫本神颜,超惊艳滴~
  17. PD QC充电器XP06诱骗取电9V 12V 15V 20V原理
  18. Lumion 11软件介绍
  19. Excel使用之时间相加减(精确到毫秒)
  20. 敲代码时如何快速移动光标_如何用 罗技蓝牙键盘 K380在手机上打字编辑发布头条文章...

热门文章

  1. JAVA设计模式之单例设计模式
  2. angular element()
  3. 初探弹出层的实现原理
  4. 电脑常用操作 (1)
  5. textbox回车事件中拿不到text的处理办法(wpf)
  6. 【转】android通讯录列表,A~Z字母提示view
  7. android 自定义 radiobutton 文字颜色随选中状态而改变
  8. 图灵2008年12月出版的计算机图书
  9. linux的基础知识——模型结构和数据包的封装
  10. python-迭代器和生成器