【反向地址转换协议】1.介绍
有些网络主机,例如无盘工作站,在启动的时候通常不知道协议地址,它们只知道
硬件接口地址 。为了使用象IP这样的高层协议进行通讯,它们必须从外部来发现它们的
协议地址 。我们的问题是没有标准机制来做这些 。
Plummer的“地址转换协议”(ARP)[1]被设计用来解决一个相关的问题:给定主机
的协议地址得到它的硬件地址 。这篇RFC提出了“反向地址转换协议” 。和ARP一样,
我们假设一种广播介质,例如以太网 。
2.设计考虑
以下的考虑指导我们对RARP协议的设计 。
A. ARP和RARP是不同的操作 。ARP假设每一个主机都知道它的硬件地址和协
议地址间的映射 。一个小缓存存放了收集到的关于其他主机的信息 。所有的主机在
状态上是平等的,没有客户机和服务器的区别 。
另一方面,RARP需要一个或者更多的服务器主机来维护一个存有从硬件地址
到协议地址的映射的数据库,并对客户机的请求作出应答 。
B. 前面提到RARP需要维护大数据库的服务器主机,这并不是所希望的,在某
些情况下不可能在操作系统的内核中维护这样一个数据库 。因此,大多数实现需要
和内核外的程序做某种形式的互操作 。
C. 实现的简单和对已存在主机软件影响最小是重要的,设计一个需要改变每一个
主机的软件(而不管其是否参与)的协议是错误的 。
D. 为了最小化开发成本和费用,希望考虑和已有软件共享代码的可能性 。
3.推荐协议
我们建议RARP作为数据链路层单独的协议 。例如,假如介质使用以太网,RARP
包和ARP包将有不同的以太网类型 。这意味着ARP和RARP是两种不同的操作,所有
的主机并不平等地支持它们 。对已存在系统的影响也最小,已有的ARP服务器不会被
ARP包弄糊涂 。它把RARP看作一个能把硬件地址映射到任何高层协议地址的常用工
具 。
这个方法使RARP客户端主机的实现最简单,但同时也使得RARP服务器端主机的
实现很困难 。然而这种困难是没办法的,从附录A中描述的4.2BSDUnix下两种可能的
实现就可以看出 。
RARP使用和ARP相同的包格式 。
ar$hrd(硬件地址空间)16比特
ar$pro(协议地址空间)16比特
ar$hln(硬件地址长度)8比特
ar$pln(协议地址长度)8比特
ar$op(操作码)16比特
ar$sha(源硬件地址)n比特,n来自ar$hln字段
ar$spa(源协议地址)m比特,m来自ar$pln字段
ar$tha(目的硬件地址)n比特
ar$tpa(目的协议地址)m比特
ar$hrd、ar$pro、ar$hln和ar$pln与ARP相同(见[1]) 。
例如,假设硬件地址是48比特以太网地址,协议地址是32比特Internet地址,我
们希望决定对应已知的以太网地址的Internet地址,那么在每个RARP包中,ar$hrd=1
(以太网),ar$pro=2048(IP包的以太网类型),ar$hln=6,ar$pln=4 。
有两个操作码:3(请求)和4(应答) 。1或2在[1]中有相同的意义,带有这样操
作码的包被当作ARP包通过 。带有其它操作码的包并没有定义 。和ARP一样,RARP
没有“找不到”和“错误”的包,因为许多RARP服务器可自由地应答请求 。假如经过
一段时间后,没有收到应答,RARP请求的发送者将超时 。
RARP包中ar$sha、ar$spa、ar$tha和ar$tpa字段的解释如下:
当操作码是3(请求):
ar$sha是发送者的硬件地址
ar$spa未定义
ar$tha是目的硬件地址
当发送者希望知道自己的协议地址的情况下,和ar$sha一样将是发送者
的硬件地址 。
ar$tpa未定义
当操作码是4(应答):
ar$sha是响应者的硬件地址(应答包的发送者)
ar$spa是响应者的协议地址(见下面的注重)
ar$tha是目的硬件地址,必须和请求包中得到的相同
ar$tpa是目的协议地址,即需要得到的地址 。
注重:在操作码为4的包中ar$spa字段填响应者的协议地址,只是为了方便 。例如,
系统同时使用ARP和RARP,有效的协议-硬件对(ar$spa,ar$sha)会减少以后发ARP
请求的需要 。
4.参考
[1] Plummer,D.,"AnEthernetAddressResolutionProtocol",RFC826,MIT-LCS,
November1982.
附录A.4.2BSDUnix下的两个实现例子
下面的实现描述概括了4.2BSDUnix下实现RARP服务器的两种不同方法 。
A. 提供在内核外访问数据链路层包 。RARP服务器完全在内核外实现,只在收发RARP
包时和内核进行互操作 。内核被修改成能提供接口来访问这些包,目前4.2内核只
答应访问IP包 。CMU的“包过滤”伪驱动是提供这种功能的现有机制 。它在CMU
和斯坦福实现“用户级”网络服务器排序上,使用的很成功 。
B. 在内核里维护一个数据库表项的缓存 。整个RARP服务器数据库通过一个用户进程
在内核外维护 。RARP服务器本身直接在内核中实现,并为应答维护一个小的数据
表项缓存 。这个缓存和传输ARP的相同 。这个缓存通过两个新的输入输出控制从实
际的RARP数据库得到(这像SIOCIFADDR,因为他们不直接和具体的套接字相关) 。
一种是:“睡眠直到需要进行地址转换,然后把请求直接输出到用户进程”;另一种
是:“把地址转换输入内核表” 。因此,当内核不能在缓存中发现一个表项的时候,
把这个请求放到队列中,然后调用wakeup() 。第一个输入输出控制的实现是sleep(),
从队列中取出第一项返回给用户进程,因为内核不能在中断级等待直到用户进程回
应,它或者放弃(假设请求主机一定时间后会重传请求包),或者假如第二个输入输
出控制把请求拷贝到内核,在那个时候应答 。
- excel怎么转换成pdf
- 英伟达显卡RTX 30什么时候发布 黄仁勋演讲直播时间地址
- wps表格怎么转换文本方式 wps表格怎么转换文本
- 一个域名可以对应多个ip地址吗
- 天猫超市可以改地址吗
- nove6se怎么反向充电
- 教你把硬盘分区转换为 NTFS 格式
- QQ音乐如何下载MP3格式 MP3格式转换方法分享
- 酷我音乐怎么转换格式 转换格式方法介绍
- 微信扫描图片文字转换文本
