| 醉里方休 回复于:2003-06-25 15:34:43 |
| 上个世纪的东东啊!第一章呢? |
| solstice 回复于:2003-06-25 15:36:21 |
| 第三章 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 命令来配置网络接口 |
| solstice 回复于:2003-06-25 15:37:07 |
| 老大,第0章和第一章在上一个贴子里啊! |
| 南非蜘蛛 回复于:2003-06-25 15:57:22 |
| 99年就这么强了,我还在念大学拿,郁闷 |
| solstice 回复于:2003-06-25 16:13:13 |
| 我倒,吱猪这么年轻,
唉,偶已经是老东东了, 翻译的东东也是老东西了! |