• 链路层是经过单一链路通信的协议层。
  • 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

一个直接交付的操作:

  1. 应用程序是一个外部浏览器调用一个函数来解析URL,看他是否包含主机名。这里不是这种情况,而是一个IPv4地址。
  2. 程序使用TCP协议建立一条连接。通过向目的地址发送一个IPv4数据包TCP尝试向远程主机发送一个连接请求(SYN)。
  3. 假设发送主机与目的IP地址,具有相同的网络前缀,这意味着数据报可以直接发送到这个地址而不经过任何路由器。
  4. 假设链路层使用的是以太网地址。则发送主机必须将 32 位的IPv4目的地址转换为 48 位的以太网地址。这就是 ARP 功能
  5. 共享的链路层网段上 ARP 向所有主机发送一个称为 ARP 请求(ARP request)的以太网帧。这是被称为链路层广播。ARP 请求的内容是寻找以下问题的答案:“如果你的 IPv4 地址是 10.0.0.1,请向我回应您的 IP 地址。”
  6. 同一广播域的所有系统都可以接收到 ARP 请求。这其中可能包括根本不运行IPv4的系统,但不包括位于不同 vLAN 的系统。如果某个系统使用了这个请求内包含的 IPv4 地址,需要回应一个ARP 应答(ARP reply),这个应答的内容就是其 MAC 地址。应答通常不是广播,而是直接发送给请求的发送方。收到应答的主机学习IPv4 到 Mac 地址的映射记录在内存之后,以供以后使用(缓存)。
  7. 发送方将数据报封装在以太网帧中,使用由 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 章:地址解析协议的更多相关文章

  1. TCP/IP详解 卷1 第十九章 TCP的交互数据流

    19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...

  2. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  4. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  5. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  9. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  10. 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

随机推荐

  1. 一、Delphi中Cxgrid表格滚动条粗细设置

    1.Delphi VCL新版本的Cxgrid滚动条默认是触屏模式(如下图),很细的滚动条,在电脑版显示非常不方便. 2.如果需要改成传统的滚动条模式,需要设置一下LookAndFeel里面的Scrol ...

  2. JavaWeb基础—会话管理之Cookie

    一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...

  3. Python连接MySQL数据库执行sql语句时的参数问题

    由于工作需要,今天写了一个Python小脚本,其中需要连接MySQL数据库,在执行sql命令时需要传递参数,结果出问题了.在网上查了一下,发现有以下几种方式传递参数: 一.直接把sql查询语句完整写入 ...

  4. 2017-2018-1 20155234 实验三 实时系统及mypwd实现

    2017-2018-1 20155234实验三实时系统及mypwd实现 实验三-并发程序-1 学习使用Linux命令wc(1) 基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号 ...

  5. Node.js 从入门到茫然系列——入门篇

    在创建服务的时候,我们一般代码就是: var http = require("http"); var server = http.createServer(function(req ...

  6. mfc this指针

    知识点 this指针 this指针使用 一.this指针 this指针可以看成是实例化对象的地址.在类成员函数里访问成员变量,其实也隐含使用了this指针. 在 Tdate中this->相当于T ...

  7. c++ 文件操作 重新命名 删除

    教学内容:  l 文件重命名rename l 文件删除remove   文件重命名rename int rename( const char *oldname, const char *newname ...

  8. 7 stark组件介绍、配置、2层url

    1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(mod ...

  9. 5289: [Hnoi2018]排列

    5289: [Hnoi2018]排列 链接 分析: 首先将题意转化一下:每个点向a[i]连一条边,构成了一个以0为根节点的树,要求选一个拓扑序,点x是拓扑序中的第i个,那么价值是i*w[x].让价值最 ...

  10. cogs1885 [WC2006]水管局长数据加强版

    BZOJ卡不过灰常蛋疼(毕竟人蠢自带巨大常数 这和动态维护最小生成树很像,但加边变成了删边,似乎没法做了. 然后根据之前的套路离线做,删边变成加边,就可以做了orz 二分查找的:(慢 // It is ...