《TCPIP详解卷一》第四章(ARP地址解析协议)学习笔记

4.1引言

当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的I P地址。所以就有了ARP协议,为这两种不同的地址形式提供映射。

本章及下一章我们要讨论的两种协议:A RP(地址解析协议)和R A R P(逆地址解析协议)

A R P为I P地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是自动完成的,一般应用程序用户或系统管理员不必关心。

R A R P是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或X终端),它需要系统管理员进行手工设置

 

4.2一个例子

命令:% ftp heyong

具体过程如下图:

具体步骤描述如下:

(1)FTP客户端调用函数g e t h o s t b y n a m e()把主机名(heyong)转换成32 bit的IP地址。这个函数在D N S(域名系统)中称作解析器,我们将在第1 4章对它进行介绍。这个转换过程或者使用DNS,或者在较小网络中使用一个静态的主机文件(/e t c / h o s t s)。

(2)F T P客户端请求T C P使用上一步获得到的I P地址建立连接。

(3)T C P发送一个连接请求分段到远端的主机,即用上述I P地址发送一份I P数据报

(4)如果目的主机在本地网络上(如以太网、令牌环网或点对点链接的另一端),那么I P数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过I P选路函数来确定位于本地网络上的下一站路由器地址,并让它转发I P数据报。在这两种情况下,I P数据报都是被送到位于本地网络上的一台主机或路由器

         (5)假定是一个以太网,那么发送端主机必须把32 bit的I P地址变换成48 bit的以太网地址。从逻辑I n t e r n e t地址到对应的物理硬件地址需要进行翻译。这就是A R P的功能。A R P本来是用于广播网络的,有许多主机或路由器连在同一个网络上。

(6)A R P发送一份称作A R P请求的以太网数据帧给以太网上的每个主机。这个过程称作广播。A R P请求数据帧中包含目的主机的IP地址(主机名为heyong),其意思是“如果你是这个I P地址的拥有者,请回答你的硬件地址。

(7)目的主机的A R P层收到这份广播报文后,识别出这是发送端在寻问它的I P地址,于是发送一个A R P应答。这个A R P应答包含I P地址及对应的硬件地址

(8)收到A R P应答后,使A R P进行请求—应答交换的I P数据报现在就可以传送了。

(9)发送I P数据报到目的主机。

内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。A R P的功能是在32 bit的I P地址和采用不同网络技术的硬件地址之间提供动态映射。

点对点链路不使用A R P。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的I P地址。像以太网地址这样的硬件地址并不涉及。

 

4.3 ARP高速缓存

A R P高效运行的关键是由于每个主机上都有一个A R P高速缓存。这个高速缓存存放了最近I n t e r n e t地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为2 0分钟,起始时间从被创建时开始算起。

我们可以用a r p命令来检查ARP高速缓存。参数-a的意思是显示高速缓存中所有的内容。

命令:% arp -a

sun (140.252.13.33) at 8:0:20:3:f6:42

svr4 (140.252.13.34) at 0:0:c0:c2:9b:26

48 bit的以太网地址用6个十六进制的数来表示,中间以冒号隔开。

 

4.4 ARP的分组格式

A R P请求和应答分组的格式如下图,A R P可以用于其他类型的网络,可以解析I P地址以外的地址。紧跟着帧类型字段的前四个字段指定了最后四个字段的类型和长度。

以太网的源地址和目的地址:目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。

         帧类型:表示后面数据的类型。对于AR P请求或应答来说,该字段的值为0 x 0 8 0 6。

形容词h a r d w a r e (硬件)和p r o t o c o l (协议):用来描述A R P分组中的各个字段。例如,一个A R P请求分组询问协议地址(这里是I P地址)对应的硬件地址(这里是以太网地址)。

硬件类型:表示硬件地址的类型。它的值为1即表示以太网地址。

协议类型:表示要映射的协议地址类型。它的值为0 x 0 8 0 0即表示I P地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同。

硬件地址长度和协议地址长度:分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上I P地址的A R P请求或应答来说,它们的值分别为6(48bit)和4(32bit)。

         OP字段:操作字段指出四种操作类型,它们是A R P请求(值为1)、A R P应答(值为2)、R A R P请求(值为3)和R A R P应答(值为4)(我们在第5章讨论R A R P)。这个字段必需的,因为A R P请求和A R P应答的帧类型字段值是相同的。

接下来的四个字段:是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(I P地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和A R P请求数据帧中都有发送端的硬件地址。

对于一个A R P请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的A R P请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。

 

4.6 ARP代理

A R P请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托AR P或A R P代理(Proxy ARP)。这样可以欺骗发起A R P请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。

路由器的功能相当于目的主机的代理,把分组从其他主机转发给它

A R P代理也称作混合A R P(p r o m i sc u o u s A R P)或ARP 出租(ARP hack)。这些名字来自于A R P代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。

 

4.7免费ARP

另一个A R P特性称作免费ARP(gratuitous ARP)。它是指主机发送A R P查找自己的I P地址。通常,它发生在系统引导期间进行接口配置的时候。

免费A R P可以有两个方面的作用:

1) 一个主机可以通过它来确定另一个主机是否设置了相同的I P地址。主机b s d i并不希望对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息“以太网地址:a : b : c : d : e : f发送来重复的I P地址”。这样就可以警告系统管理员,某个系统有不正确的设置。

2) 如果发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的

更新。一个比较著名的A R P协议事实是,如果主机收到某个I P地址的A R P请求,而且它已经在接收者的高速缓存中,那么就要用A R P请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何A R P请求都要完成这个操作(A R P请求是在网上广播的,因此每次发送A R P请求时网络上的所有主机都要这样做)。

 

4.8 arp命令

arp –a //显示A R P高速缓存中的所有内容

arp –d  //删除A R P高速缓存中的某一项内容

arp –s  //增加高速缓存中的内容,这个参数需要主机名和以太网地址:对应于主机名的I P

                   地址和以太网地址被增加到高速缓存中。新增加的内容是永久性的(比如,它没有

超时值),除非在命令行的末尾附上关键字t e m p。

 

《TCP/IP详解·3:TCP事务协议、HTTP、NNTP和UNIX域协议》是“TCP/IP详解系列”的延续。主要内容包括:TCP事务协议,即T/TCP,这是对TCP的扩展,使客户-服务器事务更快、更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。《TCP/IP详解·3:TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现细节,并参考引用了2中的大量源程序。适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目录: 前言 第一部分 CP事务协议 第1章 /CP概述 1.1 概述 1.2 UDP上的客户-服务器 1.3 CP上的客户-服务器 1.4 /CP上的客户-服务器 1.5 测试网络 1.6 时间测量程序 1.7 应用 1.8 历史 1.9 实现 1.10 小结 第2章 /CP协议 2.1 概述 2.2 /CP中的新CP选项 2.3 /CP实现所需变量 2.4 状态变迁图 2.5 /CP的扩展状态 2.6 小结 第3章 /CP使用举例 3.1 概述 3.2 客户重新启动 3.3 常规的/CP事务 3.4 服务器收到过时的重复SY 3.5 服务器重启动 3.6 请求或应答超出报文段最大长度MSS 3.7 向后兼容性 3.8 小结 第4章 /CP协议(续) 4.1 概述 4.2 客户的端口号和IME_WAI状态 4.3 设置IME_WAI状态的目的 4.4 IME_WAI状态的截断 4.5 利用A跳过三次握手 4.6 小结 第5章 /CP协议的实现:插口层 5.1 概述 5.2 常量 5.3 ssed函数 5.4 小结 第6章 /CP的实现:路由表 6.1 概述 6.2 代码介绍 6.3 radix_de_head结构 6.4 rery结构 6.5 r_merics结构 6.6 i_iihead函数 6.7 i_addrue函数 6.8 i_marue函数 6.9 i_clsrue函数 6.10 i_rqim函数 6.11 i_rqkill函数 6.12 小结 第7章 /CP实现:协议控制块 7.1 概述 7.2 i_pcbladdr函数 7.3 i_pcbcec函数 7.4 小结 第8章 /CP实现: CP概要 8.1 概述 8.2 代码介绍 8.3 CP的prsw结构 8.4 CP控制块 8.5 cp_ii函数 8.6 cp_slwim函数 8.7 小结 第9章 /CP实现:CP输出 9.1 概述 9.2 cp_upu函数 9.2.1 新的自动变量 9.2.2 增加隐藏的状态标志 9.2.3 在SY_SE状态不要重传SY 9.2.4 发送器的糊涂窗口避免机制 9.2.5 有RS或SY标志时强制发送报文段 9.2.6 发送MSS选项 9.2.7 是否发送时间戳选项 9.2.8 发送/CP的CC选项 9.2.9 根据CP选项调整数据长度 9.3 小结 第10章 /CP实现:CP函数 10.1 概述 10.2 cp_ewcpcb函数 10.3 cp_rlkup函数 10.4 cp_geacache函数 10.5 重传超时间隔的计算 10.6 cp_clse函数 10.7 cp_msssed函数 10.8 cp_mssrcvd函数 10.9 cp_dpis函数 10.10 cp_reass函数 10.11 小结 第11章 /CP实现:CP输入 11.1 概述 11.2 预处理 11.3 首部预测 11.4 被动打开的启动 11.5 主动打开的启动 11.6 PAWS:防止序号重复 11.7 ACK处理 11.8 完成被动打开和同时打开 11.9 ACK处理(续) 11.10 FI处理 11.11 小结 第12章 /CP实现:CP用户请求 12.1 概述 12.2 PRU_CEC请求 12.3 cp_cec函数 12.4 PRU_SED和PRU_SED_EF请求 12.5 cp_usrclsed函数 12.6 cp_syscl函数 12.7 /CP的前景 12.8 小结 第二部分 CP的其他应用 第13章 HP:超文本传送协议 13.1 概述 13.2 HP和HML概述 13.3 HP 13.3.1 报文类型:请求与响应 13.3.2 首部字段 13.3.3 响应代码 13.3.4 各种报文头举例 13.3.5 例子:客户程序缓存 13.3.6 例子:服务器重定向 13.4 一个例子 13.5 HP的统计资料 13.6 性能问题 13.7 小结 第14章 在HP服务器上找到的分组 14.1 概述 14.2 多个HP服务器 14.3 客户端SY的到达间隔时间 14.4 R的测量 14.5 用lise设置入连接队列的容量 14.6 客户端的SY选项 14.7 客户端的SY重传 14.8 域名 14.9 超时的持续探测 14.10 /CP路由表大小的模拟 14.11 mbuf的交互 14.12 CP的PCB高速缓存和首部预测 14.13 小结 第15章 P:网络新闻传送协议 15.1 概述 15.2 P 15.3 一个简单的新闻客户 15.4 一个复杂的新闻客户 15.5 P的统计资料 15.6 小结 第三部分 Uix域协议 第16章 Uix域协议:概述 16.1 概述 16.2 用途 16.3 性能 16.4 编码举例 16.5 小结 第17章 Uix域协议:实现 17.1 概述 17.2 代码介绍 17.3 Uix dmai和prsw结构 17.4 Uix域插口地址结构 17.5 Uix域协议控制块 17.6 uipc_usrreq函数 17.7 PRU_AACH请求和up_aach函数 17.8 PRU_DEACH请求和up_deach函数 17.9 PRU_BID请求和up_bid函数 17.10 PRU_CEC请求和up_cec函数 17.11 PRU_CEC2请求和up_cec2函数 17.12 sckepair系统调用 17.13 pipe系统调用 17.14 PRU_ACCEP请求 17.15 PRU_DISCEC请求和up_discec函数 17.16 PRU_SHUDW请求和up_shudw函数 17.17 PRU_ABR请求和up_drp函数 17.18 其他各种请求 17.19 小结 第18章 Uix域协议:I/和描述符的传递 18.1 概述 18.2 PRU_SED和PRU_RCVD请求 18.3 描述符的传递 18.4 up_ieralize函数 18.5 up_exeralize函数 18.6 up_discard函数 18.7 up_dispse函数 18.8 up_sca函数 18.9 up_gc函数 18.10 up_mark函数 18.11 性能(再讨论) 18.12 小结 附录A 测量网络时间 附录B 编写/CP应用程序 参考文献
编辑推荐 本书是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以动态方式讲述TCP/IP的知识,使读者可以轻松掌握TCP/IP的知识:路由协议、寻址协议、组控制协议、简单邮件传输协议等。全书内容实用性强,是在校生学习TCP/IP知识的良师益友。 内容简介  《TCP/IP详解1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。 作者简介 W.Richard Stevens(1951-1999)是一位非常受人尊敬的专家,除了《TCP/IP详解》三本外,他还有其他两部最为畅销的作品:《UNIX环境高级编程》和《UNIX网络编程》(两本)。 目录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 1.13 互联网 12 1.14 实现 12 1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口 20 2.8 最大传输单元MTU 21 2.9 路径MTU 21 2.10 串行线路吞吐量计算 21 2.11 小结 22 第3章 IP:网际协议 24 3.1 引言 24 3.2 IP首部 24 3.3 IP路由选择 27 3.4 子网寻址 30 3.5 子网掩码 32 3.6 特殊情况的IP地址 33 3.7 一个子网的例子 33 3.8 ifconfig命令 35 3.9 netstat命令 36 3.10 IP的未来 36 3.11 小结 37 第4章 ARP地址解析协议 38 4.1 引言 38 4.2 一个例子 38 4.3 ARP高速缓存 40 4.4 ARP的分组格式 40 4.5 ARP举例 41 4.5.1 一般的例子 41 4.5.2 对不存在主机的ARP请求 42 4.5.3 ARP高速缓存超时设置 43 4.6 ARP代理 43 4.7 免费ARP 45 4.8 arp命令 45 4.9 小结 46 第5章 RARP:逆地址解析协议 47 5.1 引言 47 5.2 RARP的分组格式 47 5.3 RARP举例 47 5.4 RARP服务器的设计 48 5.4.1 作为用户进程的RARP服务器 49 5.4.2 每个网络有多个RARP服务器 49 5.5 小结 49 第6章 ICMP:Internet控制报文协议 50 6.1 引言 50 6.2 ICMP报文的类型 50 6.3 ICMP地址掩码请求与应答 52 6.4 ICMP时间戳请求与应答 53 6.4.1 举例 54 6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号SLIP链路 65 7.3 IP记录路由选项 65 7.3.1 通常的例子 66 7.3.2 异常的输出 68 7.4 IP时间戳选项 69 7.5 小结 70 第8章 Traceroute程序 71 8.1 引言 71 8.2 Traceroute 程序的操作 71 8.3 局域网输出 72 8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute程序示例 78 8.5.2 严格的源站选路的traceroute程序示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值