实验 18:边界网关协议 BGP
# 180.实验 18:边界网关协议 BGP
下面我们来进行一个仿真实验,本仿真实验的目的在于验证边界网关协议 BGP 的作用,以及学习在思科的路由器上该协议的基本使用方法。
本实验所采用的网络拓扑非常简单,仅由三个路由器互联而成,它们分别属于不同的自治系统,例如这台路由器属于自治系统 100,这台路由器属于自治系统 200,这台路由器属于自治系统 300,那么 100 200 300 指的是自治系统的编号,我们的实验任务是分别启动这三个路由器的 BGP 协议,然后还要对这两台直连的路由器分别进行配置,使他们成为对方的邻站。同理这两台之间的路由器也要分别进行配置,使他们分别成为对方的邻站。
在构建邻居关系之后,各路由器就可以基于 BGP 来进行一些路由信息的交互。例如左边这台路由器它可以宣告自己的直连网络,右边这台路由器也可以宣告自己的这一条的指点网络,最终这三个自治系统就会连通。
我们先给这三台路由器配置 IP 地址,我以上面这台路由器为例,鼠标左键点击它,然后我们切换到命令行。在这里它命令行提示符告诉我们说是否要进行初始化的配置,那么我们输入一个 NO,然后回车,然后再回车就进入了这一般模式,我们输入 EN 也就是 enable 进入特权模式,然后 CONF 然后 T 以终端模式进行配置。然后我就进入到了全局的配置模式,我们先来配置接口 0,它的 IP 地址是 10.0.0.2 int,这是它的简写然后 G0/0 表示的就是接口,这也是它的简写。这样我们就进入到了接口的配置模式,
那么我们给它配置 IP 地址,IP ADD,这也是一个简写的命令,那么后面跟的就是我们要配置的 IP 地址 10.0.0.2,然后配置子网掩码,那么我们就采用 A 类的地址的默认子网掩码就可以了,这儿是 10,那就是一个 A 类地址,我们采用它的默认子网掩码 255.0.0.0,然后回车,最后不要忘记把它的接口状态给它变为打开,也就是 NO SHUTDOWN。那么我们这儿打一个简写的命令,NO SHUT
我们再来配置路由器的接口一的 IP 地址,我们要先切换到接口一,也就是 INTERFACE,然后 G0/1,这样我们就切换到了接口一的配置模式下面,那么我们给他配置 IP 地址,IP ADDRESS ADD 简 20.0.0.2,地址掩码,这也是一个 A 类的,从 20 就知道它是一个 A 类的地址,那么我们也给他配一个 A 类的默认子网源码,255.0.0.0,最后不要忘记,也是要把它开启的状态开启,那么也是输入 NO shut。这样路由器的各个接口的 IP 地址我们就要配置完了,请您给其他台路由器的接口配置 IP 地址,我这里就不再做演示了。
Would you like to enter the initial configuration dialog? [yes/no]: no
Press RETURN to get started!
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#int g0/0
Router(config-if)#ip add 10.0.0.2 255.0.0.0
Router(config-if)#no shut
%LINK-5-CHANGED: Interface GigabitEthernet0/0, changed state to up
2
3
4
5
6
7
8
9
10
11
下面我们就来分别启动这三台路由器上的 BGP 协议,并且让这两台路由器建立邻居关系,让这两台路由器建立邻居关系。我们先对上这台路由器进行配置,鼠标左键点击它,然后进入到命令行界面,回车,那么我们现在是在某个接口的配置模式下面,那么我们打一个 exit 退出来,进入到全局配置模式,首先启动他的 BGP 协议,我们这里输入的命令是 route,然后具体的协议是 BGP,然后再空一格后面跟它的自治系统的编号,那么我们这规划的是 200,所以我们这儿输入 200,这样的话我们就已经启动了他的 BGP 的协议。
现在我们要告诉他给他指定一个邻居,比方说这台路由器就是他的邻居,那么具体的命令应该打 NEIGHBOR,然后空格后面跟的就是他的邻居的 IP 地址,那么是 10.0.0.1。另外我们还要指明他邻居的所在自治系统的编号,那么后面跟一个参数叫做 REMOTE,然后-AS 然后在后面就跟上空格,跟上它的自治系统的编号是 100。那么这样我们就指明了给路由器指明了一个它的邻居。
那么另外它还有另外一个邻居,就是这台路由器同样是 NEIGHBOR 然后这个地方我们打 20.0.0.1,也就是路由器的接口。然后路由器所在的自治系统是 300,REMOTE-AS,然后空格 300,这样的话这台路由器上面启动 BGP 协议以及指定他的邻居,这个事情我们就做完了:
Router(config-if)#exit
Router(config)#
Router(config)#route bgp 200
Router(config-router)#neighbor 10.0.0.1 remote-as 100
Router(config-router)#neighbor 20.0.0.1 remote-as 300
2
3
4
5
我们再来左边路由器上做一下。点击这个路由器,然后到它的命令行界面,回车,我们也要退到它的全局配置模式,exit 然后我们先启动它的 BGP 协议,route BGP ,然后它所在的自治系统编号是 100,所以我们这打 100,然后我们就要给他指定邻居,也就是这台路由器具体的 IP 地址就是 10.0.0.2,所以 neighbor 10.0.0.2,然后跟一个参数就是 REMOTE-AS 这个参数后面具体的我们就要给他邻居所在的自治系统的编号是 200,所以我们这儿输入 200。这样我们看到他们之间就已经建立了邻居关系:
Router(config-if)#exit
Router(config)#route bgp 100
Router(config-router)#neighbor 10.0.0.2 remote-as 200
Router(config-router)#%BGP-5-ADJCHANGE: neighbor 10.0.0.2 Up
2
3
4
那么接下来我们再来配置这台路由器,切换到命令行,然后我们回车退出接口的配置模式,然后我们来启动它的 BGP 协议,ROUTER BGP 空格,那么这儿它所在的增值系统的号是 300,所以我们这儿输入 300,然后我们给他指定邻居,他的邻居就是上面这个路由器,具体我们给定 IP 地址,也就是 neighborhood 20.0.0.2,然后跟一个参数也就是自治系统的编号,REMATE-AS 空格,他的邻居就是路由器的邻居,所在自己系统编号是 200,所以我们这儿输入 200,这样的话我们可以看到也建立了邻居关系:
Router(config-if)#exit
Router(config)#route bgp 300
Router(config-router)#neighbor 20.0.0.2 remote-as 200
Router(config-router)#%BGP-5-ADJCHANGE: neighbor 20.0.0.2 Up
2
3
4
现在左右这两台路由器是否可以相互通信的,我们来做一下测试,我们用左边这台路由器去 ping 一下右边这台路由器。我们点击左边这台路由器,然后在它的命令行界面我们输入回车,它进入到了一般的用户模式,我们输入 en 到了特权模式。然后我们就 ping 一下 PING 然后去 ping 右边这个路由器,它的 IP 地址是 20.0.1。我们来具体看一下回车。由于我们这个是在我们这么多次的仿真实验中,我们第一次在路由器里面来进行 ping 的命令,所以我对这个命令解释一下。
那么他这提示说发送 5 个数据载荷为 100 字节的 ICMP 的报文,它有个具体类型,这个 echos 类型就表明这是一个回送请求这样一个类型,这是发给谁的?这是目的 IP 地址。那么他总共发 5 次这种回送请求,对方也就是 IP 地址为 20.0.0.1 的路由器,也就是我们这台路由器每收到一个 ICMP 的回送请求,那么如果正常的话,路由器会向源路由器发回一个请求的响应。也许是 ping 不通的,所以这个地方或者说也许回送请求数据包根本就到达不了目的的路由器,所以做了一个超时限制,也就是说当我源路由器发送 100 字节的 ICMP 的回送请求报文,我发出来以后,我最多经过两秒,我还没有收到这个目的路由器给我发回来的 ICMP 的回送请求的响应,那么我认为就是超时了。
我们可以看到在我们这次 ping 的话,他 ping 5次第一次这地方,它用一个点来表示超时,同样第 2 次点、第 3 次点、第 4 次点、第 5 次点,代表 5 次的都是超时了,如果成功的话会很快,不是小数点而是感叹号。然后他最后给你统计了一下成功率是 0,那也就是他发了 5 个请求,然后 1 个响应都没有收到。这是证明了这两台路由器是不同的。
Router>en
Router#ping 20.0.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.0.0.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
2
3
4
5
6
7
那么那么为什么会产生这样的一个原因呢?我们来看一下这台路由器的路由表,这是他的命令行,我们显示一下路由表 show ip route 我们可以看到这就是他路由表里面的内容,那么这个地方的 C 代代表这是一个直连的网络,那么具体的网络是 10.0.0.0,也就是路由器直连的网络。
下面 10.0.0.1 是指的路由器接口的 IP 地址,我们看到在路由器里面它的路由表只有一条它所直连的网络,那么它本身就是知道的,其他的网络他是不知道的,换句话说我们刚才让左边路由器去 ping 右边路由器,那么数据包的目的地址就发往路由器所在的网络,我们 ping 的是 20.0.1,所以数据包的目的网络的地址应该是 20.0.0.0,但是我们在左边路由器里面,它的路由表里面没有看到网络的存在,这就是我们 ping 不通的原因。
尽管我们已经让这三个路由器的 BGPB 协议都启动了,并且让这两个路由器建立了邻居关系,让这两个路由器也建立了邻居关系,但是我们并没有利用 BGP 做什么事情,比如说让路由器借助于 PCP,把它所直连的网段给它通报出去,同理右边这个路由器我们也没有让它把它的网段经过基于这个 BGP 把它通告出去,因此很自然的路由器是得不到这个网段的存在,路由器也不知道这个网站的存在,所以这两个路由器之间是无法进行通信的。
Router#show ip route
Codes: L - local, 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, E - EGP
i - IS-IS, 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
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.0.0/8 is directly connected, GigabitEthernet0/0
L 10.0.0.1/32 is directly connected, GigabitEthernet0/0
2
3
4
5
6
7
8
9
10
11
12
13
14
那么下面我们就来通告一下,那么我们点击左边这个路由器,然后那么我们现在就先进入到他的 BGP 的协议的配置模式里面去,我们应该先进入现在我们是在特权模式,所以我们先打一个 CONF T 就以终端模式进行配置,现在我们就已经进入了全局的配置模式,那么这个时候我们打 router BGP 然后我们刚才说的这个地方是自助系统编号是 100 ,我们就进入到了它的具体的 BGP 协议的配置里面,那么之前我们也是这么进来的,然后我们做了指定邻居的工作,下面的话我们就给他,因为我们之前已经建立了这种邻居关系,所以现在我们就可以直接通告,通告它所直连的网络。
那么我们要具体命令是 NETWORK 然后后面就跟网络的 IP 地址那就是 10.0.0.0,然后空格我们要子网掩码,那么这里面我们要输入一个 MASK 然后在后面空一格,后面就跟具体的掩码,这个地方我们用的是 A 类的网络,所以我们跟一个默认的 A 类的,子网掩码 255.0.0.0,然后我们回车,这样的话他就把他的所连的网段的信息借助于 BGP 给它通道出去了。
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#router bgp 100
Router(config-router)#
Router(config-router)#network 10.0.0.0 mask 255.0.0.0
2
3
4
5
那同理我们也要让这个路由器他也要基于这个 BGP 通告一下它所直连的网络。这里面命令行提示我们要回车,我们进入到一般模式,输入 en 到了这个特权模式,我们在输入 CONF T,进入了配置模式,然后我们现在要配置一下它的 BGP 的协议,ROUTE R BGP 它的自治系统编号是 300,然后下面我们就要把它所直连的 20.0.0.0 网络的通报出去,NETWORK 20.0.0.0,然后 MASK 然后空格,那子网掩码我们采用 A 类的,因为就是 20 是一个 A 类的网络,所以我们采用 A 类的默认子网掩码,255.0.0.0,回车,这样的话这两台路由器都把自己所直连的网络的通过 BGP 给他宣告出去了。
Router>en
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#router bgp 300
Router(config-router)#network 20.0.0.0 mask 255.0.0.0
2
3
4
5
那么下面我们再来看一下路由表,当然我们现在是在路由器的配置模式里面,我们 EXIT 退到配置模式下,那么我们再退到了特权的模式。那么我们来看一下现在这台路由器的路由表里面的具体的、内容 SHOW IP ROUTE
现在他的路由表里面多出来了一条记录,那么这儿写的是 B B 就代表的是 BGP,协议他获得的路由信息具体的是 10.0.0.0,也就是路由器所直连的网络,现在通过 BGP 协议使得右边路由器他已经知道了,下面的这一些还是路由器本身自己直连的网络。
Router#show ip route
Codes: L - local, 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, E - EGP
i - IS-IS, 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
B 10.0.0.0/8 [20/0] via 20.0.0.2, 00:00:00
20.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 20.0.0.0/8 is directly connected, GigabitEthernet0/0
L 20.0.0.1/32 is directly connected, GigabitEthernet0/0
2
3
4
5
6
7
8
9
10
11
12
13
14
15
那么我们再查看一下左边路由器,看一下它的路由表,那么现在是在路由器的配置模式下,那么一般我们都会退到特权模式去,查他路由表,但是如果你懒得退,也可以打一个 do show ip route 这样也是可以的。那么我们可以看到在这个地方也多了一条类型是 B 的,这样的一个由 BGP 协议发现这样的一条路由,具体来说这条路由的目的网络是 20.0.0.0,那么也就是右边路由器直连的网络,现在通过 BGP 刚才我们宣告了,那么这样的话左边这台路由器就已经知道这样一个网络存在了,并且知道说要到达这样一个网络下一跳,应该跳给 10.0.0.2,也就是说路由器知道了网络的存在,并且下一跳,要跳给 10.0.0.2,那么也就是路由器的接口。
Router#show ip route
Codes: L - local, 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, E - EGP
i - IS-IS, 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
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.0.0.0/8 is directly connected, GigabitEthernet0/0
L 10.0.0.1/32 is directly connected, GigabitEthernet0/0
B 20.0.0.0/8 [20/0] via 10.0.0.2, 00:00:00
2
3
4
5
6
7
8
9
10
11
12
13
14
15
那么下面的话我们就来测试一下,按道理说左边的路由器就可以 ping 通右边这个路由器了,我们来试验一下。那么一样的我们之前是退出到特权模式下去 ping 的,那么如果你懒得退,直接这地方输一个 ping 20.0.0.1,
我们可以看到很快的他 ping 了 5 次,每次都是一个感叹号表示成功,这里面也最后的提示百分百成功的,发了 5 个收到 5 个,那么 round 这个地方是往返时延的意思,那么这 5 次他给你统计了一下,数据包发出来到目的路由器再响应,反传回来的话,那么他做了一个统计,那么最小的往返时延,然后这是平均的往返实验,最大的往返实验,那么他都给你在这儿统计出来了。这就表示这两个路由器已经可以通信了:
Router#ping 20.0.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
2
3
4
5
6
7
本实验就要进行到这里了,需要请您注意的是 BGP 协议非常复杂,本实验只是验证了一下它的基本应用场景,如果您对该协议有兴趣,可自行到思科官网上去查看该协议的多种应用案例