ARP
IP地址将物理地址对上层隐藏起来,使Internet表现出统一的地址格式。但在实际通讯时,IP地址不能被物理网络所识别,物理网络所使用的依然是物理地址。隐藏,必须实现IP地址对物理地址的映射。
对于以太网而言,当IP数据包通过以太网发送时,以太网链路并不识别32位的IP地址,它们是以48位的MAC地址标识以太网节点的。因此,必须在IP地址与MAC地址之间建立映射(map)关系,建立这种映射的过程称为地址解析(Resolution)。
ARP(Address Resolution Protocol 地址解析协议)就是用于动态地将IP地址解析为MAC地址的协议。主机通过ARP解析目的MAC地址后,将在自己的ARP缓存表中添加相应的IP地址到MAC地址的映射表项,用于后续到同一目的地报文的转发。
ARP表项分为动态ARP表项和静态ARP表项:
动态ARP表项由ARP协议动态解析获得,如果超过一个老化时间未被使用,则会被自动删除。
静态ARP表项通过管理员手工配置,不会被老化。静态ARP表项的优先级高于动态ARP表项,可以将相应的动态ARP表项覆盖。
此外,还有一种特殊的ARP应用——免费ARP(Gratuitous ARP)。免费ARP协议包中携带的发送者IP地址和目标IP地址都是本机IP地址,发送者MAC地址是本机MAC地址,目标MAC地址是广播地址。对外发送免费ARP协议包可以实现以下功能:
确定其他设备的IP地址是否与本机IP地址冲突
设备改变了硬件地址,通过发送免费ARP报文通知其他设备更新ARP表项。
RARP
主机只知道自己的硬件地址时,可以通过RARP(Reverse Address Resolution 反向地址解析协议)解析自己的IP地址。RARP常用于无盘工作站启动前获取自身IP地址。
在刚刚启动时,无盘工作站只知道自己网卡的MAC地址,需要获得自己的IP地址,于是,向网络中广播RARP请求。RARP服务器接收广播请求后发送应当报文,无盘工作站随机获得IP地址。
RARP服务器要响应请求,首先必须知道物理地址与IP地址的对应关系。为此,在RARP服务器中维持着一个本网络的“物理地址——IP地址”映射表。当无盘工作站发出RARP请求后,网上所有主机均收到请求,但只有RARP服务器处理请求并根据请求者物理地址响应请求。无盘工作站发出的RARP请求中携带其物理地址,服务器根据此硬件地址查找其IP地址。由于服务器此时已经知道无盘工作站的物理地址,因此不再采用广播方式,而是直接向无盘工作站发送单播应答。
对于ARP 、RARP请求以广播方式发送,ARP、RARP 应当一般以单播形式发送,以节省网络资源。
IP包转发
主机在发送IP包之前,首先需判断目的主机所处的位置。主机对比自身IP地址的网络地址与目的IP地址的网络地址,如果二者相等,则可知目的主机与自己处于同一网段;如果二者不相等,则目的主机与自己处于不同网段。
如果目的与本机处于同一网段,主机可以与其直接通信。此时主机首先解析目的主机IP地址对应的硬件地址,随即将IP包以此硬件地址为目的地址封装成帧,由直连此网段的接口发送给目的主机。
如果目的与主机处于不同网段,则主机需将IP包交给一台称为默认网关(default gateway)的路由器,由此路由器设法将IP地址转发给目的主机。此时主机根据默认网关的IP地址解析出默认网关的硬件地址,随即将IP包以此硬件地址为目的地址封装成帧,由直连此网段的接口发送给默认网关。
路由器单播IP包转发
路由器收到一个IP包后,首先检测其目的地址。如果目的地址为本机,则接收此包并将其解封装,所得数据提交上层协议处理。
如果此IP包目的地址并非本机,而处于某个接口互连的网段,路由器可以与其直接通信。此时路由器首先解析目的主机IP地址对应的硬件地址,随即将IP包以此硬件地址为目的地址封装成帧,由直连此网段的接口发送给目的主机。
如果目的与路由器不同网段,则路由器需将IP包交给下一跳路由器,由下一跳设法将IP包转发给目的主机。此时主机根据路由表中的路由信息查出下一跳的IP地址,解析出下一跳的硬件地址,随即将IPI包以此硬件地址为目的地址封装成帧,由直连此网段的接口发给下一跳路由器。
主机接收IP包
在收到网络接口层提交的IP数据包时,主机首先检查这个包的目的地址是否等于自身IP地址。如果其目的地址符合下列情况之一,则主机接收此包,并将其数据提交相应的上层协议处理:
这个包的目的IP地址等于自身IP地址
这个包的目的IP地址是一个广播地址
这个包的目的IP地址是一个组播地址,而本机的某个服务正好属于此组播组。
如果此IP包的目的地址不符合上述任何一种情况,则主机的网络层丢弃此IP包。
代理ARP
当主机不了解网关的信息,或主机无法判断目的是否处于本网段时,某些主机会对处于其网段的目的主机IP地址直接进行ARP解析。此时,路由器可以运行代理ARP(Proxy ARP)帮助主机实现通信。
HostA希望与HostC通信,但由于某种原因,HostA直接发送了ARP请求,解析HostC的MAC地址。运行了代理ARP的路由器收到ARP请求后,代理HostA在2.0.0.0网段发出ARP请求,解析HostC的MAC地址。
HostC认为路由器向其发出了ARP请求,遂回应以ARP响应,通告自己的MAC地址
00E0.FE03.3333。路由器收到ARP响应后,也向HostA发送ARP响应,但通告的MAC地址是其连接到1.0.0.0网络的以太口E0/0的MAC地址00E0.FC02.2222。这样在HostA的ARP表中会将所有要发送给HostC的数据包发送到路由器上,再有路由器转发给HostC。
ICMP
原文:http://3157957.blog.51cto.com/3147957/1720436