微网站预览,哈尔滨建筑工程,个人网站模板html下载,中国民航机场建设集团公司网站简介
前面的文章中#xff0c;我们介绍了 MAC Frame 的帧格式。我们知道#xff0c;在每个 Ethernet Frame 中都分别包含一个 48 bit 的源物理地址和目的物理地址. 对于源地址很容易理解#xff0c;该地址可以直接从硬件上读取. 但是对于一个网络节点#xff0c;他怎么知道…简介
前面的文章中我们介绍了 MAC Frame 的帧格式。我们知道在每个 Ethernet Frame 中都分别包含一个 48 bit 的源物理地址和目的物理地址. 对于源地址很容易理解该地址可以直接从硬件上读取. 但是对于一个网络节点他怎么知道一个 Frame 的目的物理地址呢? 本文我们将学习 ARP 协议来解答这个问题. ARP 协议主要用来完成将网络层协议的地址(比如IP 地址)解析为物理地址的工作. 为什么需要将网络层协议的地址转换为物理地址呢
对于物理层来说他仅仅能处理 48 bit 的物理地址而网络层协议往往有自己协议中定义的协议地址而这些协议的地址往往都不一样. 比如, IP 地址的长度为 32 bitCHAOS 地址的长度为 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
首先我们看到 Wireshark 抓到的这个包中确实有9个字段与我们上图中给出的 ARP 包结构完全吻合并一一对应.Hardware type: Enternet(1) 该字段对应于 ar$hdr, 表明当前硬件地址的类型为 Ethernet 物理地址类型Protocol type: IPv4(0x0800) 该字段对应于 ar$pro, 表明网络层协议为 IP 协议也就是说这个 ARP 请求包是为了完成将一个 IP 地址解析为物理地址的工作.Hardware size: 6 该字段对应于 ar$hln, 表明物理地址的长度, 这里 6 的单位为 byte而不是 bit需要注意.Protocol size: 4 该字段对应于 ar$pln, 表明网络层协议的长度, 这里 4 的单位为 byte而不是 bit需要注意.Opcoderequest(1) 该字段对应于 ar$op, 表明当前 ARP 包的类型。这里这个 ARP 包是一个请求包.Sender MAC Address: 该字段对应于 ar$sha, 表明发送这个ARP 请求包的网络节点的物理地址.Sender IP Address: 该字段对应于 ar$spa, 表明发送这个ARP 请求包的网络节点的网络层地址. 这里应为网络层协议为 IP 协议因此这里是一个 IP 地址. 自然不同的网络层协议实现的 ARP 协议这个字段的长度和值是不同的.Target MAC Address: 该字段对应于 ar$tha应为这个 ARP 包是一个请求包且当前网络节点不知道目的地址的物理地址因此此处填上全0来占位. 10.Target IP Address: 该字段对应于 ar$tpa, 表明想要将该IP地址解析为物理层地址.
总结
这个 ARP 请求包想要解析 IP 地址 “192.168.1.101” 对应的物理地址至于 arhln和arhln 和 arhln和arpln 的必要性我们解释一下: ARP 协议用来完成将网络层协议地址解析为物理层地址的功能而正如我们前文提到的不同的网络层协议的地址长度是不同的因此我们需要这两个字段来表明地址的长度。 只有这样在接收者收到这个 ARP 请求时才能正确的解析出来.往往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
在接收到 ARP 请求之后接收者会比较这个ARP 请求中的网络层地址与自身的网络地址是否一致。如果一致就使用自己的物理层地址构建一个 ARP Reply 包来响应这个请求。这里这个响应不再需要以广播的形式发送因为在接收到的 ARP 请求包中包含了发送方的物理层地址因此可以直接将响应发送给该网络节点.
END!