TCPIP路由技术(卷一)第二版

更新时间:2023-03-12 00:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Chapter 1. TCP/IP Review

Chapter 2. IPv6 Overview

※ IPv6 Addresses

1. Address Representation

128位的IPv6地址被分为8个16位的段,用16进制数值表示,形如: 3ffe:1944:0100:000a:0000:00bc:2500:0d0b 书写IPv6地址的规则:

1. 每个段的开头的0可以被省略,例如上面的IPv6地址可以被写为:

3ffe:1944:100:a:0:bc:2500:d0b;

2. 单一连续的多个段的0,可以被简写为“::”。例如:

ff02:0000:0000:0000:0000:0000:0000:0005可以被简写为ff02::5(“::”在一个IPv6地址中只能存在一个,否则会出现混淆); 3. 掩码的规则是:3ffe:1944:100:a::/64 以下是部分特殊的IPv6地址: 默认路由:::/0;

unspecified地址,在NDP中使用:::/128

2. IPv6 Address Types

IPv6地址的三种类型: 1. Unicast 2. Anycast

3. Multicast

IPv6地址中不存在广播地址,取而代之的是\地址(FF02::1)。

Global Unicast Addresses

全球唯一的unicast地址。其格式为:

该格式在RFC 3587中定义,废弃和简化了之前将IPv6 unicast地址分为Top Level Aggregator (TLA)、Next-Level Aggregator (NLA)和其它区域的老格式。 主机部分(Host Portion)被称为Interface ID,Subnet ID包括在网络部分(Network Portion)中,global IPv6地址的Interface ID部分在大多数情况下长度为64位,Subnet ID在大多数情况下是16位。

IANA 和 Regional Internet Registries (RIRs)机构分配给Local Internet Registries (LIRs)的地址掩码通常为/32或者/35,LIR通常为大型的ISP,LIR分配的地址一般为/48,但在下列特殊情况下会有所不同(就是前面提到的大多数情况之外的情况):

1. 非常大型的客户可以分配比/48更短的掩码; 2. 有且仅有一个子网分配的时候应使用/64掩码; 3. 有且仅有一个设备分配地址的时候应使用/128 掩码;

Identifying IPv6 Address Types 地址的前几位决定了地址的类型:

High-Order Bits (binary) 00...0 00...1 High-Order Bits (Hex) ::/128 ::1/128 Address Type Unspecified Loopback Multicast Link-Local Unicast Site-Local Unicast (Deprecated) 11111111 1111111010 1111111011 FF00::/8 FE80::/10 FEC0::/10 2xxx::/4 or 3xxx::/4 Global Unicast (Currently allocated) 001 Reserved (Future global unicast Everything else allocations) 6Bone(公共IPv6研究网络)使用的地址从3ffe开始,而RIRs使用的地址由2001开始分配。

Local Unicast Addresses

IPv6中包括link local unicast地址,其作用范围(scope)被限制在单一链路(single link)内,它只在一条链路上面是唯一的,它的开头始终为FE80::/10; RFC 3879中,site local unicast地址为不赞成(Deprecated);

Anycast Addresses

anycast地址代表一种服务/业务(service)而不是一个设备,该地址也可以存在于多个提供相同服务的设备上。

anycast地址的好处在于router始终将数据路由到最近(或说cost最低)的服务

器。anycast地址由业务功能定义而不是由格式定义,所以理论上可以是任何IPv6 unicast地址,但是在RFC 2526中还是定义了anycast地址的格式。

Multicast Address

multicast地址指定了一组设备,这组设备称为一个multicast group。multicast地址绝不会成为源地址。

下图是IPv6多播(multicast)地址的格式。

前8位始终为1,接着的4Bit是Flag。目前前三位没有使用,始终为0,第四位指示该地址是否为一个永久的(permanent)、well-known的地址(0) 或者管理员指定的瞬时(transient)地址 (1)。后面的四位是(Scope)。 Scope Field Value Scope 0x0 0x1 0x2 0x5 0x8 0xE 0xF Reserved Node-Local Link-Local Site-Local Organization Local Global Reserved 下表列出了保留的well-known的IPv6多播地址。(都是Link-Local的) Address Multicast Group FF02::1 All Nodes FF02::2 All Routers Address Multicast Group FF02::5 OSPFv3 Routers FF02::6 OSPFv3 Designated Routers FF02::9 RIPng Routers FF02::A EIGRP Routers FF02::B Mobile Agents FF02::C DHCP Servers/Relay Agents FF02::D All PIM Routers 以上的IPv6多播地址,它们的作用范围都是link-local的。因为多播组(multicast group)总是一组独立(individual)的节点,所以不需要subnet段。剩下的112 bits 被用作Group-ID,定义不同的多播组(multicast groups)。前面的80 bits被设置为0,仅仅使用后面的32 bits。

※ IPv6 Packet Header Format

IPv6包头(长度为40个字节)的格式如下:

1. Traffic Class对应原来IPv4的ToS字段,现在用于DiffServ;

2. Flow Label是IPv6独有的,用以标识(labeling)流量(traffic)中的特殊流

(flow);

3. IPv6包中的头是定长的,总是40字节。IPv6 Payload Length 段是20 bit的,

所以可以有更长的负载(1,048,575 字节=1MB)。

4. Next Header段和IPv4中的Protocol段非常相似,当下一个头(next header)

是一个上层协议头的时候,它和IPv4中的Protocol段作用相同。下一个头也可能是一个extension header(具体见后面一节)。

5. Hop Limit段和IPv4中的TTL段的大小以及意义完全一样;

6. Source和Destination Address段和IPv4中的同名段意义完全一样,只是长度

变成128bit;

7. IPv4段中的Checksum段在IPv6中被去除,因为传输可靠性的长足进步,以

及上层协议都有差错控制功能,所以该段的作用变小,故而去除。

※ Extension Headers

Extension Headers段被加入IPv6地址格式中,以替代原来IPv4中的Option字段,这样做有以下的好处:

1. 数据包中只携带用到信息,不包括未使用的信息; 2. 新的可选功能可以通过这种方式添加IPv6数据包中;

Extension headers格式:

RFC 1883中定义了在IPv6包头中的Next Header字段取值意义: Header Hop-By-Hop Options Routing Next Header Value 0 43 Header Fragment Encapsulating Payload (ESP) Authentication (AH) Next Header Value 44 Security 50 Header 51 60 Protocol number value defined for that protocol (such as TCP = 6, UDP = 17, OSPF = 89, and so on) 59 Destination Options TCP/IP Protocols No Next Header

每个extension header指出跟随在其后的header:

RFC 1883还定义了extension header的出现顺序:

1. IPv6 Header 2. Hop-By-Hop Options

3. Destination Options (only if intermediate routers specified in the Routing

header must examine this header) 4. Routing 5. Fragment 6. Authentication

7. Encapsulating Security Payload

8. Destination Options (if only the final destination must examine this header) 9. Upper-Layer Header

※ ICMPv6

ICMPv6包头的格式:

ICMP for IPv4 的协议号为1, ICMPv6 for IPv6 的Next Header 数值是58。 ICMPv6在RFC 2463中定义,大多功能和IPv4相同,但有一些消息如Source Quench和Timestamp,在ICMPv6没有相等同的消息。

ICMPv6 使用 type 和 code 数值的组合来定义一般类别以及其下的子类别。 这些数值由RFC 1885 定义,具体如下: Type Code Message 1 0 1 2 3 4 2 3 0 0 1 4 0 1 2 128 0 129 0 DESTINATION UNREACHABLE No route to destination Communication with destination administratively prohibited Not a neighbor Address unreachable Port unreachable PACKET TOO BIG TIME EXCEEDED Hop limit exceeded in transit Fragment reassembly time exceeded PARAMETER PROBLEM Erroneous header field encountered Unrecognized Next Header type encountered Unrecognized IPv6 option encountered ECHO REQUEST ECHO REPLY 130 0 131 0 132 0 133 0 134 0

GROUP MEMBERSHIP QUERY GROUP MEMBERSHIP REPORT GROUP MEMBERSHIP REDUCTION Router Solicitation Router Advertisement ※ Neighbor Discovery Protocol

IPv6 具有即插即用(plug-and-play)特性。NDP (邻居发现协议,Neighbor Discovery Protocol)使得即插即用特性得以实现。

?

Router Discovery 节点可以无需DHCP的帮助而发现本地路由器(local routers);

?

Prefix Discovery 当节点连接到IPv6链路的时候,节点可以发现该链路指派的prefix(es);

? ? ? ?

Parameter Discovery 参数发现;

Address Autoconfiguration 节点无需DHCP的帮助可决定其完整地址; Address Resolution节点无需ARP能发现该链路其他节点的链路层地址; Next-Hop Determination 链路上的节点能决定到目的(destination)的下一跳链路层地址, 目的可以是本地的位置或是一个到达该目的的路由器;

? ? ?

Neighbor Unreachability Detection 能检测到链路上的邻居不再可达; Duplicate Address Detection 重复地址检测,即地址冲突检测; Redirect 和IPv4中的同名技术一样。

NDP 消息的作用范围(scope)总是link-local的,所以封装该消息的包应使用link-local的IPv6地址(FE80::/10)或是一个link-local作用范围的multicast地址。为了安全,传送所有NDP消息的IPv6 包的Hop Limit 段被设置为255。 若收到Hop Limit比此数值更小的包,则说明该数据包至少经过了一个路由器,则该数据包被丢弃(dropped)。 这就防止了NDP 被攻击或者被没有连接到(attached)本地链路的源地址(source)假冒(spoofed)。

1. NDP Messages

1) NDP 在RFC 2461中定义。它使用ICMPv6来交换必要的消息,还特别定义

了5种新的 ICMPv6 消息:

? Router Advertisement (RA) 由路由器生成来通告其存在和关于链路的

参数,如链路的prefixes、MTU和hop limits。这些消息被定期发送,同时也作为Router Solicitation消息的回应。

? Router Solicitation (RS) 由主机(host)发送来请求路由器回应一个RA。 ? Neighbor Solicitation (NS) 由节点发送用来请求其他节点的链路层地

址,也被用于DAD(duplicate address detection,重复地址检测)和NUD(neighbor unreachability detection,邻居不可达检测)。

? Neighbor Advertisement (NA) 被作为NS消息的回应发送。若一个节点

改变了它的链路层地址,则它会发送一个主动的(unsolicited)NA来通告新地址。

? Redirect 和IPv4中的ICMP Redirect消息相同,但在IPv6被移到NDP。

2) Router Advertisement 消息的格式。

其 ICMPv6 type 是134,code 是 0。封装RA 的IPv6数据包的源地址总是发送该数据包的接口的IPv6 link-local 地址。当RA 定期通告的时候,它的目的地址是all-nodes多播地址 (FF02::1);若RA是作为Router Solicitation

的回应,则它的目的地址是发送RS的节点的link-local地址。

? Hop Limit 发自此链路的数据包应给的Hop Limit数值。若发送此包的

路由器没有指定Hop Limit 则该段被设置为全零。

? M 是Managed Address Configuration标志。 若该位被设置,则表明发送

此数据包的路由器告诉该链路上的主机通过DHCPv6使用stateful 地址自动配置。若该位没有设置,则使用stateless地址自动配置。

? O 是Other Stateful Configuration标志。若该位被设置,则表明发送此数

据包的路由器告诉该链路上的主机使用DHCPv6来获得其他链路信息。M和O标志可以同时使用。

? Router Lifetime 仅当originating路由器是默认路由器(default router)

的时候,则将此段设置为除了0以外的数值。这种情况下,该段指定默认路由器的生存时间(lifetime),数值的单位是秒。最大可以有18.2 小时。

? Reachable Time 由NDP的Neighbor Unreachability Detection 功能使用。

当节点确认邻居可达性后这么长时间,节点便认为该邻居是可达的。单位是毫秒(milliseconds)。

? Retransmit Timer 由NDP的Address Resolution和Neighbor

Unreachability Detection 功能使用。指定重传(retransmitted)Neighbor Solicitation消息的最小时间间隔,单位是毫秒(milliseconds)。 ? RA 的Options 可能会包含以下选项:

? 生成该RA的接口的链路层地址 ? 该链路指定的MTU

? 指派给该链路的一个或多个prefix。 该信息对于 stateless 地址

自动配置非常重要,它告知连接到链路上的主机该链路的prefix是什么。

3) Router Solicitation消息的格式如下:

其 ICMPv6的type是133 , code是 0。封装RS 的IPv6数据包的源地址是发送该数据包的接口的IPv6地址,或者当该主机开始地址自动配置的时候,发送该RS包的接口没有指派地址,源地址被设置为::(全零)。目的地址是all-routers 多播地址(FF02::2)。Options段能包含发送该RS的接口的链路层地址。但是若封装该RS的数据包的源地址没有指定,则源链路层地址一定不能被包含。

4) Neighbor Solicitation消息格式如下:

其ICMPv6的type是135,code是0。封装NS 的IPv6数据包的源地址是发送该数据包的接口的IPv6地址,若NS因DAD(Duplicate Address Detection)功能而被送出,源地址则被设置为::(全零)。目的地址是一个被请求的节点对应(corresponding)的Target Address的multicast地址,或者就是target address。Target Address是该NS请求的目标(target)的IPv6 地址。 target address决不会是一个multicast地址。Options段能包含发送该RS的接口的

链路层地址。

5) Neighbor Advertisement消息格式如下:

其ICMPv6的type是136,code是0。

? R 是Router标志,该位被设置表明发送该数据包的设备是一个router。

该标志位在Neighbor Reachability Detection中使用。

? S 是Solicited标志。 该位被设置表明NA作为NS的回应送出。 ? O是Override标志,该位被设置表明此NA中的信息应覆盖(override)

邻居中相应的缓存条目并更新缓存的链路层地址。

? Target Address ,当NA 作为NS的回应送出的时候,NS中的Target

Address的数值被填入该段。如果NA是unsolicited的 (送出是为了通告originator的链路层地址有变动), 则该Target Address 段被填入originator的地址。

6) Redirect消息格式如下:

其ICMPv6的type是136,code是0。Target Address是链路上面更好的router的链路层地址;Destination Address是Target Address指向的router的IPv6地址;

2. Router Discovery

router使用RA向其连接的链路通告其存在,并向连接到该链路上面的主机通告其配置的参数。

RFC 2461指定了传输RA之间的间隔为4到1800秒之间,默认是600秒,RA的通告的最小周期默认为200秒。

unsolicited RAs的源地址是本地router的接口的link-local地址,目的地址为all-nodes multicast地址(FF02::1)。

1. 启用IPv6,并使得Cisco路由器在Ethernet和FDDI链路上面发送RA,命令:

ipv6 unicast-routing

2. RA发送的默认周期为200秒,通过以下命令更改:

ipv6 nd ra-interval

3. 传送的RA的Router Lifetime默认为1800秒,通过以下命令更改:

ipv6 nd ra-lifetime

若不想让router称为链路上的默认router,则可以将其Router Lifetime设置为0。

4. RA默认的Reachable Time为0(意味着未指定),通过以下命令更改:

ipv6 nd reachable-time

5. Retransmit Timer段被默认设置为0(未指定),通过以下命令更改:

ipv6 nd ns-interval

6. M和O的标志位可以使用以下命令配置:

ipv6 nd managed-config-flag ipv6 nd other-config-flag

7. 如果不想让某个接口发送RA,则可以使用以下命令禁止:

ipv6 nd suppress-ra

8. Cisco router默认将orinating接口的所有prefix都包含到RA中,可以通过以

下命令控制通告的prefix: ipv6 nd prefix

当主机在一条链路上面起来的时候,它会发送一个RS(目的地址为all-routers multicast地址FF02::2)来请求RA,取得相关router的信息,并将router加入默认router的列表中。

3. Address Autoconfiguration

当IPv6主机在链路上面第一次起来的时候,它能自己配置自己的接口地址,第一步就是决定其地址中64位的Interface ID部分。广播接口上面,使用MAC-to-EUI64方法将48位MAC地址转换为64位的Interface ID,过程如下:

U/L位,Universal/Local位

决定地址的前64-bit prefix是直接使用保留的link-local地址0xFE80::/64。例如上图中的接口最终的IPv6地址为:FE80::0200:0BFF:FE0A:2D51。

若主机只用和链路上面的设备通讯,则自动配置的link-local地址足够使用,但若需和链路外的设备通讯,则需要使用一个global IPv6地址。 取得global IPv6地址的两种方法:

1. stateful:咨询DHCPv6(由RFC 3315定义)服务器,取得地址信息。主机

可以预先配置DHCPv6服务器的地址,或者收到一个设置了M标志位的RA,指示其使用DHCPv6;

2. stateless:主机从收到的RA中获得一个或多个链路的prefix,然后将这些

prefix加上先前决定的Interface ID于是便成了全局唯一的 IPv6 地址。

4. Duplicate Address Detection

设备取得了一个unicast地址以后,在使用该地址之前必须进行DAD(Duplicate Address Detection),以确定该地址是唯一的。只有Anycast地址是例外的。 进行DAD的节点送出一个NS,其Target Address设置为需要验证的地址,目的地址设置为solicited-node multicast地址(ff02:0:0:0:0:1:FFxx:xxxx/104,其中x

代表任意数字)。solicited-node multicast地址是将Target Address中的地址的后24位前面加上ff02:0:0:0:0:1:FFxx:xxxx/104。

solicited-node multicast地址的优点在于:一个接口配置多个地址的时候可以只用发送一个NS;如果两个节点同时通过DAD验证相同的地址,则两者都会得知。 如果发送NS(DAD)的节点,收到了NA的回应,则说明该地址已经被使用,不能再使用。

5. Neighbor Address Resolution

IPv4使用ARP来发现IPv4地址和链路层地址的对应关系,而IPv6使用NDP来实现这个功能。

nc(neighbor cache)相当于IPv4的ARP cache,节点发送数据包的时候,如果没有在nc中找到条目,则将地址加入但标记为Incomplete,节点于是向solicited-node multicast地址发送NS,收到NS的节点,回应NA,节点收到NA后将条目加入nc,并将该条目标记为Reachable。 在Cisco router中查看nc的命令如下: show ipv6 neighbors

6. Privacy Addresses

不变的Interface ID会产生安全问题,RFC 3041定义了IPv6 privacy地址。privacy地址,使得Interface ID大概每天会变化一次(周期可以配置),或者每次获得新的IPv6地址的时候变化。

7. Neighbor Unreachability Detection

nc条目可以有以下几种状态:

1. 2.

Incomplete:NS已经送出,但NA还没有收到;

Reachable:地址近期确定(recently confirmed)为可达的。 “近期确定”

的意思是节点在RA指定的时间(Reachable Time段)内收到了该地址可达性信息。若在RA中没有指定,则默认的Reachable Time是30 秒;

3.

Stale:上次收到该地址的可达性确认到现在的时间已经超过了Reachable Time指定的时间;

4.

Probe:每个Retransmit Time 周期(默认为1000ms)向地址发送的可达性信息的确认(使用NS)已经送出。

5.

Delay:当向一个Stale地址发送数据包以后,该地址便成为Delay状态。该状态停留5秒,如果在此时间段内没有收到可达性信息的确认,该地址状态变为Probe。该状态是一个优化:在NS被送出前,给上层协议一个确认可达性机会。

邻居的可达性可以有两种方式确认:

1. 上层协议提供的信息,如TCP消息中的ACK 2. 回应probe地址的RA或者NA

Neighbor Unreachability Detection是确认节点和邻居之间的双向连通性,而不是单向的。

Chapter 3. Static Routing

Chapter 4. Dynamic Routing Protocols

路由算法至少要做到:

将网络可达性信息传给其他的router 接收从其他router传来的可达性信息

基于可达性信息决定最优路由,并将其记录到路由表中 对网络中拓扑变化作出反应,修正并将其通告

Chapter 8. OSPFv2

※ Operation of OSPF

1. Overview

从高层次上来看,OSPF可被理解为:

1) speaking router会从所有启用了OSPF的接口发送Hello包,有相同参数配置

相连的router会成为邻居(neighbor) 2) 毗邻(Adjacency)

3) 每个router会发送LSA到所有邻居。因为有很多链路状态(link state)类型

信息,故OSPF定义了很多LSA类型。

4) 每个收到从某个邻居过来的LSA的router,将此LSA记录到LSDB,并将此

LSA的副本发送到其它邻居。

5) LSA被flood传遍整个区域后,每个router都将有相同的LSDB

6) 当数据库完成后,每个router都会使用SPF算法,将自己作为root,计算到

每个已知目的的无环路的、最短(cost最低)的路径 7) 每个router都由自己的SPF tree建立其路由表

当网络达到收敛以后,OSPF在稳定(stable)的情况下只会每30分钟发送一次LSA

2. Neighbors and Adjacencies 邻居和毗邻

Cisco router决定其Router ID(RID)的方法如下:

1) 若Router ID被手动指定,则使用它

2) 若未手动指定,则使用最大的loopback接口IP地址

3) 若未定义loopback接口,则使用所有物理接口中IP地址最大的,不要求

该接口启用OSPF

4) 若被配置为Router ID的物理接口被删除或者down,router还是会继续

使用其IP为RID。

OSPF router是通过在Hello包中通告其RID开始建立邻居关系的.

3. Hello Protocol Hello协议

Hello协议的作用如下: 1) 用以发现邻居

2) 用以通告若干参数,两台router必须同意此参数才能成为邻居 3) 用作两个router之间的keepalive 4) 用以确保邻居之间的双向通信

5) 用以选举DR和BDR(在广播和NBMA网络上——只有在Broadcast和

NBMA网络中才会进行DR和BDR的选举)

HelloInterval:在启用OSPF的接口上定期发送Hello包的间隔(10秒-广播网络、30秒-非广播网络),配置命令如下: ip ospf dead-interval Hello包里包含的信息: 1) Router ID

2) 源router接口所属的Area ID 3) 源接口的地址掩码

4) 源接口的认证类型和认证信息 5) 源接口的HelloInterval 6) 源接口的RouterDeadInterval 7) router的优先级(priority)

8) DR和BDR的地址(其接口的IP地址,而非RID) 9) 5位的flag,指示其可选能力

10) 源router的邻居的Router ID,此列表仅包括从源接口在RouterDeadInterval

时间内收到的Hello包的发送者的RID

在收到Hello包以后router会对其包含的信息进行检验。如果收到此包的接口上

的配置与其不匹配,则此包被丢弃;如果所有信息匹配,则此Hello包被认为有效。如果源router的RID已经在邻居列表中存在,则RouterDeadInterval计时器被重置。若此RID没有在邻居列表中,则将其加入邻居表。

router从一个接口发送Hello包的时候,该包中会包含其所有邻居的RID。如果router收到一个有效的Hello包,其中包含了自己的RID,则此router便知道与发送Hello包的router之间的two-way通信已经建立。

在two-way通信确立以后,毗邻(adjacency)将被确立(根据网络类型)。

4. Network Types 网络类型

OSPF定义的5种网络类型: ? point-to-point 点到点 ? broadcast 广播

? nonbroadcast multiaccess(NBMA) NBMA ? point-to-multipoint 点到多点 ? virtual links 虚链路

point-to-point网络(如T1/E1, DS-3, SONET/SDH)中,不选举DR和BDR,成为邻居的router总会变成毗邻(adjacent)。OSPF包发送的地址为224.0.0.5(AllSPFRouters)。

broadcast网络(如Ethernet, TokenRing, FDDI)中,会选举DR和BDR,Hello会发送到224.0.0.5,其它的router会向224.0.0.6(DR和BDR)发送LSU和LSAck。 NBMA网络(如X.25, FrameRelay, ATM)中,选举DR和BDR,但所有的OSPF包都以单播(unicast)的形式发送。

point-to-multipoint网络是NBMA网络的一个特殊配置,它认为网络是point-to-point链路的集合,这上面不选举DR和BDR(和point-to-point网络一样),但所有的OSPF包都以单播的形式发送到已知的邻居。

virtual links在router上被认为是一个unnumbered point-to-point网络,不选举DR和BDR,OSPF包在上面以单播传送。 网络一般可分为以下两个类型:

1) Transit网络:连接两个或更多的router,将数据包从一个网络传送到另一个

中(数据在Transit网络上面传输,但是不以其为起点也不以其为终点。说白了就是可以看成一个传输数据的云)。

2) Stub网络:只连接一台router,所有数据包在Stub网络中都由此发起或传送

到此地。OSPF将主机路由通告为Stub网络,loopback接口也被认为是Stub网络,并被以主机路由通告。

5. Designated Routers and Backup Designated Routers DR和BDR

1) 由于需要flood LSA,在广播网络中便出现两个问题: ? 每个router之间需要建立的adjacency数量巨大

? 每个router将LSA flood到adjacent邻居会产生大量无用的copy 解决上述问题的方法便是选举DR。DR的作用如下: ? 向其他的OSPF区域描述本广播网络 ? 控制广播网络中的flood过程

2) 广播链路本身被认为是一个“虚拟节点”(pseudonode)或一个虚拟路由器

(virtual router)。SPF树计算完毕后,广播链路显示为一个节点(node),连接此链路的router都连接到此节点。router到此节点的cost是其连接此链路的接口的cost,但节点到任何router的cost为0(所以从一个节点通过广播链路到另一个节点的cost就是此节点连接广播链路出口接口的cost)。 3) 网络中的每个router都要和DR建立adjacency,DR将pseudonode描述成为

一个特殊的Network LSA。DR是接口而不是一个router。 4) 为了保证对DR的冗余,提出了BDR

5) DR和BDR选举正常进行需要满足以下几个前提:

a) 每个接口有一个priority(0~255)

b) Hello包中包含了源router想参加选举的接口的prioriy和IP地址 c) 第一次在广播网络上激活的接口将DR和BDR设为0.0.0.0,并设置一个

wait timer,其值为RouterDeadInterval(若在此计时器超时后还未收到

DR和BDR的信息,便开始DR和BDR的选举)

d) 广播网络上存在的接口将DR和BDR的地址记录于接口数据结构

(Interface Data Structure)中

6) 选举过程如下:

a) 在一个或多个邻居变为2way以后,检查每个邻居Hello中的priority、

DR和BDR字段,将所有eligible(优先级大于0,状态至少为2way)的邻居列出(包括自己)

b) 在列表中建立一个没有将自己声明为DR的邻居的子列表

c) 若在此子列表中有一个或多个邻居声明自己为BDR,则priority最高或

RID最高的被本router选举为BDR

d) 若没有邻居声明自己为BDR,则priority或RID最高的被选为BDR e) 若在DR列表中有一个或多个邻居声明自己为DR,则priority或RID最

高的被本router选为DR

f) 若进行此计算的router被选为DR或BDR,或者不再是DR或BDR,则

重复b)到f)的步骤。

以上提到的过程可以简单地理解为:当router在网络上激活并发现邻居后,它首先检查有没有DR和BDR存在,若已经有它们的存在,则接受它们,若没有则开始选举,priority或者RID最高的变为DR,第二高的变为BDR。

当DR和BDR被选出以后,DROther会与DR和BDR建立毗邻。所有router都向224.0.0.5发送Hello,DROther发送更新时使用224.0.0.6,这个地址只有DR和BDR能收到。DR发送更新则会使用224.0.0.5,这个地址所有的OSPF router都可以收到。

6. OSPF Interfaces(P8)

1) Interface Data Structure:OSPF router为每个启用了OSPF的接口都保存一个

数据结构,这个数据结构便是Interface Data Structure。 ? IP Address and Mask:此接口的IP地址和掩码 ? Area ID:此接口的Area ID

? Process ID:OSPF进程号 ? Router ID

? Network Type网络类型:Broadcast、NBMA、Point-to-point、Point-to-Multipoint、

Virtual link

? Cost:108÷Bandwidth=100000000÷带宽(即100M为1,10M为10)

这个可以使用命令:auto-cost reference-bandwidth更改 更改接口cost的命令:ip ospf cost

? InfTransDelay:即Transit Delay,从此接口出去的LSA的age增加的秒数

配置命令:ip ospf transmit-delay

? State:Down、Point-to-point、Waiting、DR、Backup、DROther、Loopback ? Router Priority:0~255

配置命令:ip ospf priority

在广播型网络中的interface data structure ? Designated Router ? Backup Designated Router

? HelloInterval:广播网络(P2P)都为10s,非广播网络为30s ? RouterDeadInterval:HelloInterval×4

? wait timer:若在此计时器超时后还未收到DR和BDR的信息,便开始DR

和BDR的选举。时间长度=RouterDeadInterval

? RxmtInterval:Retransmit Interval。重传(Retransmit)队列中的OSPF数据

包,在重传前等待的时间。默认为5s。

? HelloTimer:此计时器超时以后便从此接口发送一个Hello包=HelloInterval ? Neighboring Routers:只显示adjacent的Router ID ? AuType:Null、Simple、Password、Cryptographic(MD) ? Authentication Key:64位密码 2) Interface State Machine 接口状态机

接口在变为完全可用之前,会经历若干状态的变化:

? Down:接口的初始状态。当接口在此状态下是不可用的。其所有的parameter

都设为初始值,接口上没有流量收发。

? Point-to-point:在接口类型为point-to-point、virtual link和point-to-multipoint

时,其状态为point-to-point。在此状态下接口完全可用,定期发送Hello包,并试图和链路另一端建立毗邻(adjacency)。

? Waiting:只有在broadcast和NBMA网络中才会出现此状态。在此状态下,

接口会收发Hello包,并设置wait timer,试图确定DR和BDR。

? DR:此接口成为DR。在此状态下,试图在网络中和其他的router建立毗邻

(adjacency)。

? BDR:此接口为BDR,并试图和DROther建立毗邻。

? DROther:此接口不是DR也不是BDR,在此状态下,接口试图和DR以及

BDR建立毗邻。

? Loopback:接口被硬件或者软件环回了,此接口的IP地址仍被Router LSA

通告。

7. OSPF Neighbors(P14)

1) 邻居关系的最终目的是建立毗邻(adjacency),并于其上传送路由信息 2) 建立毗邻(adjacency)的作用在于:建立2-way以后进行数据库同步。DDP

(DBD)、LSR、LSU和LSAck包在同步过程中被使用来确保数据信息的一致性。为了让两个router建立毗邻(adjacency),其中有一个便会成为master,另一个成为slave。Master控制DDP(DBD)的交换。 3) 邻居关系的建立和维护是通过Hello包的交换实现的。

? 在broadcast和point-to-point网络中,Hello被发送到224.0.0.5。

? 在NBMA、point-to-multipoint和virtual link网络中,Hello包被以单播形式

发送到各个邻居。于是在这样的网络中,必须首先通过手动或自动配置知道其邻居的存在。

? 在每种网络类型中,Hello包都以HelloInterval的周期发送,只有一种情况例

外:在NBMA网络中,router会向其状态为Down的邻居以PollInterval(Cisco默认为120s)的时间间隔发送Hello包。

4) Neighbor Data Structure

使用命令show ip ospf neighbor可查看该router上面的Neighbor Data Structure。该结构中包括的内容有: ? Neighbor ID:邻居的RID

? Neighbor IP Address:邻居的接口IP ? Area ID:邻居所在的区域

? Interface:邻居所在的接口(从本机哪个接口收到的Hello) ? Neigbor Priority:邻居优先级

? State:邻居的状态(Down、Attempt、Init、2-way、ExStart、Exchange、Loading、

Full)

? Designated Router:邻居Hello包中包括的DR

? Backup Designated Router:邻居Hello包中包含的BDR。

? PollInterval:只有在NBMA网络中该值才会被记录。因为在NBMA网络中

可能不能自动发现邻居,若邻居状态为Down,则router会以PollInterval的时间间隔向邻居发送Hello包,这个周期比HelloInterval长,Cisco router的默认值为120秒。

? Neighbor Options:指示邻居所支持的OSPF能力(DN、O、DC、EA、N、P、

MC、E、MT)。

? Inactivity Timer:周期为RouterDeadInterval的定时器。当此定时器超时却没

有从该邻居收到Hello,则认为该邻居Down。

没有在show ip ospf neighbor命令中显示的neighbor data structure内容: ? Master/Slave:在ExStart状态下协商确定。

? DD Sequence Number:最近从邻居接收的DDP(DBD)序列号。

? Last Received Database Description Packet:记录的最近收到的DDP的Init、

More、Master标志位、Option以及其序列号(sequence number)。这些信息被用来确定下一个DDP(DBD)是否重复。

? Link State Retransmission List:LSA已经被flood到该adjacency邻居,但还

未被确认(acknowledge)的列表。这些LSA会在每个RxmtInterval周期被重传,直到收到确认信息或者adjacency断开。

? Database Summary List:在数据库同步期间通过DDP传送给该邻居的LSA

列表。这些LSA会在router进入exchange状态的时候用于建立LSDB。 ? Link State Request List:这个列表中保存了从邻居收到的DDP中比本地LSDB

中更新的LSA条目。LSR将被发送到该邻居以获取这些LSA的copy,当这些请求的LSA从LSU收到后,Request List就会删除他们。 5) Neighbor State Machine 邻居状态机

在router的邻居变为完全的adjacency之前会经历如下几个状态:

? Down:Hello包不会被发送到一个down的邻居,除非该邻居在NBMA网络

上。当邻居状态从更高状态变为down状态时,链路状态、Retransmission,Database Summary和Link State Request列表被清空。

? Attempt:此状态只会在NBMA邻居上出现,此时的邻居被手动配置,可以

参加DR选举的(DR-eligibe)router到邻居的接口首次变为Active的时候,它会将邻居状态变为Attempt。此router会以HelloInterval的周期向邻居发送Hello,若此router是DR或BDR,则它也会如此做。

? Init:从邻居收到一个Hello包,但还未建立2-way通信,此状态(或更高)

中,router会将其所有直到的邻居的RID放入Hello的邻居字段。

? 2-way:router收到从邻居发来的包含自己RID的Hello包的时候,这就意味

着双向会话已经建立。在MA(multi-access,即broadcast和NBMA网络)网络上,邻居必须处于此状态(或更高)才能参与DR和BDR的选举。从一个在init状态的邻居那里收到一个DDP也会使这个邻居变为2-way状态。 ? ExStart:router和在此状态下的邻居建立master/slave关系,并为交换DDP

而决定初始的DDP的序列号。高RID的成为master。

? Exchange:若邻居在此状态下,router会将描述其整个LSDB的DDP发送给

这个邻居,此时router也会同时发送LSR,请求更新的LSA。

? Loading:当邻居处于此状态时,router会向邻居发送LSR,请求获得在

Exchange状态的时候得知的那些更新(more recent)的LSA,这些LSA还没有通过LSR请求,所以还未收到。此状态便是要通过发送LSR请求获得这些最新的LSA条目。

? Full:当LSDB同步完毕后,邻居状态才会变为Full。在此状态的邻居已经

是完全建立邻居关系了(fully adjacent),这些adjacency也会在Router LSA和Network LSA出现。

8. Building An Adjacency(P21)

1) point-to-point、point-to-multipoint以及virtual link网络上的邻居总是会建立

adjacency,除非它们Hello中的参数不匹配,在broadcast和NBMA网络中,DR、BDR和所有邻居成为adjacency,但DROther之间不成为adjacency。 2) 建立adjacency的过程中会用到DDP、LSR、LSR几种OSPF包。

3) DDP发送的是router的LSDB中的每条LSA的汇总描述(LSA头部),而非

完整的LSA,收到此DDP的router会根据这些信息判断自己是否拥有最新的LSA。在DDP包Option字节的后面有1个字节的最后三位分别标识I、M、MS这三个标志位,三个标志位的意义如下: ? I位:指示此为第一个DDP(Initiate)

? M位:More位。指示这是否为最后一个DDP。(置为1则表示不是最后

一个DDP)

? MS位:Master/Slave位。置为1表示此DDP由Master送出。

4) 在ExStart状态协商Master/Slave的时候,两边router都会发出一个空的DDP,

将其MS位置为1。DD 序列号(sequence number)会被两个router各自置为其认为当时应该顺序使用到的序列号(sequence number),拥有较低router ID的router会变为slave并将自己DDP的MS位置为0,sequence number设为master的sequence number进行回应,这个DDP是第一个将LSDB中的LSA汇总(LSA头)包含进去的包。在Master/Slave协商完成的以后,邻居状态变为Exchange。

5) 当邻居处于Exchange状态时,router会开始进行database的同步,它们各自

发送自己的LSDB的汇总描述给对方,收到DDP的router会将最新的LSA头部(只是头部,还没有获得具体条目)放入LSR列表,然后会发送LSR包向对方所要此LSA的完整版本copy。当请求的LSA被收到时,router便会将LSR列表中的相应条目删除。

6) 在LSU包中传送的LSA都必须被独立地确认(Acknowledgement)。因此从

LSU中发送的LSA会进入Link State Retransmission List。当它们被确认后,便会从该列表中删除。确认的方式有以下两种:

? 显式确认(Explicit Acknowledgement):收到包含此LSA头的LSAck包。 ? 隐式确认(Implicit Acknowledgement):收到包含相同(或更新)的LSU

包。

7) master控制同步进程。当slave收到master的DDP以后,它会以相同序列号

DDP对其进行确认(Acknowledgement),则master重传此包。

8) slave仅在回应master的DDP的时候才会发送DDP。若收到一个新序列号的

DDP,则以相同的序列号回应;若收到的DDP是已经确认过的,则重传该确认包。

9) 当收到M位置为0的DDP(DBD)包以后,slave会送出一个M位同样置

为0的确认DDP(其中包括slave的LSDB的完整描述)。此时slave认为同步已经完成。而master认为同步完成的条件是:送出描述其LSDB的所有DDP后(将M位置为0),并收到一个M位也置为0确认DDP(其序列号和送出的相同)。

10) 在状态变化的过程中,若任一master的LSR列表不为空,则它不必等到

Loading状态才送出LSR包,它在Exchange状态下也会送出LSR包。这样会更有效率。

9. Flooding(P25)

1) Flooding使用两种OSPF包:LSU(4)、LSAck(5)。

2) 尽管LSA会被扩散(flood)到整个区域(area),但LSU和LSAck只会有

毗邻的两个节点之间传输。

3) 在PtoP网络中,LSU包会被多播送到AllSPFRouters(224.0.0.5)这个地址。 ? 在PtoMP和Virtual Link网络类型中,LSU包会以单播的形式传送给邻居

的接口地址;

? 在Broadcast网络类型中,DROther的LSU会发往AllDRouters(224.0.0.6)

这个地址,DR会将该LSU发送到其邻接的(adjacent)邻居(意味着已经建立邻居关系),所有收到此LSR的路由器会将其扩散到它们的其它接口。BDR也会从DROther收到LSU,但它不会将其扩散。

? 在NBMA网络类型中,DR和BDR与在Broadcast网络类型中一样,只是

会使用单播发送LSA到邻居。(需要手动指定邻居,发送单播) 4) Reliable Flooding:Acknowledgments

每个LSA都会被确认,通过隐式和显式两种方式。 任何网络类型中,重传的LSU总是以单播发送。

确认可以是direct或delayed两种方式。延迟确认可以使一个LSAck包确认多个LSA条目,在广播网络中还可以确认多个不同邻居的LSA。延迟时间应比RxmtInterval短,否则会引起重传。

5) Reliable Flooding:Sequencing,Checksums and Aging

序列号为32位长度,其取值在InitialSequenceNumber(0x80000001)到MaxSequenceNumber(0x7FFFFFFF)之间。当一条LSA的序列号已经达到MaxSequenceNumber的时候,路由器会flush旧的LSA:将该LSA的age设为MaxAge然后将其扩散,收到邻居对该LSA所有的确认以后,新LSA便会使用InitialSequenceNumber作为其序列号。

校验和(checksum)为16位长度,计算的是除age字段外的所有LSA内容的校验和。LSDB中的LSA会每5分钟检查一次校验和。

age为16位长度,取值0~3600,以秒为单位,最大取值MaxAge为一小时。age在LSDB中也会持续增长。查看age的命令:show ip ospf database

10. Area(P29)

1) 路由器处于一个area内部,他不会知道area外部拓扑的详细信息,这是由于:

? 路由器只会和区域内的其它路由器共享一个相同的LSDB,而不是整个

OSPF域(domain)。

? 更小的LSDB会使得LSA和CPU占用更少。

? 因为只有区域内的路由器拥有相同LSDB,所以大多数flooding也可以

被限制在一个area的范围内。

2) area由Area ID定义,为32位长度,取值范围:0.0.0.0~255.255.255.255。 3) area有3种类型:intra-area、inter-area和external。

本文来源:https://www.bwwdw.com/article/vabw.html

Top