- 论坛徽章:
- 0
|
这是偶99年翻译的SUN的网络管理员(SA-387)的东东(2)
第三章 ARP和RARP
目标
通过本章学习,你将会掌握:
l 定义地址解析
l 能描述获得目标主机的以太网地址的过程
l 能够描述系统启动时的网络配置过程
l 能够描述用来配置网络接口的配置文件和脚本
介绍
本章的目的是来描述局域网中的主机如何通过网络地址来发送信息。解释获得目的地址的机制,和系统如何自动配置网络接口。
Address Resolution
——以太帧的封装
我们先回忆一下在数据被发送之前如何被封装到一个以太帧的过程。以太帧由地址信息段,数据段,数据类型段及错误校验段组成。
发送数据的主机必须完成帧的各个段的填写。发送主机了解它所要发送的数据,所使用的网络和传输协议,并能自动的计算一个CRC。
然而,发送主机还没有目标主机的地址……
IP头,是以太帧中的数据段的一部分,它必须包括源主机地址和目标主机地址的信息。发送主机最初通过本地数据库文件 /etc/inet/hosts来获取本机地址。
发送主机通过参考目标主机的 /etc/inet/hosts 文件或通过一个网络表(hosts,如果命名服务允许的话)来获得目标主机的地址。
发送主机完成了以太帧头的源和目标地址段。源地址很容易获取,因为它永久性的存在于本机的系统内核列表中(system kernel table)。
以太帧就要准备全了,所缺的就是目标主机的MAC地址了。
发送主机使用地址解析协议(Address Resolution Protocol(ARP))来获得目标主机的MAC地址。
地址解析协议(ARP)
ARP是一个在网络层和网络接口层建立地址连接的过程。主机用它来准备一个网络传输信息单元。
——ARP 列表(ARP Table)
ARP列表存于内存中,它存放那些被频繁请求的地址。准备传输的帧每次调用目标主机的地址时,都要查阅ARP列表。
——ARP请求(ARP Request)
如果一个MAC地址不存在于ARP列表,发送主机将它解析成一个IP地址。发送主机在本地网上发送一个广播类型的ARP请求来获取这个主机地址,与这个IP地址相符的主机响应它的MAC地址。
例如:
#snoop –v arp
Using device /dev/le (promiscuous mode)
Ether: ------------- Ether Header -------------
Ether:
Ether: Packet 1 arrived at 16:15:29.64
Ether: Packet size=42 bytes
Ether: Destination=ff:ff:ff:ff:ff:ff, (broadcast)
Ehter: Source =8:0:20:75:6e:6f, Sun
Ether: Ethertype=0806(ARP)
Ether:
ARP: --------- ARP /RARP Frame --------
ARP:
ARP: Hardware type = 1
ARP: Protocol type =0800 (IP)
ARP: Length of hardware address = 6 bytes
ARP: Length of protocol address = 4 bytes
ARP: Opcode 1 (ARP Request)
ARP: Sender’s hardware address=8:0:20:75:6e:6f
ARP: Sender’s protocol address =128.50.1.2, bear
ARP: Target hardware address=?
ARP: Target protocol address= 128.50.1.5, skunk
在这个例子中,请求主机向子网上所有使用广播地址为ff:ff:ff:ff:ff:ff的主机广播ARP请求。
包类型是一个ARP请求,它包括属于目标主机skunk(Tartget protocol address)的被请求的MAC地址(Target hardware address)。
——ARP 应答(ARP Reply)
在子网上的每个主机都接收到ARP的请求包,只有匹配目标IP地址的唯一一台主机才给源MAC地址一个应答。
#snoop –v arp
Using device /dev/le (promiscuous mode)
Ether: ------------- Ether Header -------------
Ether:
Ether: Packet 1 arrived at 16:15:29.64
Ether: Packet size=60 bytes
Ether: Destination=8:0:20:75:6e:6f, Sun
Ehter: Source =8:0:20:75:8b:59, Sun
Ether: Ethertype=0806(ARP)
Ether:
ARP: --------- ARP /RARP Frame --------
ARP:
ARP: Hardware type = 1
ARP: Protocol type =0800 (IP)
ARP: Length of hardware address = 6 bytes
ARP: Length of protocol address = 4 bytes
ARP: Opcode 2 (ARP Reply)
ARP: Sender’s hardware address=8:0:20:75:8b:59
ARP: Sender’s protocol address =128.50.1.5, skunk
ARP: Target hardware address=8:0:20:75:6e:6f
ARP: Target protocol address= 128.50.1.2, bear
ARP:
在这个例子中,应答主机发送这个ARP应答包给目标主机bear在同一子网。
包类型为ARP Reply,它包括发送主机的硬件地址,8:0:20:75:8b:59
而请求主机则使用这些信息来更新它的ARP列表。
——ARP应答缓存
请求主机接受一个ARP应答,并把它存放在一个由系统内核进行管理的临时ARP列表中,一个应答ARP请求的主机也同进更新它的请求主机的IP地址和MAC地址。
完整的入口映射IP地址到硬件(MAC)地址。不完整的入口则只包括IP地址。完整的入口有一个TTL值,是一个时间段,如果在这个有效的时间内,ARP列表的入口不能被使用,则,这个入口将被自动舍弃。
主机使用ARP列表中的这个信息来向目标主机发送包,可以避免再次向网络发送一个ARP广播包。
——ARP表管理
arp 命令显示和控制ARP表中的IP地址到MAC地址的映射的入口情况。
例如:
*要查看ARP表中的所有入口,可以:
# arp –a
Net to Media Table
Device IP Address Mask Flags Phys Addr
Le0 skunk 255.255.255.255 08:00:20:75:8b:59
Le0 bear 255.255.255.255 SP 08:00:20:75:6e:6f
Le0 zebra 255.255.255.255 U
Le0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
各字段的意义是:
l Device——网络设备(接口)
l IP Address——请求的IP地址
l Mask——应用的子网掩码,这将在后继章节讨论
l Flags——ARP入口的状态,以下是几个常用的状态列表:
* S——一个被永久保存的入口
*P——一个已发布的入口
*M——这是一个多址传输的入口,多址传输将在下一节介绍
*U——不可被解析或不完整的入口
* 要查看一个特定的ARP表入口,可以:
# arp hostname
hostname 可以是一个主机名,也可以是一个主机的IP地址。
*要增加一个永久性的ARP表入口,可以:
# arp –a hostname ethernet_address
它创建了一个永久性的入口而不管ARP表的默认的TTL值,手工填加一个ARP列表可以减少ARP 的广播包,并可以在一个负载很重的网络(如子网的路由器在极为繁忙的骨干网上进行IP包转发)有效的降低网络流量。
*要增加一个临时的ARP入口,可以:
# arp –s hostname ethernet_address temp
3到4分钟后,这个入口会死掉。
*要增加一个已发布的ARP入口,可以:
# arp –s hostname ethernet_address pub
当一个主机应答另一个主机的ARP请求时,使用一个已发布的ARP入口。这是一个很有用的选项在一个不能对ARP请求进行应答的交互式环境。这个入口将永久保存下去除非使用temp关键字在命令中。
*要删除一个ARP入口,可以
# arp –a hostname
hostname可以是一个主机名也可以是一个主机的IP地址。
*从一个文件增加一个ARP入口,可以:
# arp –f filename
文件中的入口应该这样被显示在表中:
hostname ethernet_address [temp] [pub]
网络接口配置
正确的配置主机的网络接口对网络连接是非常重要的。主机使用ARP更新网络接口,去监听接收和发送信息。
——接口配置
Solaris系统环境使用本地或网络数据库自动配置主机的网络接口。这个进程是系统启动过程的一部分,并通过系统内核进行管理,也就是:init进程,和它的配置文件/etc/inittab,关联到系统运行级别的脚本。
/kernel/unix
| 1.系统从UNIX内核启动,它所运行的其中一个进程是/sbin/init
/sbin/init
| 2./sbin/init 进程读取配置文件 /etc/inittab。它运行其它脚本/sbin/init
/sbin/rcs
| 3./sbin/rcs脚本设置系统为单一用户模式,包括/etc/init.d/rootusr
/etc/init.d/rootusr
4./etc/init.d/rootusr 脚本配置以太及loopback接口,另外,把/usr文件系统作为只读系统挂接。
——/etc/init.d/rootusr
文件/etc/init.d/rootusr脚本在系统启动的单一用户阶段执行,
调用文件/etc/hostname.interface和/etc/hostname。文件/etc/hostname.interface标识网络接口的主机名,文件/etc/inet/host标识主机的IP地址和主机名。命令ifconfig参考这些文件来配置网络接口和各自的IP地址。
即使在单用户的模式下,网络接口仍然监听,接收和发送帧。
主机bear的文件/etc/hostname.le0的内容:
#cat /etc/hostname.le0
bear
主机flipper的/etc/inet/hosts文件内容:
# cat /etc/hosts
127.0.0.1 localhost loghost
128.50.1.2 bear
反向地址解析
——反向地址解析协议
——无盘系统
无盘系统就是没有本地硬盘。它们使用网络接口和网络服务(NFS)来存取文件/etc/inet/hosts。
一个无盘系统初始化必须使用反向地址解析协议(RARP)来获得它的IP地址。RARP是一个在网络接口层和网络层建立地址链接的过程。ARP的调用过程是已知的目标主机IP地址和未知的MAC地址。RARP则反向这个过程,即,由一个已知的MAC地址开始到一个未知的IP地址。
——启动系统(JumpStart System)
JumpStart System是一个简单的无盘客户端,他们依赖于另一个主机提供服务来安装。JumpStart客户使用RARP从服务器上开始安装进程。
——RARP 请求
一个RARP请求是由一个启动的无盘客户端产生的一个广播包。
例如:
# snoop –v rarp
Using device /dev/le (promiscuous mode)
ETHER: ------- Ether Header -------
ETHER: Packet 1 arrived at 16:29:55.70
ETHER: Packet size = 64 bytes
ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER: Source =8:0:20:75:8b:59, Sun
ETHER: Ethertype = 8035 (RARP)
ETHER:
ARP: ---------- ARP/RARP Frame --------
ARP:
ARP: Hardware type = 1
ARP: Protocol type = 0800 (IP)
ARP: Length of hardware address = 6 bytes
ARP: Length of protocol address = 4 bytes
ARP: Opcode 3 (REVARP Request)
ARP: Sender’s hardware address = 8:0:20:75:8b:59
ARP: Sender’s protocol address = 255.255.255.255, BROADCAST
ARP: Target hardware address = 8:0:20:75:8b:59
ARP: Target protocol address = ?
ARP:
在这个例子里,无盘客户端由发送者的MAC地址8:0:20:75:8b:59来标识,并由RARP的广播请求包中的请求它的IP地址信息开始它的启动过程。
服务器bear和客户端在同一子网,它被配置来监听和响应客户端的RARP请求。
——RARP应答服务器
一个RARP应答包由同一子网上的被配置为应答RARP请求的主机产生。服务进程 in.rarpd响应RARP请求。它必须由root用户运行,并且是支持无盘系统的服务器的启动的一部分。
精灵进程根据MAC到IP地址的映射产生了一个RARP应答。它使用本地数据库(/etc/inet/host和/etc/ethers)或者网络列表(ethers和hosts)来创建一个应答。启动的机器必须在数据库中列出:in.rarpd,来定位它的IP地址,否则,in.rarpd将不会响应。
——RARP应答
例子:
# snoop –v rarp
ETHER: ------------ Ether Header ----------
ETHER:
ETHER: Packet 2 arrived at 16:29:58.78
ETHER: Packet size = 42 bytes
ETHER: Destination = 8:0:20:75:8b:59, Sun
ETHER: Source =8:0:20:75:6e:6f, Sun
ETHER: Ethertype = 8035 (RARP)
ETHER:
ARP:
ARP: ------------ ARP/RARP Frame ----------
ARP: Hardware type = 1
ARP: Protocol type = 0800 (IP)
ARP: Length of hardware address = 6 bytes
ARP: Length of protocol address = 4 bytes
ARP: Opcode 4 (REVARP Reply)
ARP: Sender’s hardware address = 8:0:20:75:6e:6f
ARP: Sender’s protocol address = 128.50.1.2, bear
ARP: Target hardware address = 8:0:20:75:8b:59
ARP: Target protocol address = 128.50.1.5, skunk
ARP:
继续上一个过程,RARP应答服务器bear返回一个RARP应答包给无盘客户端的物理地址(8:0:20:75:8b:59)并返回客户的IP地址,128.50.1.5
客户端继续它的无盘启动过程。
——维护in.rarpd 服务器
如果一个无盘客户服务器第一次进行设置时,在服务器上启用以下的客户脚本来执行:
# /etc/init.d/nfs.server start
如果客户不启动,进行以下检查:
*执行 snoop –v rarp 在同一子网的第三方机器上,如果不能看到无盘客户站的RARP请求,则可能是网络的硬件有问题。
*如果可以看到无盘客户端的RARP请求,但不能看到服务器端的RARP应答在客户的启动服务器上,检查以下项目:
*检查 /etc/inet/hosts文件(或者NIS/NIS+等)的客户主机名和IP地址。
*检查 /etc/ethers 文件中的客户主机名和MAC地址。
*检查 in.rarpd进程是否启用。
总结
*能描述在一个局域网上主机如何使用和获取MAC地址来发送信息
*描述自动网络配置进程
*描述配置网络过程中,文件和脚本的使用
*用ifconfig 命令来配置网络接口 |
|