《深入理解Linux网络技术内幕》阅读笔记(二十五)
2015-10-13 00:03
513 查看
有时候,发送方生成一个ARPOP_REQUEST是为了通知接收方一些信息,而不是请求信息。这种封包就称为无端ARP,它通常用下面列出的情况中:
1.L2地址发生变化。
2.重复地址探测。
3.虚拟IP(用于LVM服务)。
主机可以使用无端ARP来检测重复地址的存在,如果你发出一个目的地址是你自己地址的ARP请求,那么只有当存在一台与你有相同IP配置的主机时,才会收到应答。如果不存在重复地址,就收不到任何应答。
如上图所示,发出请求的主机会收到两个应答。一个来自正确的L2地址的NIC(eth0),而另一个是属于另一个NIC地址(eth1)。至于哪个地址会进入该主机的ARP缓存是不确定的。
如上图所示,当一台主机有多个NIC连接到同一个LAN,且配置在同一个IP子网上时,这个选项可以控制一个接口是否对入口ARPOP_REQUEST做出应答。上述情况下,每个NIC会收到一个ARPOP_REQUEST封包的拷贝,通过这个选项你可以只选择一个接口来应答。
假设主机A现在需要向主机C传输一些东西,但是没有其L2地址。主机A就会发出一个ARPOP_REQUEST广播包,主机B的eth0和eth1接口,以及主机C都会收到该包。主机B不应该对这个ARPOP_REQUEST作出应答,因为主机C自己可以应答。
正如你所看到的,需要一种方来告诉ARP代理服务器,它的两个接口都在同一个广播域内,因此,两个ARPOP_REQUEST包都不应该被处理。通过给连在同一个LAN上的接口指定一个称为medium ID的ID包就可以解决这个问题(只有这个设备的Medium ID和入口设备的Medium ID不同时,主机才会应答该请求)。
回环接口是一种特殊的情况。其发送和接收的封包用PACKET_LOOPBACK类型识别。因为这个接口是虚拟的,并没有实际的硬件地址,因此不需要使用ARP协议。
请求方达到了从ARPOP_REPLY封包中学到目的地址的主要目标,这个过程称为主动学习。而收到ARPOP_REQUEST封包的目的主机从请求封包中也知道了发送方的地址,这个过程称为被动学习。
DHCP服务器或客户端可以随意对DHCP分配一个IP地址发出一个ARPOP_REQUEST,用于双向监测是否相同的地址被错误地用在另一个主机上。这种特殊的ARPOP_REQUEST送出时,其源IP地址是0.0.0.0,以便它不会给予子网内的其它主机引来任何麻烦。
锁定期:它只是一种简单的超时机制,负责处理对同一个ARPOP_REQUEST封包,主机可能收到多个ARPOP_REPLY封包的偶然事件。如果某种配置错误或在同一个LAN中有多个ARP代理服务器,就可能发生这种情况。对此,arp_process函数只会对第一个应答做出反应,而拒绝后面的应答。
目的NAT也称为路由NAT(Route NAT),允许主机定义伪地址(NAT):主机检测到目的地是这些伪地址的入口封包后,将其转发到另一些地址。Linux支持所有的NAT。SNAT,DNAT,伪装等都是用Netfilter实现的。
路由器RT配置了一个伪NAT地址10.0.0.5.无论RT什么时候收到目的地址是10.0.0.5的流量,它都将封包的目的地址改成10.0.1.10,并转发到该地址对应的主机。当然,这个配置要保证发向流量也可以处理。
路由器和ARP代理服务器完成的任务是不同的:路由器将子网分为多个LAN,而ARP代理服务器将不同的LAN合并为单一子网。
包含一台ARP代理服务器的网络拓扑结构要记录大量的solicitation请求和应答。当要代理的主机数量很多时,solicitations占用的网络带宽会相当大。
a.从LAN1到LAN1.(例如,从主机D到E):由于主机D和主机(-。-;)在同一个子网内(10.0.0.0/24),它就可以发出一个对IP地址10.0.0.3的solicitation请求。在LAN1中的所有主机都会收到这个请求,但只有主机E会向主机D应答,表明自己的L2地址。注意,尽管在eth0上已启动了代理功能,但是RT不会应答。原因是RT在eth0(LAN1)上收到solicitation封包,但它知道10.0.0.3位于发送方的子网内,因此不需要拦截该请求:主机E所处的网络,正是solicitation请求生成的网络,因此主机E自己可以应答。
b.从LAN1到LAN1中的非法IP地址。(例如,从主机D到10.0.0.128):从A2的角度看,10.0.0.128是一个合法的主机地址;从RT的角度看,它不是(是一个网络地址)。没有人会做出应答这个请求,不管RT是否是代理。
c.从LAN1到LAN2(例如主机D到主机A):由于10.0.0.130所属的主机位于另一个LAN中,它不会收到这个请求并应答。但是,如果RT在eth0上配置了代理功能,它会用eth0接口的地址应答。这表示当主机D要往主机A发送数据时,它实际上是发到了RT,然后RT再转发到主机A。如果主机A请求主机D的地址,就是相反的过程。
d.从LAN1到LAN3(例如从主机D主机F):由于主机F和主机D不在同一个子网内,且在主机D中没有定义访问LAN3的路由,于是其内核的IP层会用一个消息作为应答,该消息表明没有达到主机F的可用路由。主机D甚至不会产生solicitation请求。
WOL(wake on lan)通过给一个NIC发送一个特殊类型的帧,就能唤醒一个处于待机模式的系统。在各种帧的类型中,有唤醒功能的只有ARP帧。该功能是在硬件级实现的,因为当系统还在待机模式时,CPU上没有运行能处理输入封包的设备驱动程序。带有WOL功能的NIC需要有其自己的电源输入,以便能够扫描到这些特殊的帧。
ARPD:
相关文章推荐
- Slow HTTP Denial of Service Attack
- tcpdump抓包
- 我国高校在线慕课平台已覆盖126个国家和地区
- Android检测网络是否可用
- iOS安全系列之一:HTTPS
- eclipse HttpServlet 类会报错
- 网络红人李涛
- 虚拟机网络调试
- iOS中使用 Reachability 检测网络
- 《计算机网络 :自顶向下方法》第5章 链路层和局域网
- 网络协议
- iOS9 HTTP 不能正常使用的解决办法
- 常用的网络
- struts2 中怎样获取HttpServletReqest
- 第115讲:Hadoop集群构建硬件选择、集群规模、网络拓扑、机架感知等学习笔记
- 测通网络连接
- iOS笔记网络--get请求和post请求
- 7层网络模型
- iOS开发swift版异步加载网络图片(带缓存和缺省图片)
- 对网络协议的理解