网络层(2) 路由算法与路由协议
一、路由算法
什么是路由
当路由器(或其他三层设备)收到一个IP数据包时,会查看数据包的IP头部中的目的IP地址,并在路由表中进行查找,在匹配到最优的路由后,将数据包转到路由器的指定出口或下一跳地址。
路由器本身有一张路由表RIB(转发表),只有通过这张表才能知道数据报下一步会走向哪里。当一台路由器上链接有多条链路时,我们只有通过路由算法生成得到的路由表才能知道那条路是最佳路径。
什么是最佳路径
最佳路径也叫最佳路由,它是相对于某一特定要求下得出的较为合理的选择。最佳路径是经过某路由协议的算法计算而产生的。
路由器的运行状态
(1)在初始情况下,路由器所知的网络,只有其直接接口所在的网络。
(2)直连网络在路由表中的标记为Direct。
(3)直连网络出现在路由表中的前提是该网络的物理接口和协议状态都为UP。
注:接口UP,协议DOWN的原因:
(1)IP地址冲突,子网掩码设备错误。
(2)没有设置DCE时钟。
(3)没有设置对FR/PPP的封装。
(4)Hello和Dead的更新时钟,两端路由器不同。
查看路由表
直连路由:路由器本地接口所在网络。
静态路由:手工配置的路由。
运态路由:路由器之间通过动态路由协议学习到的路由。
路由算法的分类
路由算法可以分为静态路由算法和动态路由算法。
静态路由算法(非自适应路由算法):是管理员手工配置的路由信息。
它的优点:简便、可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,广泛用于高度安全性的军事网络和小的商业网络。
它的缺点:路由更新慢,不适用大型网络。
动态路由算法(自适应路由算法):路由器彼此交换信息,按照路由算法优化出路由表项。
它的优点:路由更新快,适用于大型网络,及时响应链路费用或网络拓扑变化。
它的优点:算法复杂,增加网络负担。
动态路由协议分类 距离失量协议、链路状态协议。
路离失量协议:RIP、BGP(路径失量路由协议)。
链路状态协议:OSPF、ISIS。
分层次的路由选择协议
(1)因特网网络规模大
(2)许多单位不想让外界知道自己的路由选择协议,这样就衍生出自治系统AS。
自治系统AS:在单一的技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在AS之间的路由。一个AS内的所有网络都属于一个行政单位来管辖,一个自治系统的所有路由器在本自治系统内都必须连通。
路由协议又可以分为内部网关路由协议IGP、外部网关路由协议EGP。
内部网关路由协议IGP,就是指一个AS内部使用的协议。如RIP、OSPF、ISIS。
外部网关路由协议EGP,就是指AS之间使用的协议。如BGP。
二、RIP协议
RIP是一种分布式的基于距离矢量的路由选择协议,是因特网的协议标准,最大的优点是简单。
RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录。
RIP路由协议的特点:
距离:通常为“跳数”,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1。路由器到直连网络的距离为1,RIP允许一条路由最多只包含15个路由器,因此距离为16表示网络不可达。
时钟:30S周期性更新路由表、180S无更新表示不存在、240S删除路由表。
支持等介负载均衡和链路冗余,使用UDP的520端口。
以下是RIP路由协议的图例:
RIP协议的算法执行过程
(1)仅和相邻路由器交换路由信息。
(2)路由器交换的信息是自己的路由表。
(3)每30秒交换一次路由信息,路由器根据路由信息更新路由表。若超过180秒没收到邻居路由器的通告,则判定邻居失效了,并自动更新路由表。
路由器开始工作时,只知道自己的直连网络的距离(距离为1),接着每一个路由器只和自己的相邻路由器交换和更新路由信息。
经过多次更新,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
距离向量算法
(1)修改相邻路由器发来的RIP报文中所有表项。
对地址为X的相邻路由器发来的RIP报文,修改此报文中的所有项目,把“下一跳”字段中的地址改为X,并把所有的“距离”字段+1。
(2)对修改后的RIP报文中的每一个项目,进行以下操作:
1)R1路由表中若没有Net3,则把该项目填入R1路由表。
2)R1路由表中若有Net3,则查看下一跳路由器地址:
若下一跳是X,则用收到的项目替换源路由表中的项目;
若下一跳不是X,原来距离比从X走的距离远则更新,否则不作处理。
(3)若180秒还没有收到相邻路由器X的更新路由表项,则把X记为不可达的路由器,即把距离设置为16。
(4)续继以上的操作,直到路由更新完毕。
RIP协议的报文格式
注:RIP是应用层协议,使用UDP传送数据。
RIPv1与RIPv2比较:
RIP防环机制
(1)最大跳数:当一条路由条目发送出去跳数会自动加1跳,跳数最大值为15,16意味着不可达。
(2)水平分割:一条路由不会发送给路由的发送方(类拟于单向传输)。
(3)反向毒化的水平分割:从邻居学习到的路由信息设为16跳,再发送给那个邻居。
(4)抑制定时器和触发更新也可以防止环路。
三、OSPF协议
开放最短路径优化OSPF协议,“开放”指明OSPF协议不是受某一厂商控制,而且公开发表的,“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
OSPF最高要的特征是使用分布式的链路状态协议。
OSPF的特点:
(1)使用洪泛算法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其它所有的相邻路同上器。(广播),最终整个区域内所有路由器都得到了路由信息的副本。
(2)发送的路由信息就是与本路由相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价、距离、时延、带宽等)。
(3)只有当链路状态发生变化时,路由器才向所有路由器洪泛发送路由信息。
最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。
链路状态路由算法
(1)每个路由器每隔10秒会发送Hello包,发现它的邻居结点,了解邻居节点的网络地址。
(2)设置到它的每个邻居的成本度量metric。
(3)构造DD数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
(4)如查DD分组中的摘要信息自己都有,则邻站不做处理,如果没有则发送LSR链路状态请求分组,请求自己没有的路由信息。
(5)收到邻站的LSR请求,发送LSU链路状态更新信息给邻居。
(6)更新完毕后,邻居返回一个LSAck链路状态确认信息。
注:只要有路由器的链路状态发生变化,则泛洪发送LSU链路状态更新信息给邻居,更新完毕后,邻居返回一个LSAck链路状态确认信息,也就是执行的(5)(6)。
(7)使用Dijkstra根据自己的链路状态数据库构造到其他节点间的最短路径。
RouterID
(1)Router Identifier,路由器标示符,用于在一个OSPF域中唯一地标识一台路由器,每台运行OSPF路由协议的路由器都具备Router ID。
(2)相同的OSPF区域内,禁止出现两台路由器拥有相的Router ID。
(3)OSPF Router ID可以通过手工配置的方式,或使用自动选取的方式设置。自动选取的机制是:若路由器存在Loopback接口,则选最大的loopback接口IP地址,若无则选活跃的物理接口中IP地址最大的作为Router ID。
OSPF Cost
(1)OSPF使用Cost“开销”作为路由度量值。
(2)OSPF接口Cost = 100M/接口带宽,其中100M为OSPF参考带宽 (reference-bandwidth),可以修改。
(3)每一个激活OSPF的接口都有一个Cost值。
(4)每条OSPF路由的Cost值由该路由从起源路由器到达本地路由器的所有入接口Cost值的总和。
OSPF的区域
为了使OSPF能用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域,每一个区域都有一个32位的区域标识符(用点分十进制表示)。
区域也不能太大,在一个区域内的路由器最好不超过200台。
OSPF的区域,所有非骨干区域必须与骨干区域直连。
OSPF路由器的角色
区域内部路由器 Internal Router
区域边界路由器 Area Border Router
骨干路由器 BackBone Router
AS边界路由器ASBR AS Boundary Router
OSPF帧格式
注:OSPF协议是直接使用IP数据报进行传送的。
OFPF的总结
(1)OSPF(Open Shortest Path First,开放式最短路径优先协议)内部网关协议,链路状态路由协议,通过连通性、距离、带宽等状态计算最佳路径,采用Dijkstra算法(也要SPF算法)。
(2)触发式更新、分层路由,支持大型网络。
(3)Area 0.0.0.0 或 Area 0 来表示,不是区或1。
(4)点对点网络上每10秒发送一次Hello包,在NBMA网络每30秒发送一次,Deadtime为Hello时间4倍。
(5)OSPF系统内几个特殊组播地址:
224.0.0.1 在本地子网的所有主机。
224.0.0.2 在本地子网的所有路由器。
224.0.0.5 运行OSPF协议的路由器。
224.0.0.6 OSPF指定/备用指定路由器DR/BDR。
注:224.0.0.5 指所有路由器,用于发现建立邻居、还用于选出区域内的指定路由器DR和备份指定路由器BDR(DR/BDR组播地址是224.0.0.6)
四、BGP协议
BGP(Border Gateway Protocol,边界网关协议),外部网关协议,用于不同自治系统AS之间,寻找最佳路由。
通过TCP 179端口建立连接,支持VLSM和CIDR,是一种路径矢量协议,目前最新版本的BGP4,而BGP4+支持IPv6。
BGP协议主要与其他AS的邻站BGP发言人交换信息,主要交换网络的可达路由信息,即要到达某个网络要经过的一系列AS,只有当路由信息发生变化时才更新路由信息。
BGP协议交换信息的过程:
(1)BGP交换网络的可达路由信息就是要到达某个网络所要经过的一系列AS,当BGP发言人互相交换了网络可达信息后,各BGP发言人就根据采用的策略从收到的路由信息中找出到达各AS的较好路由。
(2)BGP协议交换的路径向量。
BGP协议报文格式
一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,即通过TCP传送,然后在此连接上交换BGP报文以建立BGP会话Session,利用BGP会话交换路由信息。
注:BGP是应用层协议,需要借助TCP发送。
BGP协议的特点
(1)BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一路由器,以及到达该目的网络所要经过的各个自治系统序列。
(2)在BGP刚运行时,BGP邻站是交换整个BGP路由表,但以后只需要在发生变化时更新有变化的部分,这样对节省网络带宽和减少路由器的处理开销非常有利。
BGP-4的四种报文
(1)OPEN报文,用来与相邻的另一个BGP发言人建立关系,并认证发送方。
(2)UPDATE报文,更新新路径或撤销原路径。
(3)KEEPALIVE报文,在无UPDATE时,周期性证实邻站的连通性,也作为OPEN报文的应答。
(4)NOTIFICATION报文,报告先前报文的差错,也被用于关闭连接。
五、三种路由协议的比较
RIP协议是一种分布式的基于距离向量的内部网关路由选择协议,通过广播UDP报文来交换路由信息。
OSPF是一个内部网关协议,要交换的信息量较大,应使报文的长度尽量短,所有不使用传输层协议,而是直接采用IP。
BGP是一个外部网关协议,在不同的自治系统之间交换路由信息,由于网络环境复杂,需要保证可靠传输,所以采用TCP。
六、路由优先级
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2015-06-29 asp.net乱码问题