纪念我的第五个CCNA实验 OSPF路由协议

#背景
  在实际的网络结构中用的最多的据说是OSPF。因为相比于RIP来说它对于cpu的要求不会那么大。因为它不会像RIP路由协议那样相邻的两张表之间整张路由表得传递。总的来说的话，OSPF路由协议分为一下几个步骤。

1.网络内的路由相互找街坊邻居,这里的邻居不是只我们通常所理解的直连的路由的网口，而指的是开启了OSPF路由协议的直连路由的网口。大家相互找到街坊邻居以后坐在一起开会。(DOWN->INIT->2WAY)
2.大家坐在一起开会，决定在街坊邻居中寻找居委会主任(DR)和副主任(BDR)。(点对点的连接的话这一步不需要)。
3.居委会主任(DR)站出来说要为了维护街道的稳定和繁荣决定对街道的每家每户进行人口普查，并且要求大家以后要把材料交给主任(DR),街道居民之间(DROTHERS)不不用传递自家的人口信息。并且宣称主任自己是这里的管家(master),并且请大家作为这里的住户(slave)通从安排。(EXSTART)。
4.街道的居民先把自己家里的成员的名单发给主任(DR),主任把这些名单整理然后印成一页花名册(当然也包括主任(DR)自己家里的成员名单)发给街道里的所有的住户。(EXCHANGE)
5.街道的主任和拿着制作的街道居民花名册，一个一个核对，看哪些人是他们不认识的，然后俺家按户的去查明。然后把查明的信息通过信件发给每家每户。同时，居民对花名册里的人员信息想要更具体的了解的时候也可以直接去找主任(DR)询问。(LOADING)
6.最后街道的居民和居民，居民和主任们之间都知根知底，其乐融融。(FULL)
这里的比喻非常非常的粗旷，因为我自己目前也有好多细节没搞清粗，仅供参考。

#先说说通过hello包找邻居的过程。
1.
![スクリーンショット 2018-02-12 21.15.28.png](https://qiita-image-store.s3.amazonaws.com/0/191439/9e4a7dc0-74f6-c7d3-4312-03fb3873191a.png)

图1

  图1所示，找邻居是指找统一广播域下的开启了OSPF路由协议的路由的接口，而不是找物理上的邻居。不是一路人就算住在一起那也没有必要来往了，不是吗。

2.
![スクリーンショット 2018-02-12 2.20.55.png](https://qiita-image-store.s3.amazonaws.com/0/191439/4898aa26-1223-9638-ecb9-1d2f42a55f9b.png)
图2

  图2所示，RT1开始找邻居，它不知道它他的直连的网口中哪些是开启了OSPF的，如是RT1大吼了一声"玩OSPF的回我一声!!!"。听到这声吼的OSPF和应该会会给它，但是其他协议的路由比如RT5(RIP)是不会理会的。这里RT1通过组波(224.0.0.5)的方式发送给其他直连网口，这里的224.0.0.5只有开启了OSPF的端口才会有反应。组播信息里包含的信息有RT1的RouterID，区域ID，hello包的间隔时间和拖沓时间。RT1发送hello包端口的IP和子网掩码等。
  RT2收到224.0.0.5的组播后，打开组播里的hello包，发现里面有RT1的信息，说明这是RT1发来的组播信息，说明我的邻居里面玩OSPF的有RT1。那么RT2会把RT1的信息写入自己的OSPF邻居表。并把RT1的状态表明为INIT

3.
![スクリーンショット 2018-02-12 2.31.13.png](https://qiita-image-store.s3.amazonaws.com/0/191439/d2105c41-051b-6d54-8536-f3d944de58d1.png)
图3

  图3所示，RT2在收到来自RT1的组播后，把RT1的信息写在邻居表里，然后再把邻居表写在hello包里，然后再把这个记录了记有RT1信息的RT2的邻居表的hello包以224.0.0.5的组播的形式发出去(为什么不发单播我也不知道)。RT1收到来自RT2的组播信息后，打开组播信息里的hello包。产看一下，发现里面有一张邻居表，而且邻居表里面有一条记录的RouterID是我RT1的RouterID。这说明了什么呢，这说明了RT1之前发的hello包被RT2收到了。那么既然如此了，RT2肯定也是我的邻居了，那么RT1便把RT2的状态标明为INIT。

4.
![スクリーンショット 2018-02-12 2.39.11.png](https://qiita-image-store.s3.amazonaws.com/0/191439/f486288e-848d-8ba3-beb2-0f1b169fe9e3.png)
图4

  图4所示，RT1会发一个单播给RT2一个我收到你的单播的确认的回复。然后两个就变成2WAY了。具体怎么就变的我也不太清楚。

  这里RT1,RT2的邻居表的关系就建立了。RT1,RT2的邻居表里分别记录了对方。


#再说一下DR，BDR的工作原理

1.
居民向主任和副主报告自家的人口信息。
![スクリーンショット 2018-02-12 3.03.47.png](https://qiita-image-store.s3.amazonaws.com/0/191439/3e6df3b8-c774-85d8-19b3-d29411ec78a1.png)
图5
  OSPF中，DROTHERS是不会向其他的DROTHERS提交自己的链表信息的，DROTHERS要做的是向DR和BDR提交自己的LSA。向DR和BDR提交LSA的专用组播是224.0.0.6。

2.街道主任向街道居民广播居民的人口信息。
![スクリーンショット 2018-02-12 3.05.20.png](https://qiita-image-store.s3.amazonaws.com/0/191439/2c8a8d8c-574f-ea3b-a045-ffcaf000c409.png)
图6
  OSPF中，所有的路由要做到LSDB的同步主要是通过DR发来的信息来同步的。DR把一旦收集来的LSDB通过组播224.0.0.5发给组网里的所有的OSPF。

#实验

###认识邻居

####步骤
1.配置好相应的IP和子网掩码
![スクリーンショット 2018-02-12 3.55.45.png](https://qiita-image-store.s3.amazonaws.com/0/191439/eac906cb-20d3-0557-3984-e4dbd58f9a00.png)
图7
具体ip和掩码如图所示
10.1.0.0/16的网段中，第三个8为分别为1，2，3，4，5

2.RT5,RT4,RT3,RT1,RT2的顺序分别启用ospf
######RT5

```
Router(config)#router ospf 100
Router(config-router)#network 10.1.0.0 0.0.255.255 area 0
Router(config-router)#exit
```

######RT4

```
Router(config)#router ospf 100
Router(config-router)#network 10.1.0.0 0.0.255.255 area 0
Router(config-router)#exit
Router(config)#exit
Router#
%SYS-5-CONFIG_I: Configured from console by console

Router#show ip ospf nei
Router#show ip ospf neighbor 

Router#
00:19:06: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.5.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

Router#show ip ospf neighbor 


Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.5.254        1   FULL/DR         00:00:31    10.1.5.254      FastEthernet0/0
Router#
```
  可以看到刚配置玩的时候因为DOWN->INIT->2WAY需要时间所以在LOADING信息显示以前，查看RT4的邻居表，是看不到内容的。

######RT3

```
Router(config)#router ospf 100
Router(config-router)#network 10.1.0.0 0.0.255.255 area 0
Router(config-router)#
00:22:10: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.5.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

00:22:10: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.4.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

Router(config-router)#exit
Router(config)#
Router(config)#exit
Router#
%SYS-5-CONFIG_I: Configured from console by console

Router#show ip ospf nei
Router#show ip ospf neighbor 


Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.5.254        1   FULL/DR         00:00:31    10.1.5.254      FastEthernet0/0
10.1.4.254        1   FULL/BDR        00:00:33    10.1.4.254      FastEthernet0/0
Router#
```


######RT1

```
Router(config)#router ospf 100
Router(config-router)#network 10.1.0.0 0.0.255.255 area 0
Router(config-router)#
00:24:25: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.5.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

00:24:25: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.4.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

Router(config-router)#exit
Router(config)#exit
Router#
%SYS-5-CONFIG_I: Configured from console by console

Router#show ip ospf nei
Router#show ip ospf neighbor 


Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.5.254        1   FULL/DR         00:00:36    10.1.5.254      FastEthernet0/0
10.1.4.254        1   FULL/BDR        00:00:37    10.1.4.254      FastEthernet0/0
10.1.3.254        1   2WAY/DROTHER    00:00:38    10.1.3.254      FastEthernet0/0
```

  这里可以看到，只有5.254和4.254有loading的信息过来是因为此时5.254和4.254是DR和BDR的原因。而3.254因为是DROTHERS所以到2WAY就结束了，不会有LOADING。


######RT2

```
Router(config)#router ospf 100
Router(config-router)#network 10.1.0.0 0.0.255.255 area 0
Router(config-router)#
00:28:22: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.4.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

00:28:22: %OSPF-5-ADJCHG: Process 100, Nbr 10.1.5.254 on FastEthernet0/0 from LOADING to FULL, Loading Done

Router(config-router)#exit
Router(config)#
Router(config)#exit
Router#
%SYS-5-CONFIG_I: Configured from console by console
	
Router#show ip ospf nei
Router#show ip ospf neighbor 


Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.1.254        1   2WAY/DROTHER    00:00:39    10.1.1.254      FastEthernet0/0
10.1.5.254        1   FULL/DR         00:00:31    10.1.5.254      FastEthernet0/0
10.1.4.254        1   FULL/BDR        00:00:32    10.1.4.254      FastEthernet0/0
10.1.3.254        1   2WAY/DROTHER    00:00:34    10.1.3.254      FastEthernet0/0
Router#
```

  回到R1查看R1的邻居表，
  1.254 存在
  2.254 存在
  3.254 存在
  4.254 存在
######RT1

```
Router#show ip ospf neighbor 


Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.5.254        1   FULL/DR         00:00:30    10.1.5.254      FastEthernet0/0
10.1.4.254        1   FULL/BDR        00:00:31    10.1.4.254      FastEthernet0/0
10.1.3.254        1   2WAY/DROTHER    00:00:33    10.1.3.254      FastEthernet0/0
10.1.2.254        1   2WAY/DROTHER    00:00:33    10.1.2.254      FastEthernet0/0
```

  现在在最终的RT1的邻居表上，我们可以看到所有的邻居都相互认识了，其中RT5(5.254)和RT4(4.254分别别选为了DR和BDR)
  现在邻居相互认识了，但还没有传知根知底的LSA,因为大家都是一穷二白啊，没有连设备啊


###传递人口信息



![スクリーンショット 2018-02-12 5.33.09.png](https://qiita-image-store.s3.amazonaws.com/0/191439/b166ade2-0675-f3e6-f254-ac043656a255.png)
图8

  将拓扑图扩展到如图8所示。增加RT6,RT7,RT8,RT9,并且都启动OSPF。查看RT1的路由表。

####步骤

######RT1

```

Router#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

     10.0.0.0/16 is subnetted, 1 subnets
C       10.1.0.0 is directly connected, FastEthernet0/0
     172.16.0.0/24 is subnetted, 3 subnets
O       172.16.10.0 [110/67] via 10.1.2.254, 00:16:37, FastEthernet0/0
O       172.16.20.0 [110/66] via 10.1.2.254, 00:31:43, FastEthernet0/0
O       172.16.30.0 [110/130] via 10.1.2.254, 00:28:36, FastEthernet0/0
O    192.168.20.0/24 [110/65] via 10.1.2.254, 00:59:25, FastEthernet0/0
O    192.168.30.0/24 [110/65] via 10.1.2.254, 01:00:46, FastEthernet0/0

```

  我们可以发现
  172.16.10.0/24
  172.16.20.0/24
  172.16.30.0/24
  192.168.20.0/24
  192.168.30.0/24
  这五个新添加的网段的路由都有了。