这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。
路由
在使用设备进行网络通信的时候就一定会涉及到路由。路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程
让我们试着通过一个类比来理解路由。想象一个场景,你下班后正准备从公司开车回家,此时路上塞满了车辆,你将在手机地图上查找道路和交通状况。根据路况,你将选择最通畅的那条路回家。
动态路由
路由协议有静态和动态协议两种,动态路由跟静态路由是相对的。动态路由协议,就是路由器能够自己建立路由表,不需要管理员手动一条一条将路由加表,这样就节省了许多人力。同时当网络中出现故障时,路由器可以自行检测链路,并选择最优的路径进行数据转发。
所有的动态路由协议在TCP/IP协议栈中都属于应用层的协议。但是不同的路由协议使用的底层协议不同。
四种动态路由协议:内部网关协议(RIP、OSPF、IS-IS)、外部网关协议(BGP)
1、RIP协议-路由信息协议
属于最早的动态路由协议优点:节约成本,对资源消耗较低,配置简单,对硬件要求低,占用CPU、内存低,所以在小型网络中还有使用到。缺点:计算路由慢,链路变化了收敛慢,能够保存的路由表相对较小,最多只能支持15台设备的网络,只适用于小型网络
RIP是应用较早使用较为普遍的内部网关协议,是典型的距离矢量协议(距离矢量的意思,假设现在有R1->R2->2.2.2.0/24这条链路,对于R1来说,发送到目标,朝着R2方向两跳,矢量就是有方向的) 。RIP是基于UDP,端口520的应用层协议。
实现:RIP采用周期性广播的方式更新整张路由表,即相互交换路由表学习自己不知道的网段(新路由加入时,初始化的路由表上有该路由直通的其他路由信息)。RIP需要经过N轮学习完成路由器的所有网段位置的学习进而收敛,实现内部网关全网可达。
收敛的解释:当所有路由表都包含相同的网络信息且无新信息时收敛结束。路由器在完成收敛之前无法完成正常工作。
RIP缺陷拓展:RIP环路
RIP环路产生过程
1、首先假设10.4.0.0网段Down掉,那么C路由器会在路由表中去掉10.4.0.0网段的路由信息,此时没毛病;
2、当下一个更新周期来到时,B会向C更新自己的路由表,C一看B的路由表中有10.4.0.0网段的路由且metric = 1自己没有,所以会在自己的路由表中加入一跳路由:
目标网段:10.4.0.0。 矢量: S0 (从B学习到的所以方向从S0口出)。 距离: 2 (C路由表中为1所以此处应 + 1)
3、此时便形成路由环路,没有防环机制的话,10.4.0.0这条路由会被一直在网络中的路由器学习更新,每学一次metric值便增加1,如此往复直到达到无穷大,耗尽路由器资源网络瘫痪。
RIP防环机制:
(1)规定最大跳数为16,凡是达到16跳为不可达路由。
(2)水平分割:收到广播信息的端口不进行广播。不加限制的时候,RIP环产生的一个重要原因是路由器所有信息发往所有相邻路由器。经过水平分割之后,路由器必须有选择的发送路由信息,即当向某个相邻路由器发送更新消息时,绝不能包含从从该路由得到的信息。
(3)路由毒(Route Poisoning)化或毒性反转:如果10.4.0.0挂掉了,立刻将该目标的距离设为16不可达,并泛洪告诉其他路由,例如上图的A和B,随之B和A会在第一时间收到消息,将该4.0网段从自己的路由表中删除(此处的删除非真正的删除,只是隐藏起来在RIP的数据库中,并启动一个抑制计时器,在有效时间范围之内4.0若是恢复可重新回到路由表中)。
2、OSPF协议-开放最短路径优先协议
OSPF解决了RIP的缺点,OSPF 是基于链路状态( Link State )的自治系统内部路由协议,用来替代 RIP 协议
最短路径说明:
OSPF是一种链路状态路由协议。在链路状态路由协议中路由器对全网拓扑完全了解。是"传信的路由”,A将信息放在一封信里发给B,B对其不做任何改变,拷贝下来,并将自己的信息放在另一封信里,两封信一起给c,这样,信息没有任何改变和丢失,最后所有路由器都收到相同的一堆信,这一堆信就是LSDB。然后,每个路由器运用相同的SPF算法,以自己为根,计算出SPF Tree(即到达目的地的各个方案),选出最佳路径,放入路由表中。
OSPF工作流程:
OSPF接口发送Hello包,建立邻居关系,之后学习链路状态信息(互相发送LSA链路状态通告相互通告路由),形成链路状态数据库(LSDB) 。再通过Dijkstra算法(SPF算法) ,计算最短路径树(cost最小)后放入路由表。
3、ISIS协议-中间系统到中间系统协议
传输网/运营商网络主要使用的协议优点:算法与OSPF类似,收敛快,安全性高。缺点:异常处理资料不如OSPF丰富
4、BGP协议-边界网关协议(交换路由信息)
一个简单的应用,比如BGP可以用于网通和电信之间路由的相互传递,如果使用其它IGP(OSPF或者ISIS)的话,会由于路由数量太多,无法计算出来路由,或者路由计算非常慢。同时,网通和电信之间网络放在一起使用内部网关协议是不安全的,网通没有理由信任电信的网络。
BGP应用于不同的AS之间,AS是指在同一组织管理下,使用统一选路策略设备的集合。
BGP是一种外部网关协议,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由,实现路由信息交换,即知道地址属于哪个AS,进行相应的转发,具体的路由实现交付内部网关协议实现。BGP具有如下优点:
(1)BGP是基于TCP的路由协议(端口号179),只要能够建立TCP就能够建立BGP;
(2)BGP只传递路由信息,不计算路由,不会暴露AS内部的网络拓扑;
(3)BGP的路由更新是触发更新,不是周期性更新;
(4)BGP是一种距离矢量路由协议,在设计上就避免了环路的发生;
BGP工作流程:
建立连接的两台设备互为对等体;BGP为确保两端设备都存活,要求运行BGP的设备周期性发送keepalive报文;若一端设备在超过存活时间未发布keepalive消息,就会认为对方已经停止BGP运行,于是会拆除TCP连接,并会将从对端学到的路由全部删除。
IBGP邻居:在同一个AS内,建立邻居的两个BGP路由器
EBGP邻居:在不同AS之间,建立邻居的两个BGP路由器
因为IBGP路由器是同一AS,若相互宣告网络会引起路由环路,则BGP规定IBGP只会向EBGP宣告路由信息。
若IBGP建立邻居交换路由信息后,但AS内部没有去往IBGP的路由,则路由信息被丢弃,所以需要进行IGP(内部网关)与BGP(边界网关)的路由同步。
BGP路由协议的主要目的是在自治系统之间传递路由信息,而不是发现和计算路由信息,所以路由信息需要通过配置指令的方式注入到奥BGP中,则BGP注入路由有两种方式:Network(发送)和import(导入)。