add lots file of APUE

This commit is contained in:
geekard
2012-10-30 20:31:20 +08:00
parent 05e8ae5877
commit 6642e173f9
113 changed files with 4954 additions and 181 deletions

198
Zim/job/BGP原理总结.txt Normal file
View File

@@ -0,0 +1,198 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T10:40:17+08:00
====== BGP原理总结 ======
Created Tuesday 04 September 2012
http://blog.chinaunix.net/space.php?uid=12380499&do=blog&id=105407
BGP,边界网关协议.一种应用在**大型网络**上的协议,主要用来控制AS间通信,具有灵活的可控性,同时也是一种复杂的协议.
类似距离矢量特性,BGP是一种路径矢量协议,__每个AS作为一跳__.它通过TCP协议运行,使用TCP 179端口通信,可靠性由TCP进行控制,因为BGP的路由表一般来说都很大,所以使用TCP利用窗口滑动技术可以提高传输效率,这一点不同于EIGRP、OSPF这样的IGP协议,后者使用1-1的确认方式,效率低下。BGP存活消息每隔60秒发一次,保持时间180秒。
BGP必须__手工指定邻接关系__,BGP邻接关系分为**内部邻居**(处于同一AS中),内部邻居之间可以跨越多个路由器,默认TTL跳数为255,所以无需额外使用多跳属性;**外部邻居**(不同的AS中),一般来说外部邻居都是__直连__的邻居,因为这样通过直连或者静态路由就可以到达对方,如果不是直连,则需要有本地路由配合确保能够到达对方,而且必须明确设置多跳属性,因为外部BGP邻居默认跳为1跳,配置方法:neighbor ip ebgp-multihop num。
BGP定义的属性:
公认强制属性:1。AS路径 2。下一跳 3。源头 这些都是__必须被传播__的。
公认自由:1。本地优先级 2。原子聚合(告诉邻接AS,始发路由器对路由进行了聚合)
可选传递:1。聚合站 2。共同体
可选非传递:MED(多出口鉴别器)
CISCO私有还多了一个:权重
AS路径属性:每个BGP路由都携带这样的路径列表,BGP拒绝列表中包含自己AS的路径,这样确保无环路。
下一跳属性:从EBGP学习到路由条目,在__传播给IBGP__时候,默认保持下一跳不变,这里的下一跳是进入下一个AS的边界路由器的接口IP,因此在AS内的路由,如果要到下一个AS,它就要首先查找BGP表,从BGP表里发现要通过的下一跳,所以IP路由表中必须要有到达下一跳的路由信息,否则下一跳不可达的BGP路由是不会被装入路由表的。如果AS内的路由器没办法获得到达下一跳的路径信息,那就应该使用next-hop-self属性(修改下一跳)。对于多路访问网络第三方下一跳会自动修正下一跳为最合适的接口(但是NBMA情况下,第三方下一跳有时会出问题)。BY:http://www.mycisco.cn
源头属性:定义路径信息的初始来源的源头,它可能为:
1。IGP,起始在AS内部,通过NETWORK宣告的。用i表示
2。EGP,早期的,现在已过时。
3。不完全,源头未知或者通过其他方法获悉的,例如被充分发到BGP中的,不完整的源头用?表示。
本地优先级属性:只在AS内部有作用,只发送给内部BGP邻居,影响__数据出去__的方向。CISCO默认值100。可以使用在BGP进程下bgp default local-preference num来修改,越大越好。可以在neighbor ip remote-as num后跟上route-map name in,在IN方向上对不同的外部网络设置不同的本地优先级,这样本地AS到达不同的外部网络时可以选择不同的出口。这里需要注意,为了影响自己AS到达外部网络,所以外部网络在从不同的外部邻居学习进来的时候就要在各自的IN方向设置本地优先级,这样本地BGP表里才会是通过不同的接口有不同的本地优先级别。
权重属性:CISCO私有的,只对当前路由器有效,影响数据出方向,权重越大越好,可以使用neighbor ip remote-as num weight num让权重与外部邻居挂钩,从而让一个路由器有多个到外部AS出口时选择最大的一个。
MED属性:在自己AS内定义,影响外部AS数据进来,这是唯一一个影响__数据入方向__的属性,正因为是影响数据入方向,所以MED作的工作是传播给邻接AS,让邻接AS根据不同的MED选择不同的出路。因此在使用route-map作为neighbor命令的参数时候要使用OUT方向(影响别人从而达到影响自己的目的)。全局修改MED在BGP进程下使用default-metric num.
BGP**水平分割**原则:从IBGP学到的不应该在传播给下一个IBGP(学习的IBGP除外)。正是由于此,__IBGP之间需要进行全互连__,这样才能确保各个IBGP都能学习到外部BGP路由。
BGP**同步**规则:BGP规定,BGP路由器不会将通过IBGP学习到路由发送给EBGP(但是会装入BGP表,但不是最优路径,所以不会发给别人),除非这个路由在IGP中有获悉,即只有当IGP与IBGP都有到达某个网络的路由时,这个BGP路由才能发送给EBGP(从外部学到的BGP路由必须在IGP中也存在对应的路由,这就要求将外部BGP重分发到IGP中,一般来说这种情况不可能,外部BGP路由太大了)。本来这个规则是为了防止路由黑洞的,但是却带来了一个麻烦,即一旦IGP里路由与BGP的不同步,路由就不能正常被使用。因此现在的ISP网络大都是在AS内实行全互连,且同时都运行BGP,这样就可以关闭同步。
指定BGP邻居的方法:
neighbor 邻居IP、对等体组名 remote-as AS号
设置对等体组方法:
neighbor 对等体组名 peer-group
加入对等体组方法:
neighbor 对等体IP peer-group 对等体组名
BGP对对等体独特要求:BGP的路由更新源地址一定要是和指定邻居中的IP一致。因此如果使用环回地址作为对等体IP,那么就需要配上neighbor 对等体IP(环回) remote-as update-source 环回地址.外部对等体最需要注意的就是多跳问题,见上面总结,同时也必须确保这个跳是可达的。
=============一个范例============
router bgp 65111
neighbor 1.1.1.1 remote-as 65111 (内部邻居,使用的对等体IP是个对方的环回地址)
neighbor 1.1.1.1 update-source loopback0 (指定更新源是自己的环回地址)
neighbor 1.1.1.1 next-hop-self (修改下一跳)
neighbor 2.2.2.2 remote-as 65222 (外部邻居,也使用对方环回接口)
neighbor 2.2.2.2 ebgp-multihop 2 (设置多跳,跳数2)
neighbor 2.2.2.2 update-source loopback 0 (指定更新源是自己的环回地址)
ip route 2.2.2.2 255.255.255.255 172.16.31.2(设置到达外部邻居环回接口的路由,否则邻居关系起不来)
重置BGP绘画,因为BGP一般运算很占资源,所以一般不能轻易使用clear ip bgp * ,一般应带上soft in或者soft out参数。
BGP邻居的状态:
1。IDLE
2。CONNECT
3。ACTIVE
4。OPEN SENT
5。OPEN CONFIRM
6。Established
只有在已建立状态后,路由器才相互发送路由信息。
空闲状态表示路由器还不知道如何前往邻居,如果一直是这个状态,要检查邻居配置以及1、2层连通性,检查有无到达对方的网络。
活动状态表明,它已经找到邻居,并发送了打开分组,但还未得到响应。如果长时间这个状态,检查邻居是配置了正确的邻接关系和检查链路是否是单向链路,或检查对方有无回来的路。
CISCO路由器对BGP条目的选择标准:(BGP只选一个最好的路径加入路由表)
1。权重最大的(当前路由器有效)
2。本地优先级最高的(AS内有效)
3。当前路由器通告的(next hop=0.0.0.0)
4。AS PATH最短的
5。源头编码最小的(igp<egp<不完全)
6.MED最小的
7。EBGP优先IBGP路径、
8。经由最近的IGP邻居的路径
9。最老的EBGP路径
10。BGP邻居中路由器ID最小的
11。邻居IP地址最小的
BY:http://www.mycisco.cn
BGP的汇总特性:
关闭与否auto-summary对影响BGP控制重分来进来的路由汇总特性,若打开该功能,则重分发进来的子网会被自动汇总为相应的分类网络,关闭则保持分来而来的子网。新版本IOS对重分来的路由不再进行自动汇总。
network宣告规则:
1。如果命令中不带掩码且自动汇特性打开,要求宣告为对应的分类网络,此时要求路由表中必须存在至少该分类网络的一个子网路由,否则不会通告该分类网络到其他路由器的BGP进程。如果最后一个子网也消失了,那路由器将从所有其他路由器中撤回这个分类网络。
如果命令中不带掩码且自动汇特性关闭,则需要IP路由表中有一条严格相同的路由存在.
case1:
router bgp 1
network 172.16.0.0
r3-2514#sh ip bgp
结果: 没有宣告进去.前提:未关闭汇总,宣告的是主类,IP表中无子网路由及精确一致路由.
=====================================================================
case2 :
router bgp 1
network 172.16.0.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 172.16.0.0 0.0.0.0 0 32768 i
结果:正常宣告.前提:未关闭汇总,宣告的是主类,IP表中有主类的子网存在.
===================================================================
case3:
router bgp 1
network 172.16.0.0
ip route 172.16.0.0 255.255.0.0 null 0
r3-2514#sh ip bgp
BGP table version is 1, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* 172.16.0.0 0.0.0.0 0 32768 i
结果:宣告进去,(特殊:变成最优要等很长时间).前提:未关闭自动汇总,宣告的是主类,IP路由表有精确匹配,但无子网路由.
=================================================================
case4:
router bgp 1
network 172.16.10.0
r3-2514#sh ip bgp
结果:宣告不进去, 前提:宣告172.16.10.0且不带MASK,没有配置子网路由和精确匹配.
=================================================================
case5:
router bgp 1
network 172.16.10.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去,前提:宣告172.16.10.0不带MASK,配置精确匹配.
==================================================================
case6:
router bgp 1
network 172.16.10.0
ip route 172.16.10.0 255.255.255.252 null 0
结果:宣告不进去.前提:宣告的是172.16.10.0 不带mask,IP路由表中有它的子网路由.
总结:未关闭自动汇总时,使用主类网络通告(不带MASK),同时IP表中存在至少一条子网路由(或精确匹配的).
=======================================================================
case7 :
router bgp 1
no auto-summary
network 172.16.0.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告主类,有子网路由.
========================================================================
case8:
router bgp 1
no auto-summary
network 172.16.0.0
ip route 172.16.0.0 255.255.0.0 null 0
r3-2514#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 172.16.0.0 0.0.0.0 0 32768 i
结果:正常宣告.前提:关闭自动汇总,宣告主类,IP路由表有完全匹配路由.
==========================================================================
case9:
router bgp 1
no auto-summary
network 172.16.0.0或net 172.16.10.0
ip route 172.16.10.0 255.255.255.0 null 0
r3-2514#sh ip bgp
结果:宣告不进去.前提:关闭自动汇总,宣告172.16.10.0或172.16.0.0,IP路由表有完全匹配路由.
===========================================================================
case10:
router bgp 1
no auto-summary
network 172.16.10.0
ip route 172.16.0.0 255.255.0.0 null 0
r4-2501#sh ip bgp
结果:宣告不进去.
总结:关闭汇总,只能通告分类网络(不带mask),且必须要求宣告的网络与IP路由表的条目要完全匹配.
============================================================================
2。如果命令中带掩码,那么IP路由表中必须存在有一条与该通告命令完全一样(网络号和掩码都要相同)的路由,否则不会通告该网络。
关于BGP宣告方面文章看这里:
http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800945ff.shtml#topic1
利用network进行BGP的汇总:
其实本身network并不是汇总的命令,它是BGP宣告网络的方法,只是我们可以利用它在宣告的时候就宣告为汇总的网络。
从BGP的network宣告规则可以看出,要宣告一个汇总路由条目,前提是路由表中要已存在相同地址和掩码的路由条目,所以很多时候为了宣告汇总路由往往需要先手工指定一个相同地址和前缀的静态路由(指向NULL0接口),这样既可以保证宣告成功又能保证当没有具体子网时候数据被丢弃,防止路由黑洞。例如:
route bgp 65111
network 192.168.0.0
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
这样的宣告可以改成这样汇总:
ip route 192.168.0.0 255.255.255.252 null 0
router bgp 65111
network 192.168.0.0 255.255.252.0
利用aggregate-address汇总BGP路由:
这是汇总BGP表里路由的命令,它只聚合已经存在于BGP表中的网络。它在汇总后会自动增加一条指向空接口的路由到路由表中。
aggregate-address ip地址 掩码 summary-only|as-set
参数summary-only表示只通告汇总路由出去,默认是汇总+具体路由一起出去的。
as-set表示在聚合路由的的AS路径属性字段里填上所有具体路由中包含的那些AS号,否则只包含执行聚合的AS的号。

7
Zim/job/BGP集训营.txt Normal file
View File

@@ -0,0 +1,7 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T10:22:58+08:00
====== BGP集训营 ======
Created Tuesday 04 September 2012

View File

@@ -0,0 +1,132 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T10:23:08+08:00
====== 第一天BGP概览基础 ======
Created Tuesday 04 September 2012
http://ltyluck.blog.51cto.com/170459/204641
要访问Sina的网站,我们需要有以下几个步骤:
1、有ISP的接入
2、有到该站点的路由
3、有DNS提供IP到命名的服务
Inter-domain routing(域间路由)
域(domain):即自治系统(Autonomous system,AS)
AS:处于同一技术掌控和政策掌控之下的连续的路由范围。为了解决Internet的扩展性,并且降低管理成本,增加公网(Internet)流量选路策略的灵活性。
路由协议根据运算机制进行分类:
1. 静态路由
2. 动态路由
动态路由根据部署的边界进行分类:
1. 域内路由(intra-domain routing):也叫做内部网关协议(Interior gateway protocol,IGP)
2. 域间路由(inter-domain routing):也叫做外部网关协议(Exterior gateway protocol,EGP)
注:这里的网关等同于AS。
常见的IGP:RIP,OSPF,IS-IS,__EIGRP,IGRP__
常见的EGP:EGP,BGPv1, BGPv2, BGPv3, BGPv4
EGP被淘汰是因为他没有一个度量的标准。
BGPv1, BGPv2, BGPv3:完全被淘汰
域间路由解决方案要考虑到的问题:
1. 扩展性
2. 安全性
3. 路由策略
BGP对应上述问题衍生出的特点:
1. 触发式增量更新
2. 可靠连接(TCP)
3. 没有度量(Metric)的概念,采用__属性(Attribute)__来实现选路功能,并且有一套非常强大的选路策略工具集。
TCP 179端口作为通信端口,滑动窗口,三次握手。
三次握手来建立连接:
1. 源设备向目标设备发送一个TCP的SYN(S————D:SYN)
2. 目标设备向源设备反回一个TCP的SYN ACK(d————S:SYN ACK)
3. 源再向目标设备反馈一个TCP的ACK(S————D:ACK)
传输数据
四次握手来终止连接:
1. 源向目标方发送一个FIN(S————D:FIN)
2/3.分别目标设备向源设备发送一个ACK/FIN(D——S:ACK/FIN)
4. 源设备向目标设备发送一个ACK(S——D:ACK)
连接终止。
如果收到一个TCP带有RST字段的时候,强制将这条TCP给切断
需要一种保活机制来维护TCP连接通路。这种机制信息叫keepalive
客户和ISP连接方式:
1. 单宿主(single-homed):一般使用私有AS号,使用PA地址。
2. 多宿主(multi-homed):一般使用公有AS号,一般使用PI地址
AS范围:1-65535
其中1-64511:公有AS号(public):必须向InterNIC去买,由IANA分配,公网可见。
64512-65535:私有AS号(private):无须购买,可由ISP提供,公网不可见。
公网IP地址:
1. PI(__运营商独立地址__):与ISP无关,直接向地址注册机构购买的。
2. PA(运营商分配地址)与ISP相关,由ISP租赁给你。
客户AS——__ISP传输AS__——客户AS
BGP信息:
1. Open:用来建立BGP会话
2. Keepalive:用来维护TCP连接
3. Update:用来__承载BGP路由信息__,每一个BGP更新都会相应的附带一些__BGP属性__。
4. Notification:当BGP检测到错误之后,用于切断BGP会话。
BGP路由器鉴别机制:BGP Router-ID(RID):
1. 如果有逻辑接口,逻辑接口IP地址最大的IP地址作为RID
2. 如果只有物理接口,物理接口IP地址最大的IP地址作为RID
BGP邻居关系的建立:
1. 首先,当BGP路由器之间准备建立TCP连接,此时,BGP邻居关系的状态称之为空闲状态(idle)
2. 当TCP连接建立完成之后,此时BGP邻居关系的状态称之为活跃状态(active)
3. 当TCP双向连接建立之后,BGP路由器发送open包,open包包含的参数包含:AS号,keepalive计时器,RID等,这个状态叫做OpenSent状态
4. 对方给予open包,这个状态叫做OpenConfirm状态
5. 如果双方Open包参数协商成功,那么__BGP邻居(会话)关系__建立,达到 Established状态,如果不成功,可能回退到Active状态,再重新发送Open包,试图建立BGP会话。
3和4在CISCO IOS的show命令里是看不到的,统称为active状态。
**1、** **AS-PATH属性**:AS-PATH属性越短,路径越优先。
**2、** **起源(Origin)属性**:定义BGP更新是如何产生的:
(1)、起源于IGP:BGP更新是通过BGP进程下network命令所发布出来的。(i)
(2)、起源于EGP:BGP更新是通过__EGP重分发__进来的。(e)
(3)、起源不完整(incomplete):BGP更新是通过IGP(OSPF,EIGRP等)重分发进来的。(?)
如果同一个BGP更新有3种起源方式。IGP优先于EGP优先Incomplete
**3、下一跳(NEXT_HOP)属性**:到达目标AS的下一个AS(**IP地址**)。
BGP连接关系:
1.内部BGP(Internal BGP,IBGP)
建立BGP邻居关系的BGP路由器位于同一自治系统。对于IBGP邻居,AS-PATH属性是不变,下一跳属性也不变。
2.外部BGP(External BGP,EBGP)
建立BGP邻居关系的BGP路由器位于不同自治系统。对于EBGP,AS_PATH属性根据经过的AS号码向前叠加,下一跳属性也会改变。对于EBGP而言:下一跳属性是宣告该EBGP更新的接口IP地址。
**知名任意属性:**
1、本地优先级(Local_pref):默认值100。用于__同一个AS多出口的选路控制__,值超高,也就越优先。本地优先级只在AS内比较(只在IBGP邻居间比较),用于__影响出站流量__。 本地产生的为空。
2、Atomic aggregate:用于通知邻居AS,说明执行汇总路由器的路由信息。地址信息以RID呈现。
**可选传递属性:**
1. Aggregator:定义了实行路由聚合(汇总)的路由器的IP地址AS号信息,地址信息是接口信息。
2. 社团属性(community):用于BGP的路由标记(打标签)。
**可选非传递:**
1. MED:默认值为0,值越低越优先,用于不同AS多出口的选路比较。用于__影响进站流量__。默认情况下,来自不同AS的MED属性不能相互比较。如果MED属性为空(NULL),CISCO设备把空值当成0,其他厂商把空值当成无穷大。CISCO私有属性:权重(0-65535)
1. 本一产生的BGP更新权重默认是32768
2. 从邻居学过来的BGP更新权重默认为0,值越高,越优先。权重本地有效,不传递。影响出站流量。
BGP的选路法则:(必须要下一跳可达)
如果一个BGP更新同时通过多个邻居学习到,就要进行一系列的选路比较法则。过程如下:
1. 先比较权重,权重高的越优先。(只对本地有效,只能影响自己不能影响别人)
2. 比较本地优先级,越高越优先,仅在同一个AS内的IBGP邻居比较。
3. 本地产生(下一跳属性为0.0.0.0)的优先于从邻居学过来的。
4. AS-PATH长度最短。(BGP:路径矢量协议)
5. 比较起源属性:IGP优先于EGP优先于Incomlete
6. 比较MED属性,越低越优先。
7. EBGP(AD=20)优先于IBGP(AD=200)
-------------------------------------------------分水岭------------------------------------------------------------
8a.如果是EBGP更新,那么最老(最先被学习到的)的EBGP更新更优先
8b.如果是IBGP更新,离邻居IGP度量值最小的路径优先。
-------------------------------------------------分水岭------------------------------------------------------------
9.比较BGP RID,越低越优先。
10.比较学习到BGP更新的接口地址,接口IP地址越小越优先。

View File

@@ -0,0 +1,402 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T10:34:08+08:00
====== 第二天BGP对等体的分类 ======
Created Tuesday 04 September 2012
BGP分类:
1. EBGP
2. IBGP
BGP邻居关系就是对等体关系; BGP邻居就是BGP对等体(peer)
__BGP对等体关系是手动建立__。信息交换(BGP更新)也是手动化的。
EBGP对等体关系:
默认情况下,__EBGP建立对等体关系必须物理直连__(必须使用物理接口来建立)。原因:
1. BGP会对信息的发送源进行校验:你指定的BGP对等体地址和BGP信息发送源接口必须匹配。默认情况下,所有BGP信息的发送源接口都是出站物理接口。
2. 默认情况下,EBGP信息TTL值为1。
IBGP对等体关系:
默认情况下,IBGP建立对等体关系**不必**物理直连。原因:
1. BGP会对信息的发送源进行校验:你指定的BGP对等体地址和BGP信息发送源接口必须匹配。默认情况下,所有BGP信息的发送源接口都是出站物理接口。
2. 默认情况下,IBGP信息TTL值为64。
IBGP是靠IGP的快速收敛来达到快速收敛。IBGP用于传输AS承载外部(客户)EBGP更新。传输AS内的IGP:
1.负责建立IBGP对等体关系(TCP连接)
2.负责帮助IBGP对等体的快速收敛。
EBGP可以做到防止环路; IBGP可以通过__水平分割__防止环路; 通过IBGP对等体学习到的BGP更新不会再宣告经任意的IBGP对等体。
下一跳不可达问题(重分发,指定下一跳)
递归解析
BGP和IGP的相互的
BGP的基本配置
R0的基本配置:
Router&gt;en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router (config)#host R0
R0(config)#no ip do lo
R0(config)#line con 0
R0(config-line)#logg syn
R0(config-line)#exec-timeout 0 0
R0(config-line)#exit
R0(config)#
R0(config)#int lo0
R0(config-if)#ip add 1.1.1.1 255.255.255.0
R0(config-if)#no shut
R0(config-if)#exit
R0(config)#int fa0/0
R0(config-if)#ip add 192.168.1.1 255.255.255.0
R0(config-if)#no shut
R0(config-if)#exit
R0(config)#int e1/0
R0(config-if)#ip add 192.168.2.1 255.255.255.0
R0(config-if)#no shut
R0(config-if)#exit
R0(config)#router bgp 1[lty1]
R0(config-router)#neighbor 192.168.1.2 remote-as 1[lty2]
R0(config-router)#neighbor 192.168.2.2 remote-as 1
Router&gt;en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#host R1
R1(config)#no ip do lo
R1(config)#line con 0
R1(config-line)#logg syn
R1(config-line)#exec-timeout 0 0
R1(config-line)#exit
R1(config)#
R1(config)#int lo0
R1(config-if)#ip add 2.2.2.2 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.1.2 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#int e1/0
R1(config-if)#ip add 192.168.2.2 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#router bgp 1
R1(config-router)#neighbor 192.168.1.1 remote-as 1
R1(config-router)#neighbor 192.168.2.1 remote-as 1
R1(config-router)#end
R1#
在R0或R1上查看BGP的表项
R0#sh ip bgp
R0#
如果为空,表示没有BGP路由表项
BGP network命令:表示将某些IP前缀以手动的形式向对等体宣告出去。被发布的IP前缀的掩码必须和network命令精确匹配。
现在将我的1.1.1.0宣告出去。
R0(config)#router bgp 1
R0(config-router)#network 1.1.1.0 mask 255.255.255.0[lty3]
R0(config-router)#end
R0#
现在去对方的BGP表项中看看有没有内容:
R1#sh ip bgp
BGP table version is 2[lty4] , local router ID is 2.2.2.2[lty5]
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure[刘廷友6] , S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i1.1.1.0/24 192.168.2.1 0 100 0 i
*&gt;i 192.168.1.1 0 100 0 i
R1#
已经有了
再看看R1上面的路由表:
R1#sh ip rout
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
B 1.1.1.0 [200/0] via 192.168.1.1, 00:05:10
[lty7] 2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, Loopback0
C 192.168.1.0/24 is directly connected, FastEthernet0/0
C 192.168.2.0/24 is directly connected, Ethernet1/0
R1#
现在通过递归查找看一下1.1.1.0这条路由通过那个接口出去。
R1#sh ip route 1.1.1.0
Routing entry for 1.1.1.0/24
Known via "bgp 1", distance 200, metric 0, type internal
Last update from 192.168.1.1 00:06:56 ago
Routing Descriptor Blocks:
* 192.168.1.1, from 192.168.1.1, 00:06:56 ago[lty8]
Route metric is 0, traffic share count is 1
AS Hops 0
R1#sh ip route 192.168.1.1
Routing entry for 192.168.1.0/24
Known via "connected", distance 0, metric 0 (connected, via interface)
Routing Descriptor Blocks:
* directly connected, via FastEthernet0/0
Route metric is 0, traffic share count is 1
R1#
分析BGP表:
R1#sh ip bgp
BGP table version is 2, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete[lty9]
Network Next Hop Metric LocPrf Weight Path
*[lty10] i[lty11] 1.1.1.0/24 192.168.2.1 [lty12] 0[lty13] 100[lty14] 0 [lty15] i[lty16]
*&gt;[lty17] i 192.168.1.1 0 100 0 i
R1#
如果要更详细的看某条路由:
R1#show ip bgp 1.1.1.0
BGP routing table entry for 1.1.1.0/24, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
192.168.2.1 from 192.168.2.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, internal
Local
192.168.1.1 from 192.168.1.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, internal, best
R1#
现在再去R0上面看看BGP表:
R0#sh ip bgp
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*&gt; [lty18] 1.1.1.0/24 0.0.0.0[lty19] 0 [lty20] 32768[lty21] i
这就是两张BGP表不同之处。
将前面BGP的配置删除了。
R0(config)#no router bgp 1
R1(config)#no router bgp 1
现在我们通过回环接口来建立BGP邻居
R0(config)#router bgp 1
R0(config-router)#neighbor 2.2.2.2 remote-as 1
R0(config-router)#end
R1(config)#router bgp 1
R1(config-router)#neighbor 1.1.1.1 remote-as 1
现在查看一下BGP邻居表
R0#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 1 0 0 0 0 0 never Active
R0#
看看为什么
R0(config)#router bgp 1
R0(config-router)#nei
R0(config-router)#neighbor 2.2.2.2 up
R0(config-router)#neighbor 2.2.2.2 update-source lo0
R0(config-router)#end
R1(config-router)#neighbor 1.1.1.1 up
R1(config-router)#neighbor 1.1.1.1 update-source lo0
R1(config-router)#end
现在看看BGP邻居表:
R0#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 1 0 0 0 0 0 never Active
R0#
看看为什么这时候他的状态还是active呢?
这是因为我们R0上面没有2.2.2.0/24的路由。所以建立不起来邻居。要建立邻居我们就需要有2.2.2.0/24的路由,所以这里我们起一个ospf协议,以保障我们BGP邻居的正常建立。
R0(config-router)#net 192.168.1.0 0.0.0.255 a 0
R0(config-router)#net 192.168.2.0 0.0.0.255 a 0
R0(config-router)#net 1.1.1.0 0.0.0.255 a 0
R0(config-router)#exit
R1(config)#router ospf 100
R1(config-router)#net 192.168.1.0 0.0.0.255 a 0
R1(config-router)#net 192.168.2.0 0.0.0.255 a 0
R1(config-router)#net 2.2.2.0 0.0.0.255 a 0
R1(config-router)#exit
现在先看看OSPF协议运行起来没有!在R0上面查看一下路由表!看看有没有2.2.2.0/24路由没有。
R0#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
C 1.1.1.0 is directly connected, Loopback0
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/2] via 192.168.1.2, 00:03:30, FastEthernet0/0
[lty22] C 192.168.1.0/24 is directly connected, FastEthernet0/0
C 192.168.2.0/24 is directly connected, Ethernet1/0
R0#
现在再来看看我们的BGP的邻居建立起来没有?
R0#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 1 7 7 1 0 0 00:04:03 0
R0#
从这里我们可以看见!BGP邻居已经建立起来了!通过回环口来建立邻居,邻居就只有一个了。
现在将这两台路由器变成EBGP邻居关系。
现在将两台路由器上面的BGP删除了
R0(config)#no router bgp 1
R1(config)#no router bgp 1
现在建立EBGP邻居
R0(config)#router bgp 1
R0(config-router)#nei
R0(config-router)#neighbor 192.168.2.2 remote-as 1
R0(config-router)#neighbor 192.168.1.2 remote-as 2
R0(config-router)#
*Mar 1 00:59:27.563: %BGP-5-ADJCHANGE: neighbor 192.168.1.2 Up
R0(config-router)#network
R0(config-router)#network
% Incomplete command.
R0(config-router)#net
R0(config-router)#network 1.1.1.0 mask 255.255.255.0
R0(config-router)#end
R0#
R1(config)#router bgp 2
R1(config-router)#nei
R1(config-router)#neighbor 192.168.1.1 remote
R1(config-router)#neighbor 192.168.1.1 remote-as 1
R1(config-router)#end
现在我们查看一下BGP的邻居表:
R0#sh ip bgp summary
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 2, main routing table version 2
1 network entries using 117 bytes of memory
1 path entries using 52 bytes of memory
2/1 BGP path/bestpath attribute entries using 248 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 417 total bytes of memory
BGP activity 1/0 prefixes, 1/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
192.168.1.2 4 2 9 10 2 0 0 00:06:19 0
192.168.2.2 4 2 5 5 2 0 0 00:00:08 0
R0#
现在查看一下BGP表:
R1#sh ip bgp
BGP table version is 2, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* 1.1.1.0/24 192.168.2.1 0 0 1 i
*&gt; 192.168.1.1 0 0 1 i
R1#
看看为什么这里会有两条BGP表项呢?
现在我们通过回环回来建立一下EBGP邻居:
R0(config)#no router bgp 1
R0(config)#router bgp 1
R0(config-router)#nei
R0(config-router)#neighbor 2.2.2.2 remote
R0(config-router)#neighbor 2.2.2.2 remote-as 2
R0(config-router)#nei
R0(config-router)#neighbor 2.2.2.2 up
R0(config-router)#neighbor 2.2.2.2 update-source lo0
R0(config-router)#nei
R0(config-router)#neighbor 2.2.2.2 e
R0(config-router)#neighbor 2.2.2.2 ebgp-multihop
R0(config-router)#net
R0(config-router)#network 1.1.1.1
R0(config-router)#no network 1.1.1.1
R0(config-router)#net
R0(config-router)#network 1.1.1.0 mask 255.255.255.0
R0(config-router)#end
R0#
R1(config)#no router bgp 2
R1(config)#
*Mar 1 01:08:41.339: %BGP-5-ADJCHANGE: neighbor 192.168.1.1 Down BGP protocol initialization
*Mar 1 01:08:41.343: %BGP-5-ADJCHANGE: neighbor 192.168.2.1 Down BGP protocol initialization
R1(config)#router bgp
R1(config)#router bgp 2
R1(config-router)#nei
R1(config-router)#neighbor 1.1.1.1 re
R1(config-router)#neighbor 1.1.1.1 remot
R1(config-router)#neighbor 1.1.1.1 remote-as 1
R1(config-router)#nei
R1(config-router)#neighbor 1.1.1.1 up
R1(config-router)#neighbor 1.1.1.1 update-source lo0
R1(config-router)#nei
R1(config-router)#neighbor 1.1.1.1 e
R1(config-router)#neighbor 1.1.1.1 ebgp-multihop
R1(config-router)#nei
R1(config-router)#neighbor 2.2.2.0 mask 255.255.255.0
^
% Invalid input detected at '^' marker.
R1(config-router)#
*Mar 1 01:10:47.403: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Up
R1(config-router)#network
R1(config-router)#network 2.2.2.0 mask 255.255.255.0
R1(config-router)#end
R1#
现在查看一下BGP邻居:
R1#sh ip bgp summary
BGP router identifier 2.2.2.2, local AS number 2
BGP table version is 3, main routing table version 3
2 network entries using 234 bytes of memory
2 path entries using 104 bytes of memory
3/2 BGP path/bestpath attribute entries using 372 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 734 total bytes of memory
BGP activity 2/0 prefixes, 2/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
1.1.1.1 4 1 5 5 3 0 0 00:01:59 1
R1#
在再看一下BGP表
R1#sh ip bgp
BGP table version is 3, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*&gt; 1.1.1.0/24 1.1.1.1 0 0 1 i
*&gt; 2.2.2.0/24 0.0.0.0 0 32768 i
R1#
log-adjacency-changes这条命令从我们运行BGP路由协议以后,自动会运行这条命令。用于向用户反映BGP事件
BGP同步:BGP路由器不会把自己通过IBGP对等到体学习到的外部BGP更新(EBGP更新)宣告给自己的EBGP对等体,除非这台BGP路由器已经通过IGP学习到该外部EBGP路由。
BGP表的IP前缀进入IP路由表的条件:下一跳可达。这条BGP表就会复制到路由表里面。
--------------------------------------------BGP原理已完-------------------------------------------------------
BGP选路策略:
1. BGP过滤
2. BGP选路控制
IP前缀列表(prefix list)vs. IP ACL
例如:
Access-list 1 permit 192.168.1.0 0.0.0.255 (192.168.1.0/24)
Ip prefix-list mybgp[lty23] seq 5 [lty24] permit 192.168.1.0/24 (192.168.1.0/24)
前缀列表里面有一个
把B类地址中主机数量有254的子网全部给挑出来。
Ip prefix-list my permiy 128.0.0.0/2 ge[lty25] 24 le[lty26] 24[lty27]
正则表达式(regular expression,regex)
[lty1]启动BGP路由协议
[lty2]指定邻居,后面的remote-as是指AS号,如果这个AS号与自己BGP后面的AS号相同的话表示是IBGP邻居,如果两个AS号表示是EBGP邻居
[lty3]宣告网段,在这被发布的IP前缀的掩码必须和network命令精确匹配。
[lty4]BGP表的版本号,每一次更新了路由信息时这个版本号就会向上加1
[lty5]本地的RID号
[刘廷友6]一般由于地址冲突带来的故障,一般对通信不会产生影响。
[lty7]这一条就是通过BGP学习过来的!
在这里要注意看其它的直连路由都有出站接口,而这条BGP路由没有出站接口。
[lty8]
[lty9]起源代码
[lty10]*表示有效的
[lty11]表示这个条目是通过IBGP或EBGP学习过来的
[lty12]下一跳
[lty13]MED
[lty14]本地优先级
[lty15]权重
[lty16]I表示起源于IGP
[lty17]这个条目作为bast最佳的,并放入路由表
[lty18]这里没有i,表示自己产生的
[lty19]自己产生的下一跳是 0.0.0.0
[lty20]自己产生的本地优先级为空
[lty21]自己产生的权重是32768
[lty22]我们可以看见,这里OSPF已经运行起来了!2.2.2.0已经学到了!
[lty23]命令
[lty24]序列号,默认是5
[lty25]大于等于
[lty26]小于等于
[lty27]这样写表示等于24

View File

@@ -0,0 +1,65 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-03T20:42:27+08:00
====== OSPF动态路由协议基本工作原理 ======
Created Monday 03 September 2012
http://net.zdnet.com.cn/network_security_zone/2010/0414/1705709.shtml
随着Internet技术在全球范围内的飞速发展,IP网络作为一种最有前景的网络技术,受到了人们的普遍关注。而作为IP网络生存、运作、组织的核心——IP路由技术提供了解决IP网络动态可变性、实时性、QoS等关键技术的一种可能。在众多的路由技术中,OSPF协议已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由技术之一。本文在分析OSPF动态路由协议基本工作原理的基础上,提出了Dijkstra算法和OSPF路由表计算的实现方法。
目前应用较多的路由协议有RIP和OSPF,它们同属于__内部网关协议__,但RIP基于__距离矢量算法__,而OSPF基于链路状态的__最短路径优先算法__。它们在网络中利用的传输技术也不同。
RIP是利用__UDP的520号端口__进行传输,实现中利用套接口编程,而OSPF则直接在IP上进行传输,它的协议号为89.
在RIP当中,所有的路由都由__跳数__来描述,到达目的地的路由最大不超过16跳,且只保留__唯一__的一条路由,这就限制了RIP的__服务半径__,即其只适用于小型的简单网络。同时,运行RIP的路由器需要定期地(一般30s)将自己的路由表__广播__到网络当中,达到对网络拓扑的聚合,这样不但聚合的速度慢而且极容易引起广播风暴、累加到无穷、路由环致命等问题。为此,OSPF应运而生。OSPF是基于链路状态的路由协议,它克服了RIP的许多缺陷:
  第一,OSPF不再采用跳数的概念,而是根据接口的吞吐率、拥塞状况、往返时间、可靠性等实际链路的负载能力定出__路由代价__,同时选择最短、最优路由并允许保持到达同一目标地址的__多条路由__,从而平衡网络负荷;
  第二,OSPF支持不同服务类型的不同代价,从而实现__不同QoS的路由服务;__
  第三,OSPF路由器不再交换路由表,而是同步各路由器对网络状态的认识,即__链路状态数据库__,然后通过Dijkstra最短路径算法计算出网络中各目的地址的最优路由。
这样OSPF路由器间不需要定期地交换大量数据,而只是保持着一种连接,一旦有链路状态发生变化时,才通过__组播方式__对这一变化做出反应,这样不但减轻了不参与系统的负荷而且达到了对网络拓扑的快速聚合。而这些正是OSPF强大生命力和应用潜力的根本所在。
  一、OSPF工作原理分析
OSPF是一种__分层次__的路由协议,其层次中最大的实体是__AS(自治系统)__,即遵循**共同路由策略**管理下的一部分网络实体。在每个AS中,将网络划分为不同的__区域__。每个区域都有自己特定的标识号。对于__主干(backbone)区域__,负责在区域之间分发链路状态信息。这种分层次的网络结构是根据OSPF的实际提出来的。当网络中自治系统非常大时,网络拓扑数据库的内容就更多,所以如果不分层次的话,一方面容易造成数据库溢出,另一方面当网络中某一链路状态发生变化时,会引起整个网络中每个节点都重新计算一遍自己的路由表,既浪费资源与时间,又会影响路由协议的性能(如聚合速度、稳定性、灵活性等)。因此,需要把自治系统划分为多个域,__每个域内部维持本域一张唯一的拓扑结构图__,且各域根据自己的拓扑图各自计算路由,__域边界路由器把各个域的内部路由总结后在域间扩散。__这样,当网络中的某条链路状态发生变化时,此链路所在的域中的每个路由器重新计算本域路由表,而其它域中路由器只需**修改其路由表中的相应条目**而无须重新计算整个路由表,节省了计算路由表的时间。
OSPF由两个互相关联的主要部分组成:__“呼叫”协议和“可靠泛洪”机制__。**呼叫协议检测**__邻居__**并维护**__邻接__**关系,可靠泛洪算法可以确保统一域中的所有的OSPF路由器始终具有一致的链路状态数据库,而该数据库构成了对域的网络拓扑和链路状态的映射。**链路状态数据库中每个条目称为__LSA(链路状态通告)__,共有5种不同类型的LSA,路由器间交换信息时就是交换这些LSA. 每个路由器都维护一个用于跟踪网络链路状态的数据库,然后各路由器的路由选择就是基于链路状态,通过Dijkastra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。**最后再通过计算域间路由、自治系统外部路由确定完整的路由表。**与此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。
OSPF的设计实现要涉及到**指定路由器**、备份指定路由器的选举、协议包的接收、发送、泛洪机制、路由表计算等一系列问题。本文仅就Dijkstra算法与路由表的计算进行讨论。
  二、Dijkstra算法
  Dijkstra算法是路由表计算的依据,通过Dijkstra算法可以得到有关网络节点的最短路径树,然后由最短路径优先树得到路由表。
  1.Dijkstra算法的描述如下:
  (1)初始化集合E,使之只包含源节点S,并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O.
  (2)若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。
  (3)首先寻找列表O中的最短路径P,从O中删除P.设V为P的最终节点。若V已在集合E中,继续执行步骤2.否则,P为通往V的最短路径。将V从R移至E.
  (4)建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2.
  2.Dijkstra算法举例:
  下面我们以路由器A为例,来说明最短路径树的建立过程:
  (1)路由器A找到了路由器B、C,将它们列入候选列表.
  (2)从候选列表中找出最小代价项B,将B加入最短路径树并从候选列表中删除。接着从B开始寻找,找到了D,将其放入候选列表.
  (3)从列表中找出C,再由C又找到了D.但此时D的代价为4,所以不再加入候选列表。最后将D加入到最短路径树。此时候选列表为空,完成了最短路径树的计算。
  三、OSPF路由表的计算与实现
  有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路的存活时间、链路的类型以及下一跳等内容。关于整个计算的过程,主要由以下五个步骤来完成:
  (1)保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立路由表;
  (2)域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路由;
  (3)域间路由的计算,通过检查Summary-LSA来计算域间路由,若该路由器连到多个域,则只检查主干域的Summary-LSA;
  (4)查看Summary-LSA:在连到一个或多个传输域的域边界路由器中,通过检查该域内的Summary-LSA来检查是否有比第(2)(3)步更好的路径;
  (5)AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外的路由。
通过以上步骤,OSPF生成了路由表。但这里的路由表还不同于路由器中实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种路由协议的学习。
OPSF作为一种重要的内部网关协协议的普遍应用,极大地增强了网络的可扩展性和稳定性,同时也反映出了动态路由协议的强大功能。但是,在有关OSPF协议的研究、实现中尚存在一些问题,如数据库的溢出、度量的刻画、以及MTU协商等等。同时,在IPv6中,OSPFv3基于链路的处理机制、IP地址的变化、泛洪范围的增加、包格式、LSA的变化以及邻居的识别等技术都将是我们共同探讨的课题。

View File

@@ -0,0 +1,160 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-03T19:57:11+08:00
====== OSPF路由协议综述及其配置 ======
Created Monday 03 September 2012
链路状态路由协议(link-state routing protocol)的一些特征:
  1.对网络发生的变化能够快速响应
  2.当网络发生变化的时候发送**触发式更新**(triggered update)
  3.发送周期性更新(**链路状态刷新**),间隔时间为30分钟
链路状态路由协议只在网络拓扑发生变化以后产生路由更新。当链路状态发生变化以后,检测到变化的设备创建__LSA(link state advertisement)__,通过使用__组播地址__传送给所有的__邻居设备__,然后每个设备拷贝一份LSA,更新它自己的__链路状态数据库(link state database,LSDB)__,接着再转发LSA给其他的邻居设备。这种__LSA的洪泛(flooding)__保证了所有的路由设备在更新自己的路由表之前更新它自己的LSDB
LSDB通过使用__Dijkstra算法__(**shortest path first**,SPF)来计算到达目标网络的最佳路径,建立一条__SPF树(tree)__,然后最佳路径从SPF树里选出来,被放进路由表里。
OSPF和IS-IS协议被归类到__链路状态路由协议__中。链路状态路由协议在一个特定的__区域(area)__里从邻居处收集网络信息,一旦路由信息都被**收集齐**以后,每个路由器开始通过使用Dijkstra算法(SPF)**独立计算**到达目标网络的最佳路径
运行了链路状态路由协议的路由器跟踪以下信息:
  1.它们各自的邻居
  2.在同一个区域中的所有路由器
  3.到达目标网络的最佳路径
为了能够做出更好的路由决策,OSPF路由器必须维持的有以下内容:
  1.neighbor table:也叫__adjacency database__.存储了邻居路由器的信息。如果一个OSPF路由器和它的邻居路由器失去联系,在几秒中的时间内,它会标记所有到达那条路由均为无效并且重新计算到达目标网络的路径
  2.topology table:一般叫做LSDB. OSPF路由器通过LSA学习到其他的路由器和网络状况,__LSA存储在LSDB中__
  3.routing table:也就是我们所说的路由表了,也叫**forwarding database**,包含了到达目标网络的最佳路径的信息
链路状态路由协议和距离向量路由协议的一个区别就是:距离向量路由协议是routing by rumors,也就是说,距离向量路由协议依靠邻居发给它的信息来做路由决策,而且路由器不需要保持完整的网络信息;而运行了链路状态路由协议的路由器保持的有__完整的网络信息的快照__,而且每个路由器自己做出路由决策
OSPF的网络设计要求是__双层层次化(2-layer hierarchy)__,包括如下2层:
  1.transit area(backbone或area 0)
  2.regular areas(nonbackbone areas)
  transit area负责的主要功能是IP包快速和有效的传输。transit area__互联__OSPF其他区域(类型)。一般的,这个区域里不会出现端用户(end user)
  regular areas负责的主要功能就是**连接用户和资源**。这种区域一般是根据功能和地理位置来划分。一般的,一个regular area__不允许__其他区域的流量通过它到达另外一个区域,__必须穿越transit area__比如area 0. regular areas还可以有很多子类型,比如stub area,locally area和not-so-stubby area
在链路状态路由协议中,所有的路由器都保持有LSDB,OSPF路由器越多,LSDB就越大。这可能对了解完整的网络信息有帮助,但是随着网络的增长,__可扩展性__的问题就会越来越大。采用的__折中方案就是引入区域的概念__。在某一个区域里的路由器__只保持该区域中所有路由器__**或链路的详细信息**和其他区域的一般信息。当某个路由器或某条链路出故障以后,信息**只会**在那个区域以内在邻居之间传递。那个区域以外的路由器不会收到该信息。OSPF要求层次化的网络设计,意味着所有的区域要和area 0__直接相连__。如下图:  
 {{./1.jpg}}
注意area 1和area 2或3之间的连接是不允许的,它们都必须通过backbone area 0进行连接。Cisco建议每个区域中路由器的数量为50到100个构建area 0的路由器称为__骨干路由器__(backbone router,BR),如上图,A和B就是BR;__区域边界路由器__(area border router,ABR)连接area 0和nonbackbone areas.如图,C,D和E就是ABR.
ABR通常具有以下特征:
  1.**分隔LSA洪泛的区域**
  2.是区域地址汇总的主要因素
  3.一般做为默认路由的源头
  4.__为每个区域保持LSDB__
理想的设计是使每个ABR只连接2个区域,backbone和其他区域,3个区域为上限
运行OSPF的路由器通过交换__hello包__和别的路由器建立__邻接(adjacency)关系__,过程如下:
  1.路由器和别的路由器交换hello包,目标地址采用**多播地址**
  2.hello包交换完毕,**邻接关系形成**
  3.接下来通过交换LSA和对接收方的确认进行**同步LSDB**.对于OSPF路由器而言,进入__完全__**邻接状态**
  4.如果需要的话,路由器转发新的LSA给其他的邻居,来保证整个区域内LSDB的完全同步
  对于点到点的WAN串行连接,两个OSPF路由器通常使用**HDLC或PPP**来形成完全邻接状态
  对于LAN连接,选举一个路由器做为__designated router(DR)__再选举一个做为__backup designated router(BDR)__,所有其他的和DR以及BDR相连的路由器形成完全邻接状态而且**只传输LSA给DR和BDR**.
DR从邻居处转发更新到另外一个邻居那里。DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把__完整的数据库信息__发送给__新加入__的路由器。路由器之间还会和LAN内的其他路由器(非DR/BDR,即DR OTHERs)维持一种**部分邻居关系**(two-way adjacency)。OSPF的邻接一旦形成以后,会交换LSA来同步LSDB,LSA将进行可靠的洪泛
链路状态陆游协议使用Dijkstra算法来查找到达目标网络中的最佳路径。所有的路由器拥有**相同**的LSDB后,__把自己放进SPF tree中的root里__,然后根据每条链路的耗费(cost),选出耗费最低的做为最佳路径,最后把最佳路径放进**forwarding database(路由表)**里。下图就是一个SPF计算的例子:  
 
{{./2.jpg}}
  1.LSA遵循split horizon原则,H对E宣告它的存在,E把H的宣告和它自己的宣告再传给C和G;C和G再和之前类似,继续传播开来……
  2.X有4个邻居:A,B,C和D,假设这里都是以太网,每条网链路的耗费为10,经过计算,路由器可以算出最佳路径。上图的右半部分实线所标即为最佳路径
  LS Data Structures: LSA Options
关于LSA的操作流程图如下:  
 {{./3.jpg}}
如图可以看出当路由器收到一个LSA以后,先会查看它自己的LSDB看有没有相应的条目,如果没有就加进自己的LSDB中去,并反馈__LSA确认包(LSAck)__,接着再继续洪泛LSA,最后运行SPF算法算出新的路由表
如果当它收到LSA的时候,自己的LSDB有该条目而且__版本号__一样,就忽略这个LSA;如果有相应条目,但是收到的LSA的版本号__更新__,就加进自己的LSDB中,发回LSAck,洪泛LSA,最后用SPF计算最佳路径;如果版本号没有自己LSDB中那条新,就__反馈LSU信息给发送源__
Types of OSPF Packets
OSPF包的5种类型如下:
  1.hello:用来建立邻居关系的包
  2.database description(DBD):用来检验路由器之间数据库的同步
  3.link state request(LSR):链路状态请求包
  4.link state update(LSU):特定链路之间的请求记录
  5.link state acknowledgement(LSAck):确认包
OSPF Packet Header Format
  5种OSPF包都是__直接被封装在IP包里__的而不使用TCP或UDP.由于没有使用可靠的TCP协议,但是OSPF包又要求可靠的传输,所以就有了LSAck包。如下图所示就是OSPF包在IP包里的形式:  
 {{./4.jpg}}
  协议号为89(EIGRP协议号为8,一些字段如下:
  1.Version Number:当前为OSPF版本2
  2.Type:定义OSPF包的类型
  3.Packet Length:包的长度,单位字节
  4.**Router ID(RID)**:产生OSPF包的__源路由器__
  5.**Area ID**:定义OSPF包是从哪个area产生出来的
  6.Checksum(校验和):错误校验
  7.**Authentication Type**:验证方法,可以是明文(cleartext)密码或者是Message Digest 5(MD5)加密格式
  8.Data:对于hello包来说,该字段是已知邻居的列表;对于DBD包来说,该字段包含的是__LSDB的汇总信息__,包括RID等等;对于LSR包来说,该字段包含的是需要的LSU类型和需要的LSU类型的RID;对于LSU包来说,包含的是完全的LSA条目,多个LSA条目可以装在一个包里;对于LSAck来说,字段为空
OSPF Neighbor Adjacency Establishment
__Hello协议__用来建立和保持OSPF邻居关系,采用__多播地址224.0.0.5__,hello包包含的信息如下:
  1.Router ID(RID):路由器的32位长的一个唯一标识符,选举规则是,如果loopback接口不存在的话,就选物理接口中IP地址等级最高的那个;否则就选取loopback接口
  2.hello/dead intervals:定义了发送hello包频率(默认在一个多路访问网络中间隔为__10秒__);dead间隔是4倍于hello包间隔。邻居路由器之间的这些计时器必须设置成一样
  3.neighbors:__邻居列表__
  4.area ID:为了能够通信,OSPF路由器的接口必须属于__同一网段中的同一区域(area)__,即共享子网以及子网掩码信息
  5.__router priority__:优先级,选举DR和BDR的时候使用。8位长的一串数字
  6.DR/BDR IP address:DR/BDR的IP地址信息
  7.authentication password:如果启用了验证,邻居路由器之间必须交换相同的密码信息。此项可选
  8.stub area flag:stub area是通过使用默认路由代替路由更新的一种技术(有点像EIGRP中的stub功能)
Establishing Bidirectional Communication
1.星型(star/hub-and-spoke):最常见的帧中继网络拓扑,代价最小
2.全互连(full-mesh):冗余,但是代价大,在这样的环境中计算VC的数量,使用n(n-1)/2的公式,n为网络中的节点数
3.部分互连(partial-mesh):前两种的折中方案
OSPF运行的两种RFC中定义的模式如下:
1.NBMA:一般和部分互连的网络结合使用,需要选举DR/BDR和人工指定邻居.优点是相对point-to-multipoint模式它的负载较低
2.point-to-multipoint:把非广播的网络当作点到点连接的集合,自动发现邻居,不指定DR/BDR,一般和部分互连的网络结合使用.优点是配置较为简便
一些其他的可运行模式如下:
1.point-to-multipoint nonbroadcast
2.broadcast
3.point-to-point
定义OSPF网络类型的命令如下:
Router(config-if)#ip OSPF network [{broadcast | nonbroadcast | point-to-multipoint | point-to-multipoint nonbroadcast}]
几种选项的含义如下:
1.broadcast:使得WAN接口看上去像LAN接口;一个IP子网;多播hello包自动发现邻居;选举DR/BDR;要求网络全互连
2.nonbroadcast(NBMA):一个IP子网;邻居手工指定;选举DR/BDR;DR/BDR要求和DROTHER完全互连;一般用在部分互连的网络中
3.point-to-multipoint:一个IP子网;多播hello包自动发现邻居;不要求DR/BDR的选举;一般用在部分互连的网络中
4.point-to-multipoint nonbroadcast:如果VC中多播和广播能力没有启用的话就不能使用point-to-multipoint模式,也路由器没办法多播hello包;邻居必须人工指定;不需选举DR/BDR
5.point-to-point:一个子网;不选举DR/BDR;当只有2个路由器的接口要形成邻接关系的时候才使用;接口可以为LAN或WAN接口
Common OSPF Configuration for Frame Relay
先看看NBMA模式,如下图:
1.OSPF会把NBMA当作broadcast网络进行处理(比如LAN)
2.如图,所有的serial口处于同一子网
3.ATM,X.25和帧中继默认为NBMA操作
4.邻居手动指定
5.洪泛LSU的时候,要对每条PVC进行洪泛
6.RFC 2328兼容
对NBMA类型人工指定邻居使用如下命令:
Router(config-router)#neighbor [x.x.x.x] priority [number] poll-interval [number]
x.x.x.x为邻居的IP地址
priority [number]为优先级,如果设置为0的话将不能成为DR/BDR
poll-interval [number]是轮询的间隔时间,单位为秒.NBMA接口发送hello包给邻居之前等待的时间

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -0,0 +1,40 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T10:51:12+08:00
====== ext2-ext3-ext4区别 ======
Created Tuesday 04 September 2012
http://ntt0729.blog.163.com/blog/static/11637756201021673352314/
ext2与ext3:
Ext2 文件系统加上__日志支持__的下一个版本是 ext3 文件系统,它和 ext2 文件系统在硬盘布局上是一样的,其差别仅仅是 ext3 文件系统在硬盘上多出了__一个特殊的 inode__(可以理解为一个特殊文件),用来记录文件系统的日志,也即所谓的 journal。
参考:http://bbs.chinaunix.net/thread-153696-1-1.html
ext3与ext4:
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
1. __与 Ext3 兼容__。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
2. __更大的文件系统和更大的文件__。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
3. __无限数量的子目录__。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
5. 多块分配。 当写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7. __快速 fsck__。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
8. __日志校验__。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。
12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
13. 默认启用 barrier。 磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)

View File

@@ -0,0 +1,118 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-04T09:40:57+08:00
====== 网络支架—BGP ======
Created Tuesday 04 September 2012
http://www.cnpaf.net/Class/BGP/200501/1083.html
网络支架—BGP
时间:2005-01-14 来源: 作者: 点击:7709次
  
===== 1. 概述 =====
因特网,在20世纪60年代末,作为一个实验,开始于DARPA(美国国防部的高级研究项目管理局)。随着研究机构、学院和政府加入,形成了最早的ARPANET。后来,美国国家科学基金会又开发了NSFNET(1995年4月停用)。发展到现在,__因特网成为了由商业提供者运营的的更分散的体系__。而下一代因特网(NGI)的计划已于1997年10月启动,目前已推出的主要方案有Internet2,Abilene等。
出于__管理和扩展__的目的,因特网可以被分割成许多不同的__自治系统__(Autonomous System)。换句话说,因特网是由自治系统汇集而成的。
BGPv4(Border gateway protocol Version 4)——边缘网关协议(定义于RFC1771),是现行因特网的实施标准,__就是用来连接自治系统,实现自治系统间的路由选择功能的。__
===== 2. IGP与EGP =====
所有的路由选择协议可以被分成IGP和EGP两种。要了解IGP和EGP的概念,应该首先了解自治系统(AS)的概念。传统的AS定义(RFC1771):AS是同一个技术管理下的一组路由器,它们使用一种内部网关协议和一致的度量尺度来对数据包进行AS内部的路由,而使用外部网关协议来对发向其它AS的数据包进行路由选择。发展到现在,已经允许并且时常采用在一个自治系统AS中使用多个内部网关协议,甚至多个路由选择的度量标准。所以,现在的自治系统被扩展的定义为:__共享同一路由选择策略的一组路由器。__
IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。RIPv1&v2,IGRP,EIGRP,OSPF,**ISIS**都是典型的IGP。
EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。它主要完成数据包在AS间的路由选择,或者说,讲述数据包为了到达目的IP,需要通过哪些AS。BGP4就是一种EGP。
IGP只作用于本地AS内部,而对其他AS一无所知。它负责将数据包发到主机所在的网段(segment)。EGP作用于各AS之间,它只了解AS的__整体结构__,而不了解各个AS内部的拓扑结构。它只负责将数据包发到相应的AS中,余下的工作便交给IGP来做。
每个自治系统AS都有唯一的标识,称为__AS号__(AS number),由IANA(Internet Assigned Numbers Authority)来授权分配。这是一个16位的二进制数,范围为1~65535,其中65412~65535为AS专用组(RFC2270)。
{{./1.jpg}}
图一
===== 3.BGP-4的基本概念 =====
BGP-4是典型的外部网关协议,是现行的因特网实施标准。它完成了在自治系统AS间的路由选择。可以说,BGP协议是现代整个网络的支架。BGP-4在RFC1771中作出了规定,并且还涉及其他很多的RFC文档。在这一新版本中,BGP开始支持**CIDR**(Classless interdomains routing)和**AS路径聚合**(Aggregation),这种新属性的加入,可以减缓BGP表中条目的增长速度。
{{./2.jpg}}
图二
BGP协议是一种__距离矢量__(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能。BGP使用__TCP__作为传输协议,使用端口号__179__。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。另外,BGP使用__增量的、触发性的路由更新__,而不是一般的距离矢量协议的__整个路由表的、周期性__的更新,这样节省了更新所占用的带宽。BGP还使用“保留”信号(Keepalive)来监视TCP会话的连接。而且,BGP还有多种__衡量路由路径的度量标准(称为路由属性)__,可以更加准确的判断出最优的路径。
与传统的内部路由协议相比,BGP还有一个有趣的特性,就是使用BGP的路由器之间,可以__被未使用BGP的路由器隔开__。这是因为BGP在独立的内部路由协议之上工作,所以__通过BGP会话连接的路由器能被多个运行内部路由协议的路由器分开__。
建立了BGP会话连接的路由器被称作__对等体__(peers or neighbors),对等体的连接有两种模式:IBGP(Internal BGP)和EBGP(External BGP)。IBGP是指单个AS内部的路由器之间的BGP连接,而EBGP则是指AS之间的路由器建立BGP会话。
{{./3.jpg}}
图三
前面已经提到,BGP是用来完成AS之间的路由选择的,所以对于BGP来说,每一个AS都是一个原子的跳度。那么,IBGP又起什么样的作用呢?__IBGP是用来在AS内部完成BGP更新信息的交换__。虽然这种功能也可以由“再分布” (Redistribution)技术来完成——将EBGP传送来的其他AS的路由“再分布”到IGP中,然后将其“再分布”到EBGP传送到其他AS。但是相比之下,IBGP提供了更高的扩展性、灵活性和管理的有效性。比如,IBGP提供了选择本地AS外出点的方式。
__IBGP的功能是维护AS内部连通性__。BGP规定,一个IBGP的路由器不能将来自另一IBGP路由器的路由发送给第三方IBGP路由器。这也可以理解为通常所说的Split-horizon规则。当路由器通过EBGP接收到更新信息时,它会对这个更新信息进行处理,并发送到所有的IBGP及余下的EBGP对等体;而当路由器从IBGP接收到更新信息时,它会对其进行处理__并仅通过__EBGP传送,而不会向IBGP传送。所以,在AS中,__BGP路由器必须要通过IBGP会话建立完全连接的网状连接,以此来保持BGP的连通性__。如果没有在物理上实现全网状(full meshed)的连接,就会出现连通性上的问题(这在大型网络中会遇到扩展性的问题,将在下面“扩展性”一节中作讨论。)
AS在BGP看来是一个整体,AS内部的BGP路由器都必须将相同的路由信息发送给边界的EBGP路由器。路由信息在通过IBGP链路时不会发生改变,只有通过EBGP链路时,路由信息才会发生变化。在AS内部,通过IBGP连接的路由器都有相同的BGP路由表(BGP路由表(BGP Routing Table)用于存放BGP路由信息,不同于IGP路由表,两个表之间的信息可以通过“再分布”(Redistribution)技术进行交换)。
===== 4. BGP的路由选择 =====
BGP的消息报头由三个部分组成:标记、长度和类型。标记段占16个字节,用于安全检测和同步检测;长度段占2个字节,标明整个BGP消息的长度;类型段占一个字节,标明消息的类型。报头的后面可以不接数据部分,如Keepalive消息。
BGP消息有__四种类型__:OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分别用于建立BGP连接,更新路由信息,差错控制和检测可到达性。
OPEN消息是在建立TCP连接后,向对方发出的第一条消息,它包括版本号、各自所在AS的号码(AS Number)、BGP标识符(BGP Identifier)、协议参数、会话保持时间(Hold timer)以及可选参数、可选参数长度。其中,**BGP标识符**用来标识本地路由器,在连接的所有路由器中应该是唯一的。这个标识符一般都使用接口上的最大的IP地址(常常使用loopback接口来防止地址失效)。而会话保持时间,是指在收到相继的Keepalive或者Update信号之间的最大间隔时间。如果超过这个时间路由器仍然没有收到信号,就会认为对应的连接中断了。如果把这个保持时间的值设为0,那么表示认为连接永远存在。
UPDATE消息由不可到达路由(Withdrawn Route)、__路由属性__(Route Attributes)和网络层可到达性(Network Layer Reachability Information—NLRI)组成。
BGP路由属性是BGP 路由的__核心概念__。它是一组参数,在UPDATE消息中被发给连接对等体。这些参数记录了BGP路由信息,**用于选择和过滤路由**。它可以被看作选择路由的__度量尺度(metric)__。
路由属性被分为四类:**公认强制**(Well-known mandatory attributes)、**公认自由选择**(Well-known discretionary attributes)、**可选传递**(Optional transitive attributes)和**可选非传递**(Optional nontransitive attributes)。
公认的(Well-known)属性对于所有的BGP路由器来说都是可辨别的;每个UPDATE消息中都__必须包含__强制(mandatory)属性,而自由选择的(discretionary)属性则是可选的,可包括也可不包括。对于可选的(Optional)属性,不是所有的BGP工具都支持它。当BGP不支持这个属性时,如果这个属性是过渡性的(transitive),则会被接受并传给其他的BGP对等体;如果这个属性是非传递性的(nontransitive),则被忽略,不传给其他对等体。
在技术文档RFC1771定义了1~7号的BGP路由属性,依次是:
1,ORIGIN(产生该路由信息的AS);
2,AS_PATH(包已通过的AS集或序列);
3,NEXT_HOP(要到达该目的下一跳的IP地址,IBGP连接不会改变从EBGP发来的NEXT_HOP);
4,MULTI_EXIT_DISC(本地路由器使用,区别到其他AS的多个出口);
5,LOCAL-PREF(在本地AS内传播,标明各路径的优先级);
6,ATOMIC_AGGREGATE;
7,AGGREGATOR。
8,COMMUNITY。
其中,1、2号属性是公认强制;3、5、6是公认可选;7、8是可选过渡;4是可选非过渡。
这些属性在路由的选择中,考虑的优先级是不同的,仅就这8个属性来说,其中优先级最高的是LOCAL-PREF,接下来是ORIGIN和AS_PATH。BGP所使用到的路由属性并不仅仅是这8个,其他的具体内容可以参阅RFC文档(RFC1771、1996、1997、1966、1863、2283)。
网络层可到达性(NLRI)包含了**<长度,前缀>**这样的二维数组,使用CIDR(Classless Interdomain Routing)技术,来__聚合路由__,以减缓BGP表的增长速度。
==== BGP工作流程如下: ====
首先,在要建立BGP会话的路由器之间建立TCP会话连接,然后通过交换OPEN信息来确定**连接参数**,如运行版本等。建立**对等体连接**关系后,最开始的路由信息交换将包括**所有**的BGP路由,也就是交换BGP表中所有的条目。初始化交换完成以后,只有当路由条目发生改变或者失效的时候,才会发出**增量的触发性**的路由更新。所谓增量,就是指并不交换整个BGP表,而只更新发生变化的路由条目;而触发性,则是指只有在路由表发生变化时才更新路由信息,而并不发出周期性的路由更新。比起传统的全路由表的定期更新,这种__增量触发的更新__大大节省了带宽。路由更新都是由UPDATE消息来完成。UPDATE包含了**发送者可到达的目的列表和路由属性**。当没有路由更新传送时,BGP会话用**KEEPALIVE消息**来验证连接的可用性。由于KEEPALIVE包很小,这也可以大量节省带宽。在__协商发生错误__时,BGP会向双方发送NOTIFICATION消息来通知错误。
===== 5.BGP与IGP的互操作 =====
BGP路由表是__独立__于IGP路由表的,但是这两个表之间可以进行信息的交换,这就是前面提到的__“再分布”__技术(Redistribution)。
信息的交换有两个方向:从BGP注入IGP,以及从IGP注入BGP。前者是将AS外部的路由信息传给AS内部的路由器,而后者是将AS内部的路由信息传到外部网络,这也是路由更新的来源。
把路由信息从BGP注入IGP涉及到一个重要概念——__同步__(Synchronization)。同步规则,是指当一个AS为另一个AS提供了过渡服务时,只有当本地AS内部所有的路由器__都__通过IGP的路由信息的传播收到这条路由信息以后,BGP才能向外发送这条路由信息。当路由器从IBGP收到一条路由更新信息时,在转发给其他EBGP对等体转之前,路由器会对同步性进行验证。只有IGP认识这个更新的目的时(即IGP路由表中有相应的条目),路由器才会将其通过EBGP转发;否则,路由器不会转发该更新信息。
同步规则的主要目的是__为了保证AS内部的连通性,防止路由循环的黑洞__。但是在实际的应用中,一般都会将同步功能禁用,而使用__AS内IBGP的全网状连接结构__来保证连通性,这样即可以避免向IGP中注入大量BGP路由,加快路由器处理速度,又可以保证数据包不丢失。要安全的禁用同步,需要满足以下两个条件之一:1,所处的AS是单口的,或者说是末端AS(Stub AS)――即是指只有一个点与外界网络连接。2,虽然所处的AS是过渡型的(指一个AS可以通过本地AS,与第三方AS建立连接的),但是在AS内部的所有路由器都运行BGP。第2种情况是很常见的,因为AS内所有的路由器都有BGP信息,所以IGP只需要为本地AS 传送路由信息。大部分的网络设备在实现BGP时,都提供了禁用同步的开关。
将IGP路由信息注入BGP,是路由更新的来源。它直接影响到因特网的路由稳定性。信息注入有两种方式:动态和静态。
__动态注入__又分为完全注入和选择性注入。完全动态注入是指将所有的IGP路由再分布(Redistribution)到BGP中。这种方式的优点是配置简单,但是可控性弱,效率低。选择性的动态注入则是将IGP路由表中的一部分路由信息注入BGP(如使用CiscoIOS中的network子命令)。这种方式会先验证地址及掩码,大大增强了可控性,提高了效率,可以防止错误的路由信息注入。
但是无论哪种动态注入方式,都会造成路由的不稳定。因为动态注入完全依赖于IGP信息,当IGP路由发生路由波动时,不可避免的会影响到BGP的路由更新。这种路由的不稳定会发出大量的更新信息,浪费大量的带宽。对于这种缺陷,可以使用在边界处使用__路由衰减和聚合__(BGP4的新增特性CIDR)来改善。
静态注入就可以有效解决路由不稳定的问题。它是将静态路由的条目注入到BGP中去。静态路由存在于IGP路由表中。由于静态路由条目是人为的加入的,不会受到IGP波动的影响,所以很稳定。它的稳定性防止了路由波动引起的反复更新。但是,静态注入也会产生数据流阻塞等问题。所以,在选择注入方式时,需要根据网络的实际状况来作出选择。
BGP还提供选择不同__路由策略__(Policy)的方法来控制BGP更新信息的数据流。具体的说,可以改变__管理距离__(Administrative distance)来确定使用哪一个路由协议的更新信息;可以使用__BGP过滤__(如route maps)来控制更新数据流;还可以用CIDR和地址聚合来改变更新信息;也可以使用路由反射器(Route Reflectors)来改变路由更新信息的转发方式,从而改变对BGP内部网络的物理拓扑的全网状要求。
6.针对大型网络的扩展特性
前面已经提到,由于IBGP的Split-horizon特性,为了保证连续性,就__必须在AS内实现全网状的__(full meshed)连接。但是,对于一个X个节点的网络来说,全网状的拓扑要求((X-1)X/2)个连接。当X的值很大的时候,就会带来过多的花费,以及庞大的配置任务。这是很不经济和低效的。
为了减少对IBGP链路的要求,在RFC1966、RFC1965中,分别提出了__路由反射器__(Route Reflection)和__联盟__(Confederations)技术。路由器可以配置成路由反射器,路由反射器允许将一个IBGP传来的BGP路由传到另一个IBGP链路上。这样就缓解了对全网状拓扑的需求。但是并不是所有情况下,路由反射器都是一种最佳选择,因为这样会加大作为反射器的路由器的系统开销,从而减慢处理速度,甚至造成数据丢失。而且,如果路由反射器出现问题,那么所有的连接都会被中断。为了防止中断出现,增加冗余度,一般可以配置多个路由反射器。
{{./4.jpg}}
图四
联盟则是__将AS再划分成子AS__(sub AS),在sub AS中运行IBGP,使用全网状结构;而在sub AS之间使用EBGP,这样也可减少对IBGP连接的需求。联盟同样也存在缺陷,如路由选择等。所以和路由反射器一样,一般只在存在很多IBGP连接时才会使用联盟技术。
===== 7.BGP的使用 =====
BGP的功能是在各AS之间完成路由选择。它主要用于ISP(Internet Service Provider)之间的连接和数据交换。但是,并不是所有情况下BGP都适用。使用BGP会大大增加路由器的开销,并且大大增加规划和配置的复杂性。所以,使用BGP协议需要先做好需求分析。
一般来说,如果本地的AS与多个外界AS建立了连接,并且有数据流从外部AS通过本地AS到达第三方的AS,那么可以考虑使用BGP来控制数据流。如果本地AS与外界只有一个连接(通常说的stub AS),而且并不需要对数据流进行严格控制,那就不必使用BGP协议,而可以简单的使用静态路由(Static route)来完成与外部AS的数据交换。另外,硬件和线路的原因也会影响到BGP的选择。如前所说,使用BGP会加大路由器的开销,并且BGP路由表也需要很大的存储空间,所以当路由器的CPU或者存储空间有限时,或者带宽太小时,不宜使用BGP路由协议。
===== 8.总结 =====
BGP的主要功能是连接各个AS,提供AS之间的信息交换。各个BGP系统之间交换路由信息,来保证得到一个无环路的路由结构。BGP还提供了在AS的水平上的路由策略的选择方式,以优化路由选择。作为整个互联网的整体支架,BGP提供了一个功能强大的连接AS的工具,但是它在使用中也存在一定的局限性,所以在决定使用之前一定要作认真分析,以确定是否使用BGP以及具体实施方案。

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,75 @@
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2012-09-03T20:32:02+08:00
====== 路由基础详解--OSPF路由协议 ======
Created Monday 03 September 2012
http://net.zdnet.com.cn/network_security_zone/2010/0813/1847831.shtml
本文主要给大家讲述了路由器使用时常用到的一种网络协议--OSPF协议,并且针对它的特性特点,给出了具体的介绍,希望看过此文之后能对你有所帮助。
鉴于早期__距离矢量协议__所造成的诸多网络问题,网络设计者又开发了更新、更先进的路由协议——__链路状态路由协议__。OSPF路由协议就是一种链路状态路由协议。随着Internet技术在全球范围的飞速发展,OSPF已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由协议之一。作为一种链路状态的路由协议,OSPF将__链路状态广播数据包LSA(Link State Advertisement)__传送给在某一区域内的__所有__路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。
OSPF路由协议也是一种IGP协议,它只能在工作在自治域系统内部,不能跨自治域系统工作。对比距离矢量路由协议,OSPF路由协议具有__快速收敛__与适用范围更广的优势。
在大型的网络拓扑结构中,如果每台路由器都将自己学到的整个网络的路由信息传送更新的话,将会严重地占用带宽资源,对于像荣新外企IT培训中心这样以传输音频、视频为主的数据时,更会出现音频、视频传输的不流畅。而OSPF路由协议很好地解决了这些问题。在刚刚开始工作的时候,首先和相邻的路由器建立__邻居关系__,形成邻居表,然后互相交换自己所了解的网络拓扑。路由器在没有学习到全部网络拓扑是__不会进行任何路由操作__的,因为这时候的路由表是空的。只有当路由器学到了__全部__的网络拓扑,建立了__拓扑表(也称链路状态数据库)__之后,他们会使用__最短路径优先(SPF)__算法,从拓扑表中计算出最佳路由。因为,所有运行OSPF路由协议的路由器都维护着相同的拓扑表,路由器可以自己从中计算路由。
在运行OSPF路由协议的网络里,当网络拓扑发生了变化,例如,一条物理线路出现了故障。发现该变化的邻居路由器会向其他路由器发送__触发的路由更新包__——__链路状态更新包(LSU)__。在LSU中包含了关于发生变化的网段信息,__链路状态通告(LSA)__。接收到该更新包的路由器,会继续向其他路由器发送更新,同时根据LSA中的信息,在拓扑表里重新计算发生变化网段的路由。由于没有对链路的保持时间,OSPF路由协议的收敛速度是相当快的,这一点对于大型的网络是非常关键的。
OSPF路由协议还可以__把一个大型的网络划分区域__,这点跟IS-IS相似,不同的是在OSPF中会有一个__唯一的骨干区域__。这样对于**路由信息的汇总**起了很好的作用,对于设备的采用也可以根据其所在区域的位置选择不同成本的设备,对工程成本有了很好的规划。这种特性也使OSPF路由协议能够在大规模的路由网络中正常高效地工作。
1.链路
将运行OSPF路由协议的路由器所连接的网络线路称为链路。
路由器会检查其所连接的网络状态,然后将该信息由自己的所有接口向邻居传送,这个过程称为“泛洪(Flooding)”。运行OSPF路由协议的路由器,由邻居处得到关于链路的信息,并且将该信息继续向其他邻居传送。
2.链路状态
链路的工作状态,是正常工作,还是发生故障,这些相关的信息称为链路状态。
在OSPF中,只需要发送链路状态信息就可以确保对网络的掌握。也是通过这种信息来交换学习路由信息。
3.区域
OSPF路由协议会把大规模的网络划分成多个小范围的区域,以避免大规模网络所带来的弊病,从而提高网络性能。OSPF中区域的划分是非常重要的内容,很多公司的面试题都会涉及到这个方面,后面会具体了解OSPF。
4.邻居
在同样运行OSPF路由协议的两台路由器__物理直连__时,就可以成为邻居关系。只有成为了邻居关系它们互相才能交换路由信息。当线路出现问题时,可以通过查看邻居状态来排除故障。
5.链路开销
OSPF路由协议通过计算链路的带宽来计算最佳路径的选择。每条链路根据带宽不同会有不同的度量值,这个度量值在OSPF路由协议中称作__“开销(Cost)”__。
10Mbps的以太网的链路开销是10,16Mbps令牌环网的链路开销是6,FDDI或快速以太网的开销是1,2M串行链路的开销是48,56KB串行线路的开销为1785。
路由器将整条路径的开销相加,所得之和最小的值为最佳路径。
6.邻居表
与EIGRP、IS-IS一样,OSPF路由协议也需要维系**3张表**。__最基础的就是邻居表__。
凡是与路由器同在OSPF路由协议中并且物理直连的路由器都会被收录在该表中,只有形成了邻居表,路由器才可能向其他的路由器学习拓扑结构。
7.拓扑表
当路由器建立了邻居表之后,运行OSPF路由协议的路由器会__互相通告自己所了解的网络拓扑建立拓扑表__。在一个区域里,所有的路由器应该形成**相同**的拓扑表。只有建立了拓扑表之后,路由器才能使用SPF算法从拓扑表里计算路由。
8.路由表
路由器依靠路由表来为数据包进行路由操作。在运行OSPF路由协议的路由器中,当完整的拓扑表建立起来之后,路由器便会按照链路带宽的不同,使用SPF算法从拓扑表例计算出路由,记入__路由表__。
9.路由器标识(Route ID)
路由器标识不是为路由器起的名称,而是路由器在OSPF路由协议操作中对自己的标识。一般来说,在没有配置回环接口(Loopback Interface:一种路由器上的虚拟接口,它是逻辑存在的,路由器上并没有这种物理接口,它是永久开启的。)时,路由器的所有物理接口上配置的__最大IP地址__就是这台路由器的标识。如果在路由器上配置了回环地址接口,则不论回环地址上的IP地址是多少,该地址都自动成为路由器的标识。当在路由器上配置了多个回环接口时,这些回环接口中最大的IP地址将作为路由器的标识。
在实际工程中,可能会遇到没有设置Route ID的情况,由路由器默认的最大物理接口地址为Route ID,而这个接口并没有连接任何设备,也就是Shut Down状态,在这时不管这台路由器的其他接口状态如何,OSPF都将随着Route ID的Shut Down而不启动。所以,在设置Route ID时一定要选用Loopback地址作为Route ID,因为这个地址是永久不关闭的,而且最好有完善的规划。
10.LSA与LSU
路由器对__某一条线路__的状态更新称为LSA,对__一组链路的状态__更新称为LSU,**LSU更新包里可包含多个LSA**。
11.DR与BDR
当几台路由器工作在同一网段上时,为了__减少网段中路由信息的交换数量__,OSPF路由协议定义了DR和BDR。负责__收集__网络中的链路状态通告,并将他们__集中__发给其他的路由器。BDR实际上是DR的备份,在DR本身没有问题时,BDR并不工作,一旦DR出现了问题BDR就会接替DR的工作。在实际工程中,DR与BDR的概念应用并不广泛。