版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【翻译】邻居子系统:概念本章描述了邻居协议使用的原因和时间,以及其主要功能。这主要是邻居协议(如 arp)的一个简单的概观以及快速参考。包含了如下的常见问题:通用邻居框架具功能高速缓存有何重要意义缓存中的邻居条目能够获得的状态可达探测和网络不可达探测为什么使用Linux 内核源码中使用的邻居术语来源于 RFC2461 和“邻居协议”小节中描述的 IPv6 邻居探测模型,但是的尽可能协议独立。通常,L2 地址、二层地址、硬件地址、MAC 地址和链路层地址都指相同的概念。本章,将主要使用第一种说法。26.1 邻居是什么?如果主机连接到和你同样的局域网,则它是你的邻居(也就是说,你和它直接通过共享介
2、质或点对点链路连接),都被配置为同样的 L3 层网络。例如,在 IP 网络中,如果两台主机连接到同样的局域网,且每个主机至少有一个接口在同样的 IP 子网(译者注:对多网卡主机而言),则它们是邻居。这样的两台主机可以通过连接到它们的介质(如以太网)关联的协议直接通信。另外一种定义邻居的做法是离主机只有一个 L3 跳(hop)的主机都是邻居。它的 L3 层(网络层)路由表必须提供一个和其邻居直接通信的方法。不是邻居的主机必须通过网关或路由器通信。如果两个主机由工作在 L2 层的系统(如网桥)分隔,则它们仍然是邻居。关于这点第四部分已经详细介绍了,这里看些基于 IP 网络的简单例子,如图 26-1
3、 所示:图 26-1邻居及非邻居主机第 1页 共 19 页图 26-1 中每个拓扑图都表明了 L2 和 L3 层地址之间的不同的关系,这两种地址对可达的邻居而言有所联系。图 26-1(a)主机 a 和主机 b 属于同样的 /24IP 子网,所以它们能够直接通信,它们之间在 L3 层仅有一跳距离,所以它们是邻居。图 26-1(b)此图展示的稍微复杂一点的情况,主机 a 和主机 b 仍然属于同一子网,所以相互间能够之间通信;另一方面,主机 a 和主机 c 属于不同的 IP 子网,因此它们需要通过路由器(假设做了适当的配置)来互相通信。这种情况,图 26-1(c)认为主机 a 和主机 c 之间在 L
4、3 层有两跳的距离。此图展示了两个主机连接在同一个集线器上但不能相互通信的情况。即使每台主机都可以接收到其它任何主机传来的数据,它们也不能够在 L3 层通信,因为它们配置了不同的 ip 子网。这样,第 2 页 共 19 页主机 a 认为它只能够到达子网 /24 内的主机,如果目标地址在子网之外,它不会朝目标主机发送任何数据。这个问题有很多方法可以解决,图 26-1(d)在接下来的章节中就会看到。此图表明 /24 子网实际由两个局域网通过集线器或网桥组成的一个子网的情况,在第 14 章就看到它们的不同之处,在本章中,认为这是同一种情况。注意,连接两个局域网的的两个接口(译者注:网桥)没有 ip
5、地址:这是因为所有的这三种设备类型必然是工作在 IP 层之下。当两台主机在 L3 层相距一跳距离,实际上它们在 L2 层也是一跳的距离,如图 26-1(a)、(b)、(c)所示。但并非总是这样的,如图 26-1(d)所示,主机 a 和路由器在 L3 层相距一跳(所以是邻居)但在 L2 层却相距两跳。此外,物理子网(局域网)和逻辑子网(IP 子网)并非总是一一对应的,如图 26-2(a)所示:在一个局域网中可以有多个 IP 子网或者在一个 IP 子网中有多个局域网。比如,图 26-1(a)展示了同一个局域网中的两个 IP 子网,图 26-1(d)表明同一 IP 子网(左边)中的两个局域网通过集线
6、器相连,前者并不常见,后者常用于配置 ARP可以在第 28 章的“最终公共处理”小节看到或网桥时。ARP配置的例子,在第五部分看到网桥的例子。图 26-2(b)表明:两组主机通过配置在不同的ip子网中,即使这两个组中的主机共享同一个局域网,并因此能够相互通信,但是它们必须通过两边请求的路由器。路由器必须具有两个不同的网络接口或双网卡,或者具有单网卡多IP地址。后者比较罕见,常用于设备地址临时短缺或配置失败时,例如,在图 26-2(a)的场景中LAN1 配置失败的情况下,可以把LAN1 的主机移到LAN2(包括路由器的eth0 接口*),则LAN1 的主机的IP子网配置不需要任何改变即可再次工作
7、。已经在LAN2 的主机仍然可以通过路由器其它主机。即使这种情况不常见,但内核必须能够正确处理它,这种情况,特别是当路由器使用单个接口其子网时(也就是eth0 被移除,则它的地址被加进eth1)的情景将在第 28 章的“可调节的ARP选项”小节中描述。 *图 26-2 (a)IP 子网_LAN1:1(b)IP 子网_LANn:1在接下来的章节中不会明确提到图 26-2(b)的情况,但你应该记得象这样的配置是可能的,第 3 页 共 19 页不是的。26.2 需要邻居协议的原因本节中,如以太网。会明白邻居子系统存在的基本原因,它将基本网络划分成层以及共享介质实体,26.2.1 当 L3 层地址需要
8、转换为 L2 层地址时L3:layer three 网络层L2:layer second 数据链路层在网络二层(以太网、802.11 无限网、令牌网、点对点连接等等)和三层(IP 层、私有的)协议之间存在差异的原因就是许多不同的 L2 层协议存在且在邻居之间传送数据,而 L3 层路又不需担心所用的传输介质,更高的层能够使用相同的对点连接中。在两个系统间传送报文而不管它在以太网上还是在点图 26-3 表明了通过邻居子系统获得不同响应的不同情况图 26-3点对点连接与共享介质图 26-3(a) 表明了点对点连接,如线。其 L2 层协议相当简单,如果运行在半双工介质上它仅处理错误校验和轮询等问题。其
9、邻居协议比较简单,因为它仅仅只是使用 L2 层协议,邻居没有发送包给谁的决定权。图 26-3(b) 展示了更复杂的情况:以太网或其它共享介质通过广播来通信。如果主机 a 要发送数据给主机 b,它必须把数据放到电缆上(或无线环境的电波中),并让共享介质上的所有系统都收到数据。它也必须指定一个 L2 层地址以标识数据使接收主机知道数据是发送给自己的,其它主机检测地址并丢弃数据。由邻居协议来选择包中 L3 层地址对应的 L2 层地址。如果主机a和主机b通过网桥分开,则桥接收到L2 层地址并直接传递给正确主机*;而邻居子系统并不考虑这些情况,事实上,桥对于邻居子系统是透明的。第 4 页 共 19 页*
10、通常在 L3 层地址及其对应的 L2 层帧之间有一一对应的关系,具有多个 L3 层地址的系统(通常是路由器)提供多个接口以保持 L3 层地址及其对应的 L2 层帧之间有一一对应的关系。但是后面“特殊情况”小节也解释了,在 L3 层的多个多点传输地址能够个接口配置多个 IP 地址。到同样的 L2 层地址上,也有可能一26.2.2 共享介质在共享介质中,主机传输的任何帧都被直连在介质上的主机收到,无线连接就是一个简单的例子,另外一个例子就是用于以太网 10-base2 的共享的同轴电缆。因此,用于共享介质的链路层协议需要定义一个地址策略以便发送方能够指定每帧的接受方,并且接受方也能够识别发送方。这
11、个地址策略通常也定义一些特殊的地址以便对一个帧编址传给多个主机或所有的主机:即多播地址和广播地址。由于多播主机需要传输数据因此也同时需要使用共享介质,链路层协议也必须包含法以确保所有连接到共享介质的主机能够检测到这种情况。以太网使用的是叫做带检测的载波侦听多路协议(CSMA/CD),不关心这种如何处理,因为这偏离了本章的。所有这些以太网相关的信息都可以在“以太网:指南”一书(OReilly)中获取。另一方面,点对点介质,如串行线,被设计仅用于两个节点间通信,在这种情况下,不需使用链路层地址标识源节点和目的节点,两个节点能够依靠同一条线或各自拥有一根线半双工或全双工通信,这两种情况都不需要检测机
12、制。两端要麽各分配一根线(全双工),要麽每端使用一种机制获取共享介质的使用权。因此,两台主机通过点对点介质相连时不需要邻居协议。以太网最先是被设计工作在共享介质上,允许主机共享同样的介质并通过CSMA/CD 处理,这是共享同轴电缆时期(也就是 10Base-2)。但是,由于,随着时间的过去,使用共享同轴电缆被使绞线(UTP)或 RJ-45 线代替。允许以太网接口配置成半双工或全双工模式,因为双绞线有足够的电缆允许双方同时通信,全双工模式的以太网仅用于两个以太网接口间的点对点连接。在这种情况下,每端都指派一根线进行传输和接收,因此不需要 CSMA/CD。现在,以太局域网主要通过交换机*实现,每台
13、主机都通过双绞线连接到交换机。在此情况下,可以配置接口为半双工模式,这样CSMA/CD主要用于处理交换机端口与主机以太网卡适配器之间的;或者配置两个接口为全双工模式,并允许交换机和主机同时传输数据,此时两端都必须用同样的双工模式。在绝大多数情况下,都不必明确配置连接双方的双工模式,因为有双工模式检测机制做了这件事。*本注意,主机生成的帧决不会被编址到交换设备(虽然通用规则也有例外);交换设备只是用于主机到达其它连在相同交换机上的其它主机。所以,即使在全双工模式的接口不需要 CSMA/CD,我们仍然需要源地址和目的地址及邻居协议。这也意味着共享介质,如同轴电缆提供多播和广播功能由交换机以其它方式
14、提供了:当交换机收到一个帧编址是多播或广播的链路层地址,它会把数据拷除接收到此帧端口以外的所有其它端口,在第四部分看到,交换机这样做是很迅速的。所知的当前的局域网大体上都是由以太网交换设备实现,主机都是通过点对点形式连接(UTP 双绞线)到交换设备上。在新的以太网标准的设计中,CSMA/CD 的用途变得不那么重要了。也由于这个原因,新的以太网完全摈弃它。用于高速数据传输,它要麽将CSMA/CD 作为可选项,要麽表 26-1 展示了以太网支持 CSMA/CD 的情况,注意,G 比特以太网依然支持 CSMA/CD,虽然它主要用于全双工的点对点连接。10G 比特标准化主要用于广域网(与局域网相对),
15、它根本就不支第 5 页 共 19 页持 CSMA/CD,仅用在光纤介质上的点对点连接。表 26-1 的每项实际上都有许多变量属性,但由于它们不在的范围,我也就没有列出它们。表 26-1以太网类别和点对点/共享介质功能以太网类别以太网(10 Mbit/s)点对点功能共享介质功能(即支持 CSMA/CD)X X X快速以太网(100 G 比特以太网 10G 比特以太网Mbits/s)X26.2.3 为什么静态指定地址不够用在第 13 章已经看到 L3 层和 L2 层地址及协议的功能,L3 层地址如 IP 地址是逻辑的,所以只要是有效的地址都能够指派给任何接口;另一 ,L2 层地址绑定到网卡,并且不
16、支持可配置:它们由厂家被指派给网卡接口并且是全球唯一。但是,有些网卡接口可以通过 ifconfig 等常见工具强制配置 L2 层地址,这在处理本地 IEEE 地址时非常有用,第 13 章中有此描述。不过,当你把网卡接口地址改成你不拥有的 L2 层地址时,这样你会有一定的风险:你不再能够确定这个地址是否唯一以及以此 L2 层地址标识的网卡在共享介质上是否能够正常工作。通常只有比较资深的管理员才这样做特殊的配置,比如虚拟服务器或高可用设备。因为 L3 层地址是逻辑的,所有有很多理由去改变它,下面是一些改变 L3 层地址的情形,这还需要在 L3 层地址和关联的 L2 层地址间建立。动态配置:在 IP
17、 网络中,主机可以通过某种协议如 DHCP 指定动态 IP 地址,同样的主机可以在它每次请求时获得不同的 ip 地址。但是硬件地址被硬编码进以太网卡或无线网卡,所以 L3 层到 L2 层地址的也要做响应的更新。替换有问题的接口:一旦网卡被替换,则 L2 层地址也改变了,但是管理员可能更希望保持网络逻辑地址即 L3 层地址不变。移动 L3 层地址:一台服务器宕机时可能需要另外一台不同的服务器来处理相同的通信量请求,这就意味着旧的L3 层地址需要关联到新的服务器和网络接口。如果管理员需要保留同样的 L3 层地址在同一主机但是不同的接口,也需要做这样的改变。需要L2 层和 L3 层之间的这种变化,因
18、为有许多没有处理的不可预料的事以及棘手的事情要做,所以协议需要关联 L2 层和 L3 层之间的这种关联。这就是本书邻居协议部分需要的事情。26.2.4 特殊情况有时,不需要任何协议把 L3 层地址成 L2 层地址,下面就是这种情况:在点对点介质上数据仅仅只可以发送给一个主机,如拨号连接或通过电缆临时连接系统到另外一各管理员想的系统。此时,所有的 L2 层都不需要地址策略。(即使点对点介质在某种情况下使用了 L2 层地址也不需要)第 6 页 共 19 页可能用一种简单的公司也可以获得与 L2 层地址关联的特殊的 L3 层地址。因为没有不明确的或动态的分配,所有不需要任何协议。多播地址不需要任何协
19、议就可以静态传递。在IPv4/ARP网络中,当设备是以太网卡时,多播地址通过函数arp_mc_map来,这个函数轮流调用更为简单的ip_eth_mc_map函数。在ip_eth_mc_map中不使用任何协议而通过一个公式实现解释:。图 26-4 就是插图和最高的 24 位被指派为 IANA 分配的静态值 01:00:5E23 位(低 24 位的最)被设置为 0低 23 位是从 IP 地址的低 23 位拷贝过来注意,同样的以太网多播地址能够被指派给 IP 地址(因为 IP 地址的高 9 位没用)图 26-4 根据IPv4 多播地址生成以太网多播地址广播地址(IP 子网广播)静态成链路层广播地址(
20、以太网是:)。如果有必要,每个设备的 L2 层广播地址也可以被明确配置。26.2.5 诱发请求和响应当 L3 层到 L2 层地址不能够通过前面章节描述的来静态,则邻居协议需要做此。不同的协议可能使用不同的机制,但是对所有的协议而言,熟悉下面的术语是很有用的,这些术语在本章将频繁的使用:诱发请求(也叫邻居请求):这导致网络中的包传输,包询问网络中的所有主机是否知道和被给 L3 层地址相关联的 L2 层地址。这个请求根据协议或环境能够作为单播、多播或广播。诱发响应(也叫邻居):即包通常作为诱发请求的响应而发送,但是此包也可以单独生成(例子可参考第 28 章的“免费ARP”)。在通常情况下,和目标
21、L3 层地址相关联的主机生成响应包单也有可能是在此位置的另外一台主机去响应(参考“情况下也可作为广播发送。邻居协议”小节)。这种包通常作为单播发送,单在某些特殊26.3 linux 实现早期的 linux 内核让 L3 层协议直接调用邻居协议提供的函数,因此,IPv4 子系统直接和 ARP代码交互。在最近的内核版本中,开发者总结了各种不同协议的各种请求,并把它们抽象成新的一第 7 页 共 19 页个层,叫做邻居框架。由于内核仍然包含了许多未更新至协议独立层的旧代码,所以仍然可以看到直接调用不 的 ARP 代码的现象(如 arp_find),但是这只是例外。第 27 章的“L3 层协议与邻居协议
22、之间的通用接口”小节将详细介绍邻居体系结构的接口。图 26-5 展示了linux邻居子系统的关键部分,以及与其交互的内核其它系统。L3 层协议通过一个普通的接口与邻居层交互,此接口根据L3 层协议来选择正确的邻居协议(如ARP、ND等),因此也被称作服务*。*包在传输时,会经历下面的几个环节:1、本机的路由子系统选择目标 L3 层地址(下一跳)图 26-5 重要的2、根据路由表,如果下一跳在同一网络(如果是这样,则下一跳是邻居),则邻居系统将目标 L3 层地址 成 L2 层地址,这种关联关系被缓存起来龚以后使用。这样,如果一个应用在很短的时间内发送若干个包给另外的应用,则邻居协议仅在发送第一个
23、包时被使用一次。3、最后,某个函数如dev_queue_xmit(11 章已描述)负责具体的传输,它将包传给流量控制与服务质量(QoS)层。虽然图 26-5 只是展示了dev_queue_xmit函数,但是邻居层实际上还可以调用其它函数(绝大部分是dev_queue_xmit函数的封装),这点面会看到。在本章的后注意,dev_queue_xmit函数仅在要传输的包准备发送时才被调用。因此,如果需要 L2 层协议头,邻居协议必须在调用此函数之前加入L2 层协议头。有些类型如点到点传输连接、广播或多播都不需要L2 层协议头,因此它们不需要L3 层到L2 层的。这些传输在“特殊情况”小节中有描述;其
24、它类型的传输由于采用共享介质所以需要L2 层协议头,这个协议头要麽来自于邻居子系统缓存要麽通过邻居子系统向网络发送一个请求(获得)。26.3.1 邻居协议现在,IP 网络中正在使用两个协议:大量系统使用的 IPv4 中的 ARP 和主要为 IPv6 开发的用于通用目的的 ND(Neighbor Discovery 邻居探测)协议。还有其它一些协议在 linux 内核中实现以用于et 实现的协议,由于其使用有限所有本书不去关心它。私有网络,如:第 8 页 共 19 页虽然 ARP 被认为是 L3 层协议,但是它实现的功能被 IPv6 的设计者移至 L4 层。如图 26-6 所示, ND 协议被划
25、为 ICMPv6(IPv6 implemenion of theernet Control Message Protocol(ICMP):ICMP 的 IPv6 的实现)的一部分,这样做是基于 IPv4 多年的运营经验,这样提供给 ND 许多便利,其中之一就是有机会充分利用 L3 层的特点,如 IPSec 加密。28 章的“建立在 ARP(IPv4)上的 ND(IPv6)改进”一节中给出了在 ND 和 ARP 之间主要不同点的概观。图 26-6 网络堆栈中 ARP/ND 协议所处的位置如前所述,linux 也提供了一个通用的体系框架以简化上层服务的代码,这些服务都极其类似的使用了邻居协议。通常
26、邻居协议提供的服务能够被不同的协议裁剪以适应其各自的需要,下面列出了连接体系结构提供给各协议的一些服务:用于L3L2 层转换结果的各协议缓存区用于在缓存区中增加、删除、修改、查找特定的转换条目的函数。因为查找函数会极大的影响系统的性能,所以它必须快。协议缓冲区条目的失效(或老化)机制当缓存区满,但又有新的请求需要在缓存中创建一个新的条目时所采用的决策策略各协议对应的邻居请求队列。当包准备好了将被发送,而缓存中又没有其 L2 层地址时,则包必须被放到包缓冲区,直到诱发请求包发送并收到响应时。可参考 27 章的“队列”一节为了使每个协议都能够定制邻居子系统的行为,它定义了一组占位符和和虚函数以使每
27、个协议替换为它应该使用的函数。这于绝大多数 linux 内核允许用户定制的原理类似。邻居层也提供了一组可调整参数用于用户命令、/proc 文件系统或协议自身的配置。最后,缓存区的函数通常是面向所有的协议,但是不同的协议可以使用不同大小的关键字(地址)。所有,邻居协议体系结构提供了一个通用的方法定义使用什么类型的关键字,后面的章节会降到这些细节要点。每个协议都能够被使用与独立配置,27 章的“协议初始化和清除一节”展示了邻居协议如何在内核中或注销自己。26.4邻居协议当一个主机截获发到另外的主机的数据包并代替后者处理数据包时,它实际上扮演着的角的例色。当然,这个术语也包含了发动中间人(man-h
28、e-middle)的主机.常见的一个子就是 http 服务缓冲系统,它通过中途请求截获数据包并重定向到其它 web 服务器 ,同时它会缓存来自于这些 web 服务器的网页并提供给请求者。如果主机和应用不需要做明确的配置去标识提供的服务功能,则这种被称作透明的,前面提到的 http 服务缓冲系统就是的一个例子。但是,如图 26-7 所示,服务既可以通过提供也可通过非提供。展示了两个使用 http的例子:(a)被安装在本地网路的路由器上以ernet,所有网络上的主机的浏览请求都通过路第 9 页 共 19 页由器,因此管理员可以把路由器配置成模式以所有的 http 请求。这种情况被视作透明,因为在主
29、机 B 上不需要任何的配置或特殊编程的浏览器。(b)主机 B 上的浏览器被设置成使用名叫 proxy 的主机作为要时使用路由器(即当其缓存内容失效时)。ernet。主机 proxy 在必去图 26-7 (a)(b)非前面的例子展示了流行的类型:http 或 web,现在来看看本书这部分的。邻居协议的服务器是被配置成响应诱发请求的主机,这台主机没有相应的下层地址,且它用来代替实际拥有这些地址的其它主机。由于有一个局域网中。,不同局域网的主机可以相互的交互,就像在同例如:ARP通常用在 IPv4 网络中协助底层到子网的传输。由于是透明的,所以主机并不需要特殊的协议或配置。但是如果服务器宕机了,则被
30、的主机之间的也中断了,这可以通过提供多个服务器来避免。在这种情况下,主机会收到它(所广播)的请求的多个诱发响应。通过选择最先到达的响应,主机可以获得最快且负载最小的服务器(的服务)。的使用也可以使依赖的主机简化配置。28 章的“与路由”提供了这样的一个例子。Linux 内核实现的邻居协议中,仅 IPv4 和 IPv6 能够使用其功能。这个通用的体系架构被这两个协议共享,并根据需要裁剪上的 ND(IPv6)改进”小节中描述。功能。两者之间的不同之处在 28 章的“建立在 ARP(IPv4)在 27 章的“充当角色”一节,看到协议独立组件特性的实现细节(如定时器、队列会看到 IPv4 和 ARP
31、的特殊情况的一些细节。等待)。在 28 章的“ARP”一节中,26.4.1请求条件收到的诱发请求并非都被处理,如果碰到下述情况,则服务器会响应诱发请求一个地址:地址和接收请求的所在网卡配址不属于同一子网。因为服务器代替其它主机响应诱发请求,这些主机和发送诱发请求的主机一般都不在同一个子网。否则,(如果在同一子网)目标主机也会和一样响应,这样,它也不清楚发送请求的主机会选择哪一个响应了。特性开启时。这个约束听起来很直观,但事实并非如此。有几个标准制约着是否需要第 10 页 共 19 页响应请求,这些在不同的邻居协议里面又有不同。在 linux 中,内核提供了通用和理形式:a 基于设备两种代设备收
32、到的所有请求都被处理。这是 IPv4 网络中使用最常见的情况,IPv6 不用这种策略b 基于目标(地址)能够响应对特定 IP 地址的请在决定是否时,目标地址和设备都要被考虑。意即求,基于目标的图 26-8 展示了两种在 IPv6 网络中被标准化了,但是在 IPv4 网络中也可以使用。之间的优先权,当主机收到本地子网之外地址的诱发请求时,如果主机的特性开启了,则它可以直接处理此请求。首先子系统会检测设备上的特性是否全局性开启;如果没有,则检测设备是否被配置成特殊地址。图 26-8设备和地址间的优先权服务器收到请求时,其转发功能是开启的。因为服务器处在各个主机之间,它不得不在两个终端之间转发数据*
33、。*这并不是说通过在主机上开启功能,就可以自动开启转发功能,这两个功能是分开配置的,但是需要转发给核实的函数。ARP 诱发请求总是发送给 L2 层广播地址,这确保所有共享同一介质的所有主机都可以接收到。没有设置为混杂模式。当 ARP 进行可达确这样,能够截获对这些主机的地址请求,即使认(参考“可达确认”一节)时,它采用单播而不是多播。ND 用 L3 层多播地址来处理诱发请求和响应。当路由器要为一个被给的 IP 地址作需要使用相关联的 L3 层多播地址。时,它第 11 页 共 19 页26.5 诱发请求传递和处理过程看到基于接收主机以及网络物理拓扑配置的诱发请求是何时处理的,图 26-9本节中,
34、列出了促使主机发送诱发请求的,图 26-10 显示了决定收到诱发请求的linux主机是否处理它的常见的。为了展示接收者判断的可能的复杂性,图 26-10 假定接收者实现和网桥的功能*;移走任何一个功能都会简化这故略去。注意图 26-10 展示了。图 26-10 假定是基于设备的;基于目标的与此一致,开启”表示是服务器和未实现的普通服务器两种情况:“服务器,“”表示普通的服务器。*我在图 26-10 中加了桥表示桥在邻居协议前处理,所以后面可能不会看到输入队列的诱发请求。桥的细节在第四部分已经描述。图 26-9 转发诱发请求这是协议独立的分析,关于 ARP 更详细的描述放在第 28 章。图 26
35、-10处理准入的诱发请求第 12 页 共 19 页当网桥被使能启用时,诱发请求并不是被此主机处理,而是根据网桥配置被转发给正确的网络接口;即网桥的转发发生在正确的网络接口的邻居协议系统有机会处理进入的包之前。换句话说,在 linux 内核中实现的处理诱发请求之前,网桥就已经处理过了,参考第四部分。假设网桥被了,要记住,建立在共享介质基础上的主机依然能够收到属于其它主机的诱发地址请求。下面是几个影响 linux 主机是否响应进入的诱发请求的变量:逻辑子网(如 IP 子网)当请求地址和接收诱发请求的的网卡所配置的L3 层地址属于同样的逻辑子网时(根据接收主机的配置),即图 26-10 中的Same
36、 logical subnet就是这种情况。拿 IPv4 作为例子,(请求的地址)和 /24(接收网卡配置的地址)属于同样的 IP 子网 /24当两个主机属于同样的逻辑子网时,它们能够直接交互通信。否则需要路由器的协助。注意,在同样的逻辑子网中,一个接口可能配置为拥有多个地址(其中之一时主地址,其它都是次地址); 在不同的逻辑子网中,接口也可能配置为拥有多个地址;或者上述两种情况的组合。如果接收网卡在不同的逻辑子网并被配置拥有都个地址,则请求地址必须属于某个子网。物理子网(LAN)当两台主机属于同一局域网时,原则上它们时可以直接通信的,但是实际上它们能否通信是由L3 层逻辑配置决定的。例如,图
37、 26-1(c)中,主机在同一局域网,但分属不同的 ip 子网。每台主机都不会去属于不同子网的其它主机的地址,但是它要路由器的地址,因为路由器是它需要通信以到达远端的主机。可以参考图 26-9。除非使用了,否则主机决不会在网卡接收请求其它网卡配置的 L3 层地址的诱发请求。因第 13 页 共 19 页为图 26-10 所示的接收者情形中,在不同的逻辑子网下,并不能区别同样的物理子网和不同的物理子网,因为它们没有任何的不同,仅仅状态是比较重要的。请求:收到的诱发请求也并非都处理,细节请参考“请求条件”一节第 28 章的“处理入队列的 ARP 包”一节展示了 ARP 协议如何处理图 26-10 中
38、的各种情形。26.6 邻居状态和网络不可到达检测(NUD)图 26-11 简单概括了将包传递给 L3 层地址的时,内核所经历的步骤流程图。图 26-12 是一个简单模型,展示了邻居协议所经历的各种状态。图 26-11 和图 26-12 中的两个模型工作在各种情况,但 linux 内核采用更经典的模型处理各种可能的状态。下一节将扩展图 26-12 模型,后面的章节将集中在图 26-11 所示的细节。正如看到的,管理邻居系统的一个很重要的部分就是查看是否可达。图 26-11 L3 到 L2 层地址步骤图 26-12 L3 层到 L2 层状态第 14 页 共 19 页26.6.1 可达性根据邻居子系
39、统的观点,可达性可以做如下相关类推。假设你和很多人包括我都在一个暗室里面,你说,每个人都到房间外面去,则每个人都会走出去,因为大家都能够听到你说话;但是如果你需要叫我出去,你需要提供某种信息,如:名字。所以,发送给广播目的地址的诱发响应并不能够提供一些发送给单播目标地址的信息:任何人都可以接收广播包,但是如果你想和某个接收者交互,必须提确的地址。邻居系统认为,如果内核能够验证接收者能够正确接收到以其单播地址编址的包,主机认为是可达的,反之亦然。换句话说,就是必须双向可达时内核才会认为邻居是可达的。本章接下来的部分用术语可达表示双向可达。会在“可达确认”小节中看到可达确认的两种方4 层确认和诱发
40、响应。26.6.2 在 NUD 状态间的传输IPv6 定义了 NUM 机制有助于快速判断邻居是否断开或宕机,linux 内核在IPv4 和 IPv6 的实现中采用同样的机制。类似的模块也会被本书没有讲述的其它协议使用,如:et。图 26-13 总结了邻居协议支持的状态以及触发状态改变的条件。有几种事件会导致创建邻居条目,包括转发数据报给邻居的请求、或者从邻居接收到诱发请求。邻居条目的状态可以在其生命期改变多次,同一个状态可能多次出现在条目生命周期的不同阶段。不同的协议可能导致不同的状态迁移,有些特定条件下才出现的状态变迁未在图中显示,如: IPv4 直接置最近创建的邻居条目的状态为:NUD_S
41、TALE,而IPv6 却不这样做。图 26-13 后面是这些状态的描述,可能的状态值都是基于某类常见的属性。每个状态下都有图中状态迁移的,特别是 NUD 机制。第 15 页 共 19 页 基本状态图 26-13 的状态定义如下,NUD_NONE表示邻居条目被创建,但目前尚不可用。图 26-13 NUD 状态迁移从新建邻居条目时的默认状态开始:下面的状态来自于 IPV6 邻居定义,并在还在 linux ARP/IPv4 的实现中采用:PLETE诱发请求已经发送,但是尚未收到响应时所处的状态。在这个状态下,不可以使用任何硬件地址(not even an old one, as there is w
42、ith NUD_STALE)NUD_REACHABLE邻居地址被缓存,并且最近已知是可达的(即以及验证是可达的)NUD_FAILED由于诱发请求失败而标记邻居是不可达状态。包括创建条目时生成的和由NUD_PROBE触发的诱发请求失败。NUD_STALE NUD_DELAYNUD_PROBE第 16 页 共 19 页这几个是迁移的中间状态;当本达确认”小结。机判断邻居是否可达的过程中设置这些状态。可以参考“可下面几个状态代表一组特殊的状态,通常一旦设置就不会改变了。NUD_NOARP这个状态用于标记邻居不需要任何协议来L3 层到 L2 层的地址转换(参考“特殊情况”小节)。28 章的“ARP 构
43、造函数”小节中描述了在 IPv4/ARP 中为什么设置这个状态的原因以及如何设置它。虽然这个状态的名称暗示它仅用于 ARP,但实质上它使用于所有邻居协议。 NUD_PERMANENTL2 层邻居地址被静态配置时的状态置(如用户空间命令配置),所以不需要任何邻居协议考虑它。参考 29 章的“邻居的系统管理”一节。 衍生状态除了前面小节所列出的基本状态,为了代码的清晰可读,当在某些情况下需要系统定义了下面的一些衍生状态:多个状态时,NUD_VALID如果一个邻居条目的状态是下述几个状态中的一个,则可以认定它是NUD_VALID状态。这表明邻居确信现在有一个可用地址。即:NUD_PERMANENT、
44、NUD_NOARP、NUD_REACHABLE、NUD_PROBE、NUD_STALE、NUD_DELAYNUD_CONNECTED这个状态是NUD_VALID的子集,表明没有未决的确认处理,即如下几个状态都表示处在NUD_CONNECTED状态:NUD_PERMANENT、NUD_NOARP、NUD_REACHABLENUD_IN_TIMER表示邻居子系统为邻居条目提供了一个正在运行的定时器,这发生在在邻居条目状态不确定PLETE、NUD_DELAY、NUD_PROBE时。符合这个状态的基本状态是:来看一个为何衍生状态在内核代码中的作用的例子,当邻居实例被移出时,系统需要停止和这个数据结构相
45、关联的所有未决的定时器,此时它不是将邻居状态与这三个状态相比较以判断与它们是否有相关联的未决定时器。,而是扮演清洁器的角色,定义一个NUD_IN_TIMER,并通过为操作符&来与邻居状态进行比较。 初始状态当邻居实例被创建时,其缺省的状态是 NUD_NONE。但是当一个外部用户命令创建邻居实例时,它将直接设置其状态为 NUD_NONE(参考 29 章)。27 章的“邻居初始化”一节解释说:协议的constructor方法也可以根据相关设备驱动(如点对点)的属性和L3 层地址(如广播)来改变这个状态26.6.3 可达确认在“为什么静态指定地址不够用”一节中看到,L3 层到 L2 层的地址可能会变
46、化。因此,如果信息有一段时间未使用了,确认信息已经正常的达确认。在缓存中是很有意义的。这就称为可第 17 页 共 19 页根据“需要邻居协议的原因”一节中列出的原因,可达状态的变化就不是必要的了,路由器、网桥、或其它网络设备可能会可能仍然有效而被临时使用。某些问题。在进行可达确认的过程中,缓存中的信息被假定为有支持可达确认工作的三个NUD状态是:NUD_STALE, NUD_DELAY, 和NUD_PROBE。使用这三个状态的主要原因是直到包需要被发送到相关邻居时才有必要启动可达确认处理。下面再次详细说明下这三个NUD状态的精确的意思,并看一下确认的两种方法:NUD_STALE缓存中有邻居的地址,但之后有一段时间没有被确认(参考 29 章的“neigh_parms结构”一节中关于reachable_time的)。下次,一个发送给邻居,则会启动可达确认处理过程NUD_DELAY这个状态与N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年英语青年教师教学基本功大赛笔试试题
- 庆阳市2026届三下数学期末综合测试试题(含解析)
- 2026学年江苏省吴江市一年级数学期末提升快速提分题详细参考解析详细答案和解析
- 2026年广东省珠海市第九中学中考一模语文试题及答案
- 2026学年宁夏回族自治区固原市一年级语文期末高分预测潜能激发题(附答案)详细答案和解析
- 2026年全国标准员之专业管理实务考试精准押题卷附答案
- 2026年全国一级注册建筑师之建筑结构考试历年考试题(详细参考解析)114
- 2026四川广安市选调公务员6人考试模拟试题及答案详解
- 2026年广东省韶关市住房和城乡建设局人员招聘笔试参考试题及答案详解
- 2026年秦皇岛市山海关区住房和城乡建设局人员招聘笔试参考试题及答案详解
- SYT 5074-2025《钻井和修井动力钳、吊钳》
- 江苏南京市秦淮区2025-2026学年八年级下学期英语期末试卷
- 济南市章丘市2026届三年级数学第二学期期末学业水平测试试题(含答案解析)
- 餐饮行业订餐合同规范模板
- 2026学年四川省宜宾市六年级数学期末模考快速提分题详细参考解析详细答案和解析
- 河道挡墙钢板桩围堰施工方案
- 2026年教育系统学校中层后备干部选拔考试题(含答案)
- 医院临床路径管理实施及考核评价细则
- 2026上半年软考中级真题及答案解析(考后更新)
- 2026年广东省深圳市重点学校小升初英语考试真题试卷(+答案)
- 钢结构施工工期压缩方案
评论
0/150
提交评论