BGP边界网关路由协议
一、BGP概述
BGP是无类别的路径矢量EGP协议,是EGP类别的路由协议,用于AS与AS间进行路由条目共享;AS是自治系统,AS编号范围0-65535标准编号(其中1-64511公有,64512-65535私有)32位二进制构建为扩展编号;BGP协议为不同AS间共享路由,工作时隔离两个AS的内部网络,形成一个独立的交互空间;且同时可以实施强大的策略来干涉选路;
二、对比IGP和BGP
IGP追求:收敛速度快,选择路径佳(无环),占用资源少 ,hop-by-hop
EGP追求:可控性 ,可靠性 ,AS-BY-AS
三、BGP设计特性
1、可靠性——BGP协议虽然像距离矢量协议一样仅传递路由条目,但更新量依然很大;为了避免对设备资源的占用选择了增量更新——仅触发、无周期;故需要保障所有的路由传递到位—可靠 因此BGP协议基于TCP 179端口工作,TCP的三次握手条件使得TCP只能基于单播工作,同时BGP需要非直连建邻;BGP基于IGP之上,先IGP使BGP设备间IP可达,然后BGP才能基于TCP建立非直连邻居关系;另外BGP可以非直连建邻(peer),BGP承载于IGP之上。
2、可控性——建邻、路由宣告、选路控制(干涉选路),BGP协议不是路由的产生者,仅为搬运者,且AS间正常应该存在大量的链路来保障稳定性;故BGP协议传递的路由条目很难默认最佳选路;–需要管理员对路由进行大量的策略来干涉选路;
3、AS-BY-AS——以一个AS为一跳,将一个AS看成一个整体;
四、BGP特点
- 无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新–仅触发无周期
- 具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议(BGP的核心就是属性)
- 可以在进项和出项对流量实施强大的策略–可控性
- 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(汇总)
五、BGP的数据包
基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;首先通过TCP的三次握手来寻找到邻居:
- Open 仅负责邻居关系的建立,正常进收发一次即可;携带route-id,hold time 默认3min
- Keeplive 保活 周期1min查询邻居关系是否存在;实际保活TCP会话;
- Update 携带路由条目 目标网络号+各种属性
- Notification 出现错误数据时收发;
六、BGP的工作过程
1、管理员定义邻居的ip地址,前提要求对邻居ip可达 — IGP可达;
2、启动BGP协议后,先目标端口为179进行TCP的三次握手来建立TCP的会话;
3、会话建立后,收发open报文来建立邻居关系,生成邻居表
;
4、邻居关系建立后,邻居间使用update 共享路由条目,在收发了路由信息后,本地生成BGP表
;
5、Bgp表中装载本地发出及接收到的所有路由条目;
6、之后路由器将BGP表中的最优路径(不一定是最佳选路,仅为BGP参数最佳)加载于路由表
中;
7、收敛完成!仅keeplive周期保活即可;
七、结构突变
1、 新增网段 – BGP更新源设备将使用update来告知本地所有的邻居
2、 断开网段 – BGP更新源设备将使用update来告知本地所有的邻居
3、 无法沟通 – 3min hold time到时时断开邻居关系和TCP会话,之后删除从该邻居处学习到的所有信息;
BGP更新源设备并不一定直连断开或新增网段的设备,而是第一台将该路由发布到BGP协议中的路由器;
八、专业名词
EBGP:外部的BGP邻居关系,两台处于不同AS的BGP路由器间建立的邻居关系
IBGP:内部的BGP邻居关系,两台处于同一个AS内的BGP路由器间的建立的邻居关系
九、BGP的路由黑洞
产生黑洞的情况:
由于bgp协议可以非直连建立邻居关系,故若两台BGP邻居间存在未运行BGP协议的路由时;可能出现路由条目可以在控制层面正常单播传递,但数据层面流量经过未运行BGP协议的设备时,无法通行;即控制层面可达,数据层面不可达;
解决方法:
1、 物理或逻辑链路全连
2、 全连的BGP邻居关系,所有设备运行bgp;
3、 将BGP路由条目重发布到IGP协议中(LAB)
4、 最佳方案—MPLS 多协议标签交换
十、BGP的防环机制
1、EBGP水平分割——防止EBGP环路
利用BGP条目中的as-path 属性,该属性将记录所有经过的AS编号;接收到的路由条目中若as-path中存在本地的AS号,将拒绝接收;
2、IBGP水平分割——防止IBGP环路
基于AS-BY-AS特性,BGP的路由条目默认在一个AS内部传递时,其属性不变化;
IBGP水平分割— 从一个IBGP邻居处学习到的路由条目不得传递给本地其他IBGP邻居;
因为BGP协议具有非直连建立邻居的能力,故在一个AS内部只要设备运行BGP协议,那么其必然存在EBGP邻居关系(一定连接了其他的AS);IBGP水平分割规则将导致在一个AS内部所有运行了BGP协议的路由器间,均需要建立IBGP邻居关系,才能正常传递路由条目—建立邻居关系的配置成指数增长;
可以使用联邦和路由反射器来解决该问题
十一、BGP的基础配置
【1】 建立邻居关系—BGP基于单播进行建邻和沟通,故需要管理员手工指定邻居的ip地址;
使用直连接口ip地址来建立EBGP邻居关系
[r1]bgp 1 启动时需要定义真实的AS号,没有多进程概念
[r1-bgp]router-id 1.1.1.1 建议手工配置RID,--手工—环回最大值---物理接口最大值
[r1-bgp]peer 12.1.1.2 as-number 2 对端IP地址,及对端所在的AS号
2)实际工程中,一个AS的内部正常具有较为复杂的网络拓扑结构,设备到设备间存在大量的备份和负载均衡;因此建立IBGP邻居关系时,建议使用双方的环回接口来作为源/目IP地址;
[r3]bgp 2
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 2.2.2.2 as-number 2
一旦使用环回接口作为目标ip地址时,也应该修改源为本地的环回接口ip地址
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
3) 若EBGP邻居间存在多条直连链路时,也建议使用环回接口来建立;
环回建邻首先要IP可达
[r4]ip route-static 5.5.5.0 24 45.1.1.2
[r4]ip route-static 5.5.5.0 24 54.1.1.2
建立BGP邻居关系
[r5]bgp 3
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
BGP规定EBGP邻居间默认所有的BGP数据包TTL值为1,导致环回建立邻居关系服务正常
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
当两端邻居建立配置完成后,将进行tcp的三次握手,建立TCP的会话
;
[r1]display tcp status
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State
b4ca4bc8 164/8 12.1.1.1:179 12.1.1.2:50042 0 Established
当TCP会话建立后,BGP协议基于会话收发一次open报文,建立邻居关系,生成邻居表
;
[r1]display bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 1
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
12.1.1.2 4 2 6 7 0 00:04:29 Established 0
【2】BGP的路由宣告
BGP协议本身不计算生成路由条目;负责转发从其他BGP邻居传递过来的路由条目;同时可以将本地路由表中任意路由宣告到BGP协议中来;
BGP宣告配置时,只能宣告本地路由表中的路由条目,且宣告配置中网络号的掩码必须和路由表中的记录完全的一致;
[r1]bgp 1
[r1-bgp]network 1.1.1.0 24
当BGP设备进行宣告配置后,本地生成BGP表
:装载本地发出及接收到所有BGP路由
[r1]display bgp routing-table
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.0/24 0.0.0.0 0 0 i
状态 目标网络号 下一跳 属性
状态字段中 *表示可用 >表示条目优秀,即可以加表,可以传递(共享给本地的其他邻居)
状态处的i表示该条目通过IBGP邻居关系学习
不优的原因:下一跳不可达(因为AS-BY-AS)
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local) 将BGP路由传输给邻居3.3.3.3时修改下一跳属性为本地(2.2.2.2)
条目传递给本地的ebgp邻居,自动修改属性,包括下一跳为本地;
十二、有条件的打破IBGP的水平分割
IBGP水平分割——从一个IBGP邻居处学习到的路由条目不能传递给本地的其他IBGP邻居,用于避免IBGP环路;
为什么要打破IBGO水平分割?
因为BGP可以非直连建邻,故正常一台运行了BGP协议的路由器,均存在EBGP邻居,需要从其他AS学习路由条目,再共享到内部AS时,由于水平分割的存在,需要和本地AS内所有的BGP设备建立IBGP邻居关系;IBGP邻居关系的数量成指数上升;
==有条件打破IBGP水平分割,何谓有条件?
所谓有条件,即在管理员确定网络无环的前提下,人为的打破水平分割限制建设邻居关系的数量;
无环的核心思想为AS-BY-AS规则;一条路由条目在AS内部传递时其属性默认不变化;
打破IBGP水平分割的两种方式?
【1】 路由反射器
有3种角色,RR(反射器)、客户端 、非客户端
3者构建一个簇;可以理解为RR为中心站点,客户端或非客户端是分支站点
要求所有分支与中心必须是IBGP邻居关系;且在一个簇中至少存在一台客户端;
1)反射规则:
1、 RR从一台EBGP邻居处学习到的路由可以传输给本地的客户端、非客户端、其他EBGP邻居
2、 RR从一台客户端邻居处学习到的路由,可以传输给本地的其他客户端、非客户端、其他EBGP邻居
3、 RR从一台非客户端邻居处学习到的路由条目,可以传输给本地的客户端,其他EBGP邻居;不得传输给本地的其他非客户端;
注意:若路由条目不优,不具有传递性;反射器也无法反射路由;
2)配置反射器
[r3-bgp]peer 2.2.2.2 reflect-client
该指令的作用,是让2.2.2.2成为本地的客户端,同时本地成为路由反射器;
【2】 联邦
将一个真实的大AS,逻辑的分为多个小AS;小AS的编号建议为私有编号;
小AS间构建联邦内的EBGP邻居关系,可以向真实EBGP关系一样传递路由条目,但不修改属性; 对于该大AS外的其他AS,是不知道内部的小AS情况;
1)所有配置全部基于小as号进行
[r3]bgp 64512
[r3-bgp]router-id 3.3.3.3
[r3-bgp]pe 2.2.2.2 as-number 64512
[r3-bgp]pe 2.2.2.2 connect-interface LoopBack 0
[r3-bgp]pe 4.4.4.4 as-number 64513
[r3-bgp]pe 4.4.4.4 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 ebgp-max-hop 2
2)联邦内所有运行BGP协议的设备均声明自己所在的大AS号
[r2]bgp 64512
[r2-bgp]confederation id 2
3)小AS间互指peer;在联邦内的ebgp邻居关系间的两台设备,互相定义对端的小AS号;
[r4-bgp]confederation peer-as 64512
切记:华为设备,必须先定义联邦的id,和互相小AS号后再配置邻居关系建立的命令;
在实际的工程案例中,联邦和反射器是同时被使用,降低配置量;
十三、BGP的宣告问题
若在一台运行了BGP协议的路由器上,宣告本地路由器表中通过其他协议学习到的路由信息时,将携带本地到达这些目标网段的cost值;
若一台BGP设备通过IBGP关系学习到了一条BGP路由,路由中携带了度量值;之后本地将这条路由转发到本地的其他EBGP邻居时,将删除cost,因为这些cost不是本地的度量;故,若需要基于cost值进行选路干涉,建议本地也配置宣告这些路由条目,来携带本地的cost到其他EBGP邻居;
十四、关闭自动汇总
在BGP协议中,自动汇总功能默认被关闭
切记:在RIP/EIGRP这些IGP中的DV型路由协议中,开启自动汇总,将导致邻居间传递的所有路由条目携带主类的子网掩码
但在BGP协议中,自动汇总功能对正常的BGP宣告路由无意义,仅针对重发布进入BGP协议的路由起效;
开启自动汇总时:不携带原有掩码,使用主类;不携带cost值;故不建议开启
[r2-bgp]summary automatic bgp开启自动汇总命令
BGP协议中的宣告可以理解为逐条的重发布;重发布IGP到BGP可以理解为批量的宣告;但两者产生的路由,其起源属性不同,宣告路由优于重发布路由;
因此建议若使用重发布,也和宣告一样,每台存在EBGP邻居的BGP路由器均考虑进行一次重发布;
十五、手工汇总—BGP称为聚合
【1】 不是BGP的正常聚合配置
利用了BGP的宣告的特征—本地路由表中的路由条目无论来源,无论去向(缺省除外); 先在本地路由表中静态添加一条指向汇总地址的空接口防环路由,然后再在BGP协议中宣告这条空接口路由,减少了宣告明细部分的操作量;
注:BGP工作在互联网环境下,控制选路的情况十分常见,AS间可以在传递聚合条目的同时,让部分路由器来传递明细路由,可以实现干涉选路的功能;
【2】标准的BGP协议聚合配置
即先逐条宣告本地所有明细路由
,再进行聚合配置
[r1-bgp]aggregate 20.1.0.0 22 配置完成后,本地自动生成空接口防环路由,此时明细和聚合条目同时发出
[r1-bgp]aggregate 20.1.0.0 22 detail-suppressed 仅发送聚合条目,不转发明细条目;
基于需要,需要在传递聚合条目的同时,再转发部分的明细路由。
1、 抑制列表——定制抑制列表,在传递路由过程中,对部分不希望传递的条目进行抑制
[r1]ip ip-prefix a permit 20.1.1.0 24
[r1]route-policy a permit node 10
[r1-route-policy]if-match ip-prefix a
[r1-route-policy]q
[r1]bgp 1
[r1-bgp]aggregate 20.1.0.0 22 suppress-policy a 使用抑制规则调用route-policy时,被匹配允许的流量最终被抑制传递
2、 分发列表
[r1]bgp 1
[r1-bgp]aggregate 20.1.0.0 22
[r1]ip ip-prefix b deny 20.1.1.0 24
[r1]ip ip-prefix b permit 0.0.0.0 0 le 32
[r1]bgp 1
[r1-bgp]filter-policy ip-prefix b export
3、 route-map 在bgp协议中直接调用route-map;
[r1]bgp 1
[r1-bgp]aggregate 20.1.0.0 22
[r1]ip ip-prefix c permit 20.1.1.0 24
[r1]route-policy c deny node 10
[r1-route-policy]if-match ip-prefix c
[r1-route-policy]q
[r1]route-policy c permit node 20
[r1-route-policy]q
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy c export
4、直接调用前缀列表实现分发
[r1]bgp 1
[r1-bgp]aggregate 20.1.0.0 22
[r1]ip ip-prefix d deny 20.1.1.0 24
[r1]ip ip-prefix d permit 0.0.0.0 0 le 32
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 ip-prefix d export
十六、 认证 (邻居间保证更新安全)
[r1-bgp]peer 12.1.1.2 password cipher cisco123 密文——两端的邻居配置需要一致
十七、BGP属性
华为和cisco均存在6种基本属性 第一种均为私有属性
1、 Preference_Value 偏好值(华为私有)
传播范围 | 默认值 | 大优或小优 |
---|---|---|
不传播 | 0 | 大 |
全局修改:
[r3-bgp]peer 2.2.2.2 preferred-value 1 本地从邻居2.2.2.2处学习到的所有路由优先值修改为1;
使用偏好值实现负载分担
负载分担
:访问不同的目标网段时,让流量进入不同链路来进行通讯;将所有链路利用起来,而不是仅只用唯一链路通讯;
【1】使用前缀抓取需要修改属性的网段
[r3]ip ip-prefix w permit 1.1.1.0 24
【2】定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r3]route-policy w permit node 10
[r3-route-policy]if-match ip-prefix w
[r3-route-policy]apply preferred-value 1
[r3-route-policy]q
[r3]route-policy w permit node 20
[r3-route-policy]q
【3】因为该属性为私有不传递属性,故调用时,只能在控制层面的入向调用,来影响本地的BGP生成;
[r3]bgp 2
[r3-bgp]peer 2.2.2.2 route-policy w import
Weight 权重(Cisco私有)
适用于本地AS去外部AS时选路,适用于一台路由器,在多条路径下选路,无视邻居属性。本地产生的为32768,学习的为0.不能传递修改:
修改权重全局操作:
router bgp 2
neighbor 10.1.34.3 weight 1 修改该邻居所有传递过来的路由。
使用权重实现负载均衡
router bgp 2
neighbor 10.1.34.3 route-map a in 只针对某一个路由修改weght,只能用in方向。
ip prefix-list a permit 10.1.1.1/32
route-map a permit 10
match ip address prefix-list a
set weight 1
route-map a permit 20
weight的值修改只能影响本路由器,不能影响到其他路由器,意味着如果as只有一个出口路由器weight选路是适用的,但是有多个出口的路由器下不适用。
2、 local-preference 本地优先级(第一个公有属性)
最常使用的属性,最常用于干涉IBGP选路;
传播范围 | 默认值 | 大或小优 |
---|---|---|
IBGP邻居关系间 | 100 | 大 |
全局修改
[r4-bgp]default local-preference 101
本地所有传输到IBGP的路由条目,其中本地优先级修改为101
使用本地优先级实现负载分担
【1】使用前缀抓取需要修改属性的网段
[r2]ip ip-prefix p permit 1.1.1.0 24
【2】定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r2]route-policy p permit node 10
[r2-route-policy]if-match ip-prefix p
[r2-route-policy]apply local-preference 101
[r2-route-policy]q
[r2]route-policy p permit node 20
[r2-route-policy]q
【3】调用时在控制层面的出或入向均可,但必须为IBGP邻居关系;
[r2]bgp 2
[r2-bgp]pe 3.3.3.3 route-policy p export
3、 as-path 自治路径(公有属性)
优选经过AS数量较少路径;该属性的自动添加是在EBGP邻居关系间进行;
还用于EBGP水平分割——接收到的条目中若存在本地AS号,将拒绝;可以在人为的在路由信息中添加AS编号;但只能在EBGP邻居关系间操作;但也可用于干涉IBGP邻居关系下选路;
使用as-path实现负载均衡
【1】使用前缀抓取需要修改属性的网段
[r4]ip ip-prefix as permit 1.1.1.0 24
【2】定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r4]route-policy as permit node 10
[r4-route-policy]if-match ip-prefix as
[r4-route-policy]apply as-path 1 1 additive
[r4-route-policy]q
[r4]route-policy as permit node 20
[r4-route-policy]q
【3】可以在控制层面的入或出方向调用,但只能在ebgp邻居间操作;可干涉ebgp、ibgp关系选路;
[r4]bgp 2
[r4-bgp]pe 14.1.1.1 route-policy as import
4、Origin 起源属性 (标记路由起源)
起源属性——该条目是通过什么方法进入到的BGP表中来的
- 使用i表示管理员network宣告配置
- 使用e表示EGP重发布到BGP的路由
- 使用?表示IGP重发布到BGP的路
选路规则:i优于e优于?
该属性的修改可以在整个控制层面流量经过的任意接口修改;
使用origin属性实现负载均衡
【1】使用前缀抓取需要修改属性的网段
[r4]ip ip-prefix o permit 1.1.1.0 24
【2】定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r4]route-policy o permit node 10
[r4-route-policy]if-match ip-prefix o
[r4-route-policy]apply origin egp 2 此处配置的AS为对端邻居的AS号
[r4]route-policy o permit node 20
[r4-route-policy]q
【3】在协议中针对某个邻居调用
[r4]bgp 2
[r4-bgp]pe 3.3.3.3 route-policy o export
5、MED 多出口的鉴别属性
BGP协议默认不存在cost;MED就是人为的利用路由器优选路径的规则——先比较管理距离(华为为优先级),若一致再比较度量值(华为为cost)
BGP协议在特定条件下携带本地到达目标的cost值;本地宣告(重发布)自己路由表中的路由后,将其传递给本地的ebgp邻居,将携带cost值;对于其他AS的设备学习到从同一个as传递过来的路由,优选MED最小的路径;
管理员可以在控制层面传递路由的过程中,手工修改MDE;最常用于干涉ebgp选路;常常用于AS1干涉AS2对AS1的选路;
使用MDE属性实现负载均衡
【1】使用前缀抓取需要修改属性的网段
[r1]ip ip-prefix med permit 1.1.1.0 24
【2】定制策略来进行修改,一定关注是否需要空表来允许其他路由通过
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 10
[r1-route-policy]q
r1]route-policy med permit node 20
[r1-route-policy]q
【3】在协议中针对某个邻居调用
[r1]bgp 1
[r1-bgp]pe 14.1.1.2 route-policy med export
小技巧:由于实际工程中,管理员只能在一个AS中配置,故无法通过查看BGP表来判断选路结果,可以通过扩展ping来解决
[r1]ping -r -a 1.1.1.1 3.3.3.3
6、next-hop 下一跳
到达路由的下一跳路由器ip地址,IBGP之间next-hop不变,为0的时候会修改为更新源地址,EBGP之间传路由next-hop修改为更新源地址
选路:下一跳为0的优于其他路径
7、Atomic aggrehate
attribute-map 设置聚合后的路由添加明细
adviertise-map
8、aggregator
用来通告汇总路由的汇聚路由BGP-id(cisco私有)
方便寻找会汇总着
9、Community
团体属性 为了更好的标识BGP路由,标识格式为X:Y
团体值的设置不能在EBGP之间,他的传递可以在IBGP之间也可以在ENGP之间设置必须在IBGP之间可以in 也可以out
传递设置:
neighbor 10.1.24.54 send-community both /standard //团体属性需要传递必须开启该指令
10、Originator id
路由反射使用,是路由发起者产生的一个32比特的值。该值是本地路由发起者的RID,如果路由发起者从属性上看到自己RID,说明有环路就忽略
11、cluster list
路由反射器使用,是路由经过反射器簇id的一个序号,如果反射器在属性里看到自己的簇id就说明有环路,忽略
十八、BGP的选路
比较前提,多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)
- 优选Preference_Value值最高的路由(私有属性,仅本地有效)。 不传递 权限最高属性 可以干涉EBGP/IBGP选路
- 优选本地优先级(Local_Preference)最高的路由。
只能IBGP邻居关系间传递 ,最常干涉IBGP关系的选路 - 优选手动聚合——>自动聚合——>network——>import——>从对等体学到的。
- 优选AS_Path短的路由。
EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改; - 起源类型IGP——>EGP——>Incomplete。
起源属性 i优于e优于?; 可在控制层面任意接口修改; - 对于来自同一AS的路由,优选MED值小的。
默认为0,宣告或重发布(关闭自动汇总)路由时携带本地到达目标的cost
最常用于干涉EBGP选路的属性 - 优选从EBGP学来的路由(EBGP>IBGP)。
- 优选AS内部IGP的Metric最小的路由。
- 优选Cluster_List最短的路由。
- 优选Orginator_ID最小的路由。
- 优选Router_ID最小的路由器发布的路由。
- 优选具有较小IP地址的邻居学来的路由。