学习arp的一些资料

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 命令来配置网络接口
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值