《TCP/IP 详解 卷1:协议》第 4 章:地址解析协议
- 链路层是经过单一链路通信的协议层。
- IP 网络层协议的设计目标是为跨越不同物理类型的、多节点网络的 packet ,提供主机寻址、路由操作。
在其中要注意的一点是:网络层使用的地址和底层网络硬件使用的地址是不同的概念。网络硬件的地址是由设备制造商定义的存储在设备硬件的永久型内存中,所以它不会改变。网络接口的 IP 地址是由用户或网络管理员分配,可以按需分配、选择,而且 IP 地址可能改变。
网络接口的硬件通常有一个主要的硬件地址,例如以太网或 802.11 无线接口的 48 bits MAC 地址。由硬件交换的帧(frame)需要正确的地址定位到正确的硬件接口,否则无法传输数据。如果一个主机需要发送一个帧到另一个主机,仅知道这台主机的 IP 地址是不够的,还需要知道主机在网络中有效的硬件地址。这就需要;两个地址之间的互相转换。
对于 TCP/IP 网络,地址解析协议,ARP(Address Resolution Protocol)提供了一种在IPv4地址和各种网络技术中使用的硬件地址之间的映射。地址解析是发现两个地址之间映射关系的过程。
ARP 仅用于 IPv4。IPv6 使用的是邻居发现协议,是 ICMPv6 的一部分。
ARP 是一个通用的协议。它被设计为支持多种地址之间的映射。不过实际上它最常被用于 IPv4地址和 MAC 地址之间的映射。ARP 提供动态映射,动态这个术语是因为它会自动执行以及随时间变化不需要系统管理员重新配置,ARP 的操作通常用户或系统人员无关
直接交付
当我们使用互联网服务时,例如在浏览器中打开一个网页,本地必须确定如何与相关的服务器联系。首先判断服务器是否位于本地(即是否在同一个子网)还是远程。如果是远程的需要一台可以到达目的地的路由器。只有位于与目的地同一 IP 子网的系统时,ARP 才能工作。
直接交付(Direct delivery)发生在一个 IP 数据包被发送到一个具有与发送地址相同 IP 前缀的目的地址。即发送方跟接收方为同一子网。直接交付的示意图如下:

例如,用 Web 浏览器打开如下地址:
http://10.0.0.1
一个直接交付的操作:
- 应用程序是一个外部浏览器调用一个函数来解析URL,看他是否包含主机名。这里不是这种情况,而是一个IPv4地址。
- 程序使用TCP协议建立一条连接。通过向目的地址发送一个IPv4数据包TCP尝试向远程主机发送一个连接请求(SYN)。
- 假设发送主机与目的IP地址,具有相同的网络前缀,这意味着数据报可以直接发送到这个地址而不经过任何路由器。
- 假设链路层使用的是以太网地址。则发送主机必须将 32 位的IPv4目的地址转换为 48 位的以太网地址。这就是 ARP 功能。
- 在共享的链路层网段上 ARP 向所有主机发送一个称为 ARP 请求(ARP request)的以太网帧。这是被称为链路层广播。ARP 请求的内容是寻找以下问题的答案:“如果你的 IPv4 地址是 10.0.0.1,请向我回应您的 IP 地址。”
- 同一广播域的所有系统都可以接收到 ARP 请求。这其中可能包括根本不运行IPv4的系统,但不包括位于不同 vLAN 的系统。如果某个系统使用了这个请求内包含的 IPv4 地址,需要回应一个ARP 应答(ARP reply),这个应答的内容就是其 MAC 地址。应答通常不是广播,而是直接发送给请求的发送方。收到应答的主机学习IPv4 到 Mac 地址的映射记录在内存之后,以供以后使用(缓存)。
- 发送方将数据报封装在以太网帧中,使用由 ARP 交换学习到的一台 MAC 地址作为目的地址。直接将数据交付到正确的主机。
ARP 缓存
ARP 缓存(ARP cache)是 ARP 高效运行的关键。每个主机和路由器上有 ARP 缓存表。表存放了使用地址解析为每个接口维护从网络层地址到硬件地址的最新映射。当IP地址映射成硬件地址时,生成一个缓存表里的条目。默认到期时间是 20 分钟[RFC1122]
利用 arp -a 命令观察系统的 ARP cache。

ARP 缓存存在超时。
命令允许管理员设置缓存条目永不超时,即设置为静态。大多数实现中,完整的条目超时时间为二十分钟,不完整的条目(例如一个到不存在的主机的请求)超时时间为三分钟。
这是一个关于软状态(soft state)的重要例子。软状态是指在超时前没有更新而被丢弃的信息。如果网络条件发生改变,软状态有助于启动自动重新配置。因此很多 Internet 协议使用软状态,软状态的成本就是必须刷新状态,以避免过期。在一些协议设计中经常包括软状态刷新,以保持软状态的活跃。
ARP 帧格式

| 字段 | 长度(byte) | 内容 | 含义 |
|---|---|---|---|
| DST | 6 | ff:ff:ff:ff:ff:ff | ARP 请求默认是广播地址,同一广播域所有以太网接口都可以接受到 |
| SRC | 6 | 略 | 发送方 MAC 地址会作为 ARP 应答的目的地址 |
| Length or Type | 2 | 0x0806 | ARP 的以太网 type 是固定的 0x0806 |
| 硬件类型(Hard type) | 2 | 以太网是 1 | 硬件地址类型(链路层可能有很多不同的) |
| 协议类型(Prot type) | 2 | IPv4 是 0x0800 | 指出映射的网络层协议类型 |
| 硬件大小(Hard size) | 1 | 以太网是 6 | 硬件地址的长度,以字节为单位,MAC 地址是 8 个字节 |
| 协议大小(Prot size) | 1 | IPv4 是 4 | 网络层协议地址的长度,以字节为单位,IPv4 地址是 4 个字节 |
| 操作类型(OP) | 2 | 1~4 | 1:ARP 请求、2:ARP应答、3:RARP 请求、4:RARP 应答 |
| 发送方硬件地址 | 长度可变 | 顾名思义 | 顾名思义。紧跟在后面的四个字段是 ARP 的主要内容 |
| 发送方协议地址 | 长度可变 | 顾名思义 | 顾名思义 |
| 目的硬件地址 | 长度可变 | 顾名思义,且 ARP request 是 0 | 顾名思义 |
| 目的协议地址 | 长度可变 | 顾名思义 | 顾名思义 |
| 填充(Pad) | 长度可变 | 顾名思义 | 顾名思义 |
| FCS | 4 | 4字节循环冗余校检码(CRC) | Frame Check Sequence |
目标主机生成应答的方式就是填充自己的硬件地址,然后将两个发送方地址和两个接收方地址交换,将op字段设置为 2,然后发送自己的应答。
总结
ARP 是一个 TCP/IP 的基本协议,不过,它通常在应用程序或用户没有察觉的情况下使用和运行。ARP 用于确定本地可达的 IPv4 子网中,使用某个IPv4地址的主机对应的硬件地址。ARP 在数据报的目的地与发送方处于同一子网时发挥功效。不在同一子网,将会转发到一台路由器(详见 IP 协议)。ARP 缓存是其运行的基础,可以使用arp命令查看并处理缓存。缓存条目都有计时器。
参考链接:
The Address Resolution Protocol (ARP) is a communication protocol used for discovering the link layer address associated with a given IPv4 address, a critical function in the Internet protocol suite. ARP was defined in 1982 by RFC 826,[1] which is Internet Standard STD 37.
ARP is used for mapping a network address such as an IPv4 address, to a physical address, such as a MAC address. ARP has been implemented with many combinations of network and data link layer technologies, such as IPv4, Chaosnet, DECnet and Xerox PARC Universal Packet (PUP) using IEEE 802 standards, FDDI, X.25, Frame Relay and Asynchronous Transfer Mode (ATM). IPv4 over IEEE 802.3 and IEEE 802.11 is the most common usage.In Internet Protocol Version 6 (IPv6) networks, the functionality of ARP is provided by the Neighbor Discovery Protocol (NDP).
《TCP/IP 详解 卷1:协议》第 4 章:地址解析协议的更多相关文章
- TCP/IP详解 卷1 第十九章 TCP的交互数据流
19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...
- 《TCP/IP详解卷1:协议》第1章 概述-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
随机推荐
- 用HTML编写淘宝页面
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- 数据分析-pandas基础入门(一)
最近在学习python,所以了解了一下Pandas,Pandas是基于NumPy的一个开源Python库,它被广泛用于快速分析数据,以及数据清洗和准备等工作. 首先是安装numpy以及pandas, ...
- C# 用QQ企业邮箱发邮件
问题System.Net.Mail下的SmtpClient来发送邮件,而System.Net.Mail only仅支持Explicit SSL 不要465端口,用25,不用EnableSsl = tr ...
- Kubernetes学习之路(十八)之认证、授权和准入控制
API Server作为Kubernetes网关,是访问和管理资源对象的唯一入口,其各种集群组件访问资源都需要经过网关才能进行正常访问和管理.每一次的访问请求都需要进行合法性的检验,其中包括身份验证. ...
- 洛咕 P4304 [TJOI2013]攻击装置
把坐标按照(x+y)%2染色可以发现这是个二分图 二分图最大独立集=点数-最大匹配 于是就是个算匹配的傻逼题了 // luogu-judger-enable-o2 #include<bits/s ...
- java基础解析系列(三)---HashMap
java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- python request 以json形式发送post请求的正确的姿势
一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行,请求报头,消息主题. 以json串提交数据,编码格式: application/json, 必须加上 impor ...
- Sql-Server 邮件相关的查询和删除
-- 查询邮件发送记录和报告 SELECT TOP(50) * FROM msdb.dbo.sysmail_allitems ORDER BY mailitem_id DESC SELECT TOP( ...
- Mysql试题集锦
1.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 1 ...
- 金融科技行业 SDL(转载)
都是一些检查项,值得借鉴,关键在于要能够落地 作者 沈发挺@美的金融科技下载打印版