『TCP/IP详解——卷一:协议』读书笔记——11
2013-08-23 20:00:18
- 第4章 ARP:地址解析协议
- 4.1 引言

ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议。物理地址就是我们通常说的MAC地址。当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检验IP数据报中的目的IP地址。地址解析为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址。ARP为IP地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是动态完成的,一般应用程序用户或系统管理员不必关心。
RARP(Reverse Address Resolution Protocol,反向地址转换协议)是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或X终端),它需要系统管理员进行手工设置。我们在下一章进行讨论。
- 4.2 一个例子

上图是一个基本完整的通信过程,主要为了解释ARP的工作步骤。书上用
% ftp bsdi
这个命令作为示范,意思是向bsdi主机请求ftp协议链接。工作过程如下:
| 1. 应用程序FTP客户端调用函数gethostbyname(3)把主机名(bsdi)转换成32bit的IP地址。这个函数在DNS(域名系统)中称作解析器,我们将在第14章对它进行介绍。这个转换过程或者使用DNS,或者在较小网络中使用一个静态的主机文件(/etc/hosts) |
| 2. FTP客户端请求TCP用得到的IP地址建立链接 |
| 3. TCP用上一步得来的IP地址发送一份IP数据报给网络层 |
| 4. 如果主机在本地网络上(如以太网、令牌环网或点对点链接的另一端),那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络上的一台主机或路由器 |
| 5. 假定目的IP是另一个以太网,那么发送端主机必须把32bit的IP地址转换成48bit的以太网地址。从逻辑Internet地址到对应的物理硬件地址需要进行翻译。这就是ARP的功能 |
| 6. ARP发送一份称为ARP请求的以太网数据帧给以太网上的每个主机。这个过程称作广播,如图中的虚线所示。ARP请求数据帧中包含目的主机的IP地址(主机名为bsdi),其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。” |
| 7. 目的主机的ARP层收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址及对应的硬件地址 |
| 8. 收到ARP应答后,使ARP进行请求——应答交换的IP数据报现在就可以传送了 |
| 9. 发送IP数据报到目的主机 |
IP地址与MAC地址
一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,也就是MAC地址。在以太网中,我们通过 MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址:32bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。
IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IP到MAC的转换,这就是ARP, Address Resolution Protocol。ARP协议是介乎于网络层和数据链路层的一个协议。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:"谁是xxx.xxx.xxx.xxx这个IP地址的主人?"因为是广播包,所有这个局域网的主机都收到了这个ARP请求。
收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:"我是这个IP地址的主人"。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。其它的协议如IPX/SPX也有相应的协议完成这些操作。
IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用arp -a的命令查看ARP表。
Q:我们为什么一定要MAC进行通信,只有IP地址不可以吗?
A:首先,在硬件层次上进行的数据帧交换必须有正确的接口地址!这个接口地址不可以是抽象的、可以随便更改的、供网络层使用的IP地址。我们需要一个在工厂制作时就烧在网卡上的固定的物理地址。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。
- 4.3 ARP高速缓存
ARP运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中的每一项的生存时间一般为20分钟,起始时间从被创建开始算起。可以用下面命令查看ARP高速缓存。
raphael@raphael-Aspire-5741G:~$ arp -a
- 4.4 ARP的分组格式

上图为ARP请求和应答分组的格式(ARP可以用于其他类型的网络,可以解析IP地址以外的地址。紧跟着帧类型字段的前四个字段指定了最后四个字段的类型和长度)。
| 以太网首部(跟后面是脱离开的,不仅仅在ARP上有) | 6字节以太网目的地址 | 这里是下一跳的地址(目的路由器/主机的地址)。如果全为1表示广播地址,则电缆上的所有以太网接口都要接收广播的数据帧 |
| 6字节以太网源地址 | 发送端的以太网物理地址 | |
| 2字节帧类型 | 表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806 | |
| 28字节ARP请求/应答 | 2字节硬件类型 | 表示硬件地址的类型。1表示以太网地址 |
| 2字节协议类型 | 表示要映射的协议地址类型。0x0800表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的(回顾图2-1,在下面) | |
| 1字节硬件地址长度 | 对于ARP协议来说值为6(MAC地址) | |
| 1字节协议地址长度 | 对于ARP协议来说值为4(IP地址) | |
| 2字节操作字段 | 指出4种操作类型,它们是ARP请求(值为1),ARP应答(值为2),RARP请求(值为3),RARP应答(值为4)。这个字段是必需的,因为ARP请求和ARP应答的帧类型字段值是相同的 | |
| 6字节发送端以太网地址 | 不解释了。这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址 | |
| 4字节发送端IP地址(协议地址) | ||
| 6字节目的以太网地址 | ||
| 4字节目的以太网IP地址(协议地址) | ||
| 对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去 | ||

『TCP/IP详解——卷一:协议』读书笔记——11的更多相关文章
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 『TCP/IP详解——卷一:协议』读书笔记——18
2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...
- 『TCP/IP详解——卷一:协议』读书笔记——15
2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...
- 『TCP/IP详解——卷一:协议』读书笔记——14
2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...
- 『TCP/IP详解——卷一:协议』读书笔记——13
2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...
- 『TCP/IP详解——卷一:协议』读书笔记——07
2013-08-20 17:51:49 第三章 IP:网际协议 3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP和IGMP数据都以IP数据报格式传输.再来看一下图 ...
- 『TCP/IP详解——卷一:协议』读书笔记——06
2013-08-20 14:41:01 2.8 最大传输单元MTU MTU,最大传输单元:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节.这个不同网络对应的传输上限 ...
- 『TCP/IP详解——卷一:协议』读书笔记——05
2013-08-19 22:35:57 2.6 PPP:点对点协议 PPP点对点协议修改了SLIP协议中的所有缺陷: 1. 在串联链路上封装IP数据报的方法.PPP即支持数据为8位&无奇偶检验 ...
随机推荐
- 【python】迭代器&生成器
源Link:http://www.cnblogs.com/huxi/archive/2011/07/01/2095931.html 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素 ...
- linux命令(8):cp 命令
cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...
- lucene写索引出现锁文件的原因之一
lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文 ...
- thinkphp 验证
//YongHuModel.class.php namespace Home\Model; use Think\Model; class YongHuModel exstends Model { pr ...
- Unity开发心路历程——制作画板
有人说 编程是份很无聊的工作 因为整个工作时间面对的都是电脑这种机器 因为眼睛盯着的内容都是索然无味的代码 因为总是会有意想不到的bug让你怀疑自己的智商 而我认为 编程是件及其有意思的事情 可观的收 ...
- ajax将json写到table中去
查询条件: <table style="width: 100%;border-collapse: collapse;" > <tr> <th styl ...
- KVC 与 KVO
一.Key-Value Coding (KVC)键值编码 KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC ...
- CSS3径向渐变----大鱼吃小鱼之孤单的大鱼
最近迷恋上了钓鱼,可是总钓不到大鱼,所以就画条大鱼来安慰一下我这柔弱的心灵. 先上图: 上面这个就是今晚上我要跟大家分享的小DEMO,我给他起名字就“大鱼吃小鱼之孤单的大鱼”. 转入正题,这条大鱼分为 ...
- Java Reflection
Java语言的反射机制 1. Java反射的含义:获取应用中正在运行的Java对象. 2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性.方法以及构造函数,对于任意对象都可 ...
- 122. Best Time to Buy and Sell Stock(二) leetcode解题笔记
122. Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price ...