《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 ...
随机推荐
- HBase--大数据系统的数据库方案
本文主要围绕以下三方面来讨论HBase:是什么.为什么.怎样做. 1. 什么是HBase HBase是一个开源的.分布式的.非关系型数据库,其设计思想来源于Google的Big Table.通过集群管 ...
- windows从0开始学golang--0--安装golang+git+自己写包
windows下 1.安装golang 2.安装git(主要是go get 引用git上的包) 3. 使用默认安装生成的目录 pkg:包含包对象,编译好的库文件 src:包含 Go 源文件,注意:你 ...
- 用NI的数据采集卡实现简单电子测试之6——数字I/O及测试平台
本文从本人的163博客搬迁至此. 前面几个例子介绍了NI数据采集卡的模拟输入和输出功能,本例则集中介绍USB-6009的数字输入输出功能.本例包括基本数字IO电路及在LabVIEW中控制USB-600 ...
- 十张图了解Docker【转】
这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别. 当我对Docker技术还是一知半解的时候,我 ...
- Linux入门第一天——环境搭建补充内容(xshell与虚拟机等操作)
一.xShell的安装和使用 前往官网下载一个个人版的 xShell :https://www.netsarang.com/products/xsh_overview.html 要更换免费版的putt ...
- 【转载】COM 组件设计与应用(十五)——连接点(vc6.0)
原文:http://vckbase.com/index.php/wv/1256.html 一.前言 上回书介绍了回调接口,在此基础上,我们理解连接点就容易多了. 二.原理 图一.连接点组件原理图.左侧 ...
- 4 CRM-权限管理rbac、github代码
1.引入权限组件rbac 1.settings配置app.中间件 INSTALLED_APPS = [ ... ... 'crm.apps.CrmConfig', "stark.apps.S ...
- codechef FEB19 Manhattan Rectangle
Manhattan Rectangle 链接 题意: 交互题,询问小于7次,确定一个矩形的位置,每次询问一个点到矩形的曼哈顿距离. 分析: 询问三个顶点,然后解一下方程,求出一个边界,就好办了. 用s ...
- let和var定义变量的区别
使用 let 语句声明一个变量,该变量的范围限于声明它的块中. 可以在声明变量时为变量赋值,也可以稍后在脚本中给变量赋值. 使用 let 声明的变量,在声明前无法使用,否则将会导致错误. 如果未在 ...
- .NET:关于数据模型、领域模型和视图模型的一些思考
背景 数据模型.领域模型和视图模型是“模型”的三种角色,一些架构用一种类型表示这三种角色,如:传统三层架构.也有一些架构用两种类型表示这三种角色,如:结合ORM的领域驱动架构.非常少见的场景是用三种类 ...