纪念我的第六个CCNA实验 EIGRP路由协议

#背景
  EIGRP是思科独自开发的基于方向(Distance)矢量(Vector)算法的路由协议。但是因为OSPF已经很稳定，所以用得并不是很多。但是放眼长远的话，由于其支持IPV6的高扩展性，其他的厂商也开始有慢慢支持EIGRP了。
  就我目前对于EIGRP的理解的话，我总结为如下。
#####1.EIGRP和RIP的区别。
######1-1.RIP没有邻居表，EIGRP会用hello包发送224.0.0.10的组播从而在组网内寻找邻居，对方收到自己的hello包后便把自己标为邻居，对方发送的hello包被自己收到后，自己会把对方标为邻居。双方收到hello包都不用给对方确认的回复。对方收到自己的hello包后会用单播或者组播的形式把对方的拓扑信息发给我，自己收到对方的拓扑信息后更新自己的拓扑表，从而让自己的拓扑表有更广的范围。
######1-2.RIP是给邻居发整张路由表，而EIGRP是给邻居发拓扑表。至于路由表和拓扑表的区别，我的理解在于。路由表里每一条去往目的地的路径都是经过筛选后的最有路径。而拓扑表的话会在原始的拓扑信息之上，针对每一条前往目的地的路径。通过DUAL的算法，筛选出最佳路径(经过SUCCESS的路径)和第二最佳路径(经过FEASIBLE SUCCESS的路径)。
#####2.EIGRP和OSPF的区别。
######1-1.EIGRO和OSPF一样都会相互发送通过hello包的方式建立相互之间邻居的关系。但是EIGRP的HELLO包的相互发送没有像OSPF那么复杂。OSPF对方先组播HELLO包，自己收到后再把对方标记为INIT，自己再把写好的邻居表组播出去，对方收到后再回给你单播，然后双发建立其2WAY的邻居关系，有点相亲的感觉。
EIGRP的hello包发送后，对方给一个ACK的回复，双方的邻居关系就那么建立了，有点一夜情的感觉。
######1-2.EIGRP是和邻居交换拓扑信息(应该可以说成交换拓扑表把，我不太清楚)，这个过程很直接，就是我告诉邻居我想要的答案，邻居告诉我想要的答案。这个过程在hellow包的传送过程中进行，也在拓扑表更新的时候进行(更新的具体流程我目前木太了解)。OSPF的话是在EXCHANGE的时候邻居之间交换DBD，然后在LOADING的时候通过LSR和LSU的方式更新彼此之间的LSA，从而达到同步整个区域的LSDB。

#简单地介绍工作原理
#####1.建立邻居，交换拓扑表
######1-1.HELLO包建立邻居.
  这里我们假设有两个路由器RT1，RT2。RT1的F0口和RT2的F0口都是通过直连相连的，并且它们都开启了EIGRP的路由协议。那么它们是可以做EIGRP的邻居的。那么它们是怎样通过hello包找到彼此的呢。
![スクリーンショット 2018-02-12 21.54.14.png](https://qiita-image-store.s3.amazonaws.com/0/191439/b7114347-f6b4-5f6a-3fb5-d98f5afb3cd2.png)
图1
  图1所示，RT1和RT2相互以组播的形式发送hello包。相互收到对方的hello包以后，把对方标为自己的邻居，自己收到对方的hello包以后也不用发送确认的回复。


######1-2.RT2发拓扑信息给RT1
![スクリーンショット 2018-02-12 22.06.39.png](https://qiita-image-store.s3.amazonaws.com/0/191439/b7f91395-c989-7312-de70-77eb0287c571.png)
图2
  RT2在收到RT1的hello包以后会议单播或者组播的形式发送给RT1一个update包。这个update包里面包含了RT2的拓扑信息。RT1在收到这个update包以后，打开，把来自RT2的拓扑信息更新到自己的拓扑原始信息表里面(应该会有一个原始的拓扑信息表吧，经过计算后产生拓扑表)
  之后RT1会以一个单播的形式发送给RT2一个ACK确认信息。


######1-3.RT1发拓扑信息给RT2
  和上一步方向相反而已
![スクリーンショット 2018-02-12 22.19.32.png](https://qiita-image-store.s3.amazonaws.com/0/191439/e38b871c-8e6e-5e0a-a084-7fc3af1dc40d.png)
图3

  简单地来说我们通过上面的过程，建立了邻居关系，并且得到了所有的邻居发来的各自的拓扑信息，从而也得到了整个网络的拓扑信息。

#####2.DUAL
  这个又是什么呢？现在我周围的邻居给我发来了它们的拓扑信息，这些拓扑信息里有一些之前没有见过的新地图。那么既然地图来了，我就要规划路线了是吧，对于这一个一个新世界规划最短最优的路线，并且如果有备用路线的话规划备用路线。并且把最终的最优路线和备用最优路线写入终极拓扑表(之所以去这么一个名字是因为我不确定拓扑表里到底是装有所有的路径信息还是只有success和feasible success)。
![スクリーンショット 2018-02-12 22.49.11.png](https://qiita-image-store.s3.amazonaws.com/0/191439/af062e8f-928a-315f-cc27-abee1c7269f6.png)
图4
  如图4所示，简单地说一下。RT1对对自己地拓扑信息进行分析，寻求通往RT2(拓扑信息中地摸一个新世界)地最佳途径，和最佳备份途径。
  这里有两个概念。
  FD:RT1到目的地RT2地总成本。
  AD:RT1地能到RT2地所有路径中，RT1地下一个路由距离最终目的地地成本。
  FD最小，也就是从起始地RT1到目的地RT2成本最小地路径将被选为最优路径，同一个最小FD有多个地情况下，会选择多个最优路径。如中RT1-RT12-RT2地总成本60，为所有路径中成本最少地路径，因此被选为最优路径。最优路径中地RT12被选为success。
  接下来剩下地没有被选为最优路径地路径里面，我们找一个备用地最优路径。这个备有路径地目的是，一旦最优路径崩掉，我们地RT1路由器在去RT2地时候会选择目前地备用路径，这样就能快速切换,专业术语叫快速收敛。
  那么备用最优路径地标准是什么呢。我们最优路径地总成本已经确认了，是60，所以剩下地路径中，AD<60地将被选为备用最优路径。这里RT1-RT10-RT2,RT1-RT11-RT2将被选为备用最优路径。
  备用最优路径中地RT10,RT11被选为feasible success。
  题外话，如果最优路径崩掉了，并且之前没有备用最优路径被选出来地情况下，RT1给自己地邻居发送request packet请求。(具体流程我目前也不太清楚，CCNA可能不会估计那么细地知识点吧)。


#实验
###步骤
######1.配置好各个网段
![スクリーンショット 2018-02-12 23.18.58.png](https://qiita-image-store.s3.amazonaws.com/0/191439/f3251841-f5de-4f0c-873e-2c6b60d6a5ac.png)
图5

######2.各个路由器启动EIGRP
1.RT1

```
Router(config-if)#router eigrp 100
Router(config-router)#network 192.168.10.0 0.0.0.255
Router(config-router)#network 172.16.10.0  0.0.0.255
Router(config-router)#network 172.16.20.0  0.0.0.255
Router(config-router)#network 172.16.30.0  0.0.0.255
```

2.RT2

```
Router(config-if)#router eigrp 100	
Router(config-router)#network 172.16.10.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 172.16.10.1 (FastEthernet0/0) is up: new adjacency
```

3.RT3

```
Router(config-if)#router eigrp 100
Router(config-router)#network 172.16.20.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 172.16.20.1 (Serial2/0) is up: new adjacency

Router(config-router)#network 10.1.2.0 0.0.0.255
```

4.RT4

```
Router(config-if)#router eigrp 100
Router(config-router)#network 172.16.30.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 172.16.30.1 (Serial3/0) is up: new adjacency

Router(config-router)#network 10.1.3.0 0.0.0.255
```

5.RT5

```
Router(config)#router eigrp 100
Router(config-router)#network 10.1.1.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.1.2 (FastEthernet1/0) is up: new adjacency

Router(config-router)#network 10.1.2.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.3 (Serial3/0) is up: new adjacency

Router(config-router)#network 10.1.3.0 0.0.0.255
Router(config-router)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.3.4 (Serial2/0) is up: new adjacency

Router(config-router)#network 192.168.20.0 0.0.0.255
```


######3. 查看路由的邻居表

1.RT1

```
Router(config-router)#do show ip eigrp neighbor
IP-EIGRP neighbors for process 100
H   Address         Interface      Hold Uptime    SRTT   RTO   Q   Seq
                                   (sec)          (ms)        Cnt  Num
0   172.16.10.2     Fa0/0          14   00:05:32  40     1000  0   17
1   172.16.20.3     Se2/0          10   00:03:57  40     1000  0   21
2   172.16.30.4     Se3/0          14   00:02:49  40     1000  0   21
```

2.RT3

```
Router(config-router)#do show ip eigrp neighbor
IP-EIGRP neighbors for process 100
H   Address         Interface      Hold Uptime    SRTT   RTO   Q   Seq
                                   (sec)          (ms)        Cnt  Num
0   172.16.20.1     Se2/0          13   00:07:21  40     1000  0   6
1   10.1.2.5        Se3/0          12   00:05:04  40     1000  0   12
```

3.RT2

```
Router(config-router)#do show  ip eigrp neighbor
IP-EIGRP neighbors for process 100
H   Address         Interface      Hold Uptime    SRTT   RTO   Q   Seq
                                   (sec)          (ms)        Cnt  Num
0   172.16.10.1     Fa0/0          13   00:09:53  40     1000  0   7
1   10.1.1.5        Fa1/0          14   00:06:13  40     1000  0   12

Router(config-router)#
```


######3. 查看路由的拓扑表

RT1

```
Router(config-router)#do show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.10.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - Reply status

P 10.0.0.0/8, 1 successors, FD is 30720
         via 172.16.10.2 (30720/28160), FastEthernet0/0
P 172.16.0.0/16, 1 successors, FD is 28160
         via Summary (28160/0), Null0
P 172.16.10.0/24, 1 successors, FD is 28160
         via Connected, FastEthernet0/0
P 172.16.20.0/24, 1 successors, FD is 20512000
         via Connected, Serial2/0
P 172.16.30.0/24, 1 successors, FD is 20512000
         via Connected, Serial3/0
P 192.168.10.0/24, 1 successors, FD is 28160
         via Connected, FastEthernet1/0
P 192.168.20.0/24, 1 successors, FD is 33280
         via 172.16.10.2 (33280/30720), FastEthernet0/0
Router(config-router)#
Router(config-router)#
Router(config-router)#do traceroute 10.1.2.3
Type escape sequence to abort.
Tracing the route to 10.1.2.3

  1   172.16.10.2     20 msec   0 msec    0 msec    
  2   10.1.1.5        0 msec    0 msec    0 msec    
  3   10.1.2.3        0 msec    1 msec    0 msec    
Router(config-router)#do traceroute 10.1.3.4
Type escape sequence to abort.
Tracing the route to 10.1.3.4

  1   172.16.10.2     0 msec    0 msec    0 msec    
  2   10.1.1.5        0 msec    0 msec    0 msec    
  3   10.1.3.4        1 msec    1 msec    0 msec    
Router(config-router)#
```

我们可以看到RT1在去寻找RT3和RT4的右边的端口的时候，竟然不惜绕远路分别绕道RT2，途经RT5去寻找。大老远的绕道也可以从RT1的拓扑表中看出

```
P 10.0.0.0/8, 1 successors, FD is 30720
         via 172.16.10.2 (30720/28160), FastEthernet0/0
```

连被用最佳路径都不给RT3，RT4，那是因为什么呢？因为RT1和RT3，RT4的连线是串口线，带宽远远小于RT1和RT2之间连接的快速线。
RT1

```
Router(config)#do show interface f0/0
FastEthernet0/0 is up, line protocol is up (connected)
  Hardware is Lance, address is 0002.1738.cb9b (bia 0002.1738.cb9b)
  Internet address is 172.16.10.1/24
  MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255
```

```
Router(config)#do show interface s2/0
Serial2/0 is up, line protocol is up (connected)
  Hardware is HD64570
  Internet address is 172.16.20.1/24
  MTU 1500 bytes, BW 128 Kbit, DLY 20000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
```

  可以看到FastEthernet的带宽是100000kbit,延迟是100usec ， Serial的带宽是128kbit,延迟是20000usec。
  那么为了让去RT3的右边的端口直接找RT3而不是从RT2绕远路的话.RT1-RT3的路径当中的的DA的值要小于RT1-RT2的FA(30720),那么我们可以这样。把RT1-RT3中的RT3的s3/0的带宽和延迟改为普通FastEhternet的带宽和延迟。那么RT1-RT3的DA(根据RT3的s3/0的带宽和延迟来计算的值)肯定要小于RT1-RT2的的FA(30720).
  因为RT3的s3/0的带宽是100000kbit 延迟是100 usec的话。
  DA = (10^7/10000 + 100/10)*256 = 28160 
  28160 < 30720
  RT1-RT3成为备选最佳路径。

RT3

```
Router(config)#int s3/0
Router(config-if)#band
Router(config-if)#bandwidth 100000
Router(config-if)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.5 (Serial3/0) is down: interface down

Router(config-if)#delay
Router(config-if)#delay 
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.5 (Serial3/0) is up: new adjacenc
% Incomplete command.
Router(config-if)#delay 10
Router(config-if)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.5 (Serial3/0) is down: interface down

Router(config-if)#
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.5 (Serial3/0) is up: new adjacency

Router(config-if)#do show interface s3/0
Serial3/0 is up, line protocol is up (connected)
  Hardware is HD64570
  Internet address is 10.1.2.3/24
  MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255
```

RT3 确认已更改s3/0的带宽和延迟

```
Router(config-if)#do show interface s3/0
%DUAL-5-NBRCHANGE: IP-EIGRP 100: Neighbor 10.1.2.5 (Serial3/0) is up: new adjacency

Serial3/0 is up, line protocol is up (connected)
  Hardware is HD64570
  Internet address is 10.1.2.3/24
  MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255
```

RT1
  去10.0.0.0的网段的备用最佳路径已被强行添加进来。

```
Router(config-if)#do show ip eigrp topology
IP-EIGRP Topology Table for AS 100/ID(192.168.10.1)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - Reply status

P 10.0.0.0/8, 1 successors, FD is 30720
         via 172.16.10.2 (30720/28160), FastEthernet0/0
         via 172.16.20.3 (20514560/28160), Serial2/0
P 172.16.0.0/16, 1 successors, FD is 28160
         via Summary (28160/0), Null0
P 172.16.10.0/24, 1 successors, FD is 28160
         via Connected, FastEthernet0/0
P 172.16.20.0/24, 1 successors, FD is 20512000
         via Connected, Serial2/0
P 172.16.30.0/24, 1 successors, FD is 20512000
         via Connected, Serial3/0
P 192.168.10.0/24, 1 successors, FD is 28160
         via Connected, FastEthernet1/0
P 192.168.20.0/24, 1 successors, FD is 33280
         via 172.16.10.2 (33280/30720), FastEthernet0/0
         via 172.16.20.3 (20517120/30720), Serial2/0
Router(config-if)#do traceroute 10.1.2.3
Type escape sequence to abort.
Tracing the route to 10.1.2.3

  1   172.16.10.2     0 msec    0 msec    0 msec    
  2   10.1.1.5        0 msec    0 msec    0 msec    
  3   10.1.2.3        1 msec    0 msec    0 msec    
Router(config-if)#
```

  虽然我们通过改变想要改变的路径的带宽和延迟从而改变DA的方式，让我们想要改变的路径被强制加入拓扑表里。但是由于实际的开销值差别太明显(30720和20514560的差别)以至于我们查看路由表的时候，还是只有原来的一条路能够通往10.0.0.0。

```
Router(config-if)#do show ip route
Codes: C - connected, S - static, I - IGRP, 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

D    10.0.0.0/8 [90/30720] via 172.16.10.2, 00:34:23, FastEthernet0/0
     172.16.0.0/16 is variably subnetted, 4 subnets, 2 masks
D       172.16.0.0/16 is a summary, 01:11:51, Null0
C       172.16.10.0/24 is directly connected, FastEthernet0/0
C       172.16.20.0/24 is directly connected, Serial2/0
C       172.16.30.0/24 is directly connected, Serial3/0
C    192.168.10.0/24 is directly connected, FastEthernet1/0
D    192.168.20.0/24 [90/33280] via 172.16.10.2, 00:34:23, FastEthernet0/0

```


  这里我们variance这个命令，来申明成本的宽容倍数。这个倍数如果大于(20514560/30720)的话，我觉得我们关注的RT1-RT3就会被写入通往10.0.0.0/8的路由表里。
  但是20514560/30720 = 668 已经大于128了。所以我们还需要对RT3的s2/0的带宽和延迟进行修改。让20514560降下来。这里我就不多描述了。
  总之，我们可以通过改变路由的带宽和延迟来改变DA的值，从而让某一条路径成为通往某个新世界的fiseable success被写进拓扑表里。
  总之做到负载均衡的话，从RT1到RT3的右端接口会有两种路径可走。traceroute去追寻的时候可以发现两种途径。

```
Router(config-if)#do traceroute 10.1.2.3
Type escape sequence to abort.
Tracing the route to 10.1.2.3

  1   172.16.20.3     1 msec    0 msec    0 msec    
Router(config-if)#do traceroute 10.1.2.3
Type escape sequence to abort.
Tracing the route to 10.1.2.3

  1   172.16.10.2     0 msec    1 msec    0 msec    
Router(config-if)#do traceroute 10.1.2.3
Type escape sequence to abort.
Tracing the route to 10.1.2.3

  1   172.16.20.3     4 msec    1 msec    0 msec  
```

  至此路由的三个基本实验RIP，OSPF，EIGRP就告一段落了。  
  接下来我会把VLAN好好巩固一下。
  祝大家生活愉快。