掌握互联网路由选择协议:从基础入门到实战
文章目录
- 路由选择协议的基本概念
- 路由选择算法的分类
- 分层次的路由选择协议
- 路由信息协议(RIP)
- 内部网关协议:OSPF
- 外部网关协议:BGP
- 互联网中的实际应用
- 总结
 
 
互联网的路由选择协议是网络通信的核心,它决定了数据包如何在网络中传递和到达目的地。本文将介绍几种常用的路由选择协议及其路由选择算法,帮助基础小白快速入门这一重要领域。
路由选择协议的基本概念
1. 理想的路由选择算法
一个理想的路由选择算法应具备以下特点:
- 正确性和完整性:算法必须确保沿着各路由表所指引的路由,数据包能够最终到达目的网络和目的主机。
- 计算简单:路由选择的计算不应增加过多的额外通信量。
- 自适应性:算法能适应通信量和网络拓扑的变化,及时调整路由以均衡各链路的负载。
- 稳定性:在网络通信量和拓扑相对稳定的情况下,路由选择算法应收敛于一个可接受的解。
- 公平性:路由选择算法应对所有用户(除优先级高的用户)公平。
- 最佳性:路由选择算法应找出最优路由,使分组平均时延最小、网络吞吐量最大。
例如,假设有一个网络由五个路由器组成,每个路由器之间的距离如下图所示:
 
在这个网络中,路由选择算法的任务就是计算从某个结点(比如A)到其他所有结点(B、C、D、E)的最短路径。
路由选择算法的分类
1. 静态路由选择
静态路由选择,也叫非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。适用于简单的小网络,通过人工配置每条路由实现。
2. 动态路由选择
动态路由选择,也叫自适应路由选择,其特点是能够适应网络状态的变化,但实现较为复杂,开销也较大。适用于复杂的大网络。例如,动态路由选择算法可以根据网络中实时的通信量和拓扑结构的变化,自动调整路由表,以确保数据包能够通过最优路径到达目的地。
分层次的路由选择协议
 
互联网采用分层次的路由选择协议,主要分为两个类别:
1. 内部网关协议(Interior Gateway Protocol, IGP)
在一个自治系统内部使用的路由选择协议,如RIP和OSPF。
2. 外部网关协议(External Gateway Protocol, EGP)
在不同自治系统之间使用的路由选择协议,如BGP-4。
路由信息协议(RIP)
1. 距离向量路由选择算法
RIP是一种分布式的基于距离向量的路由选择协议。其要点如下:
- 每个结点维护一个距离向量,记录本结点到所有目的结点的最短距离。
- 当与相邻结点的距离发生变化,或收到相邻结点发送的距离向量时,更新自己的距离向量。
- 当距离向量发生变化时,向相邻结点广播自己的距离向量。
例如,假设有三个路由器R1、R2和R3,初始状态下每个路由器只知道与相邻路由器之间的距离。经过若干次更新后,所有路由器最终都会知道到达任何一个路由器的最短距离。
2. RIP的工作过程
- 周期性更新:路由器每隔约30秒向所有相邻路由器发送路由更新报文,并接收相邻路由器发送的路由更新报文。
- 报文处理:对收到的路由更新报文进行处理,修改项目中的“下一跳”字段和“距离”字段,然后更新路由表。
- 故障处理:若一段时间内没有收到某条路由项目的更新报文,则将该路由项目记为无效。
3. 坏消息传播得慢
RIP的一个缺点是坏消息传播得慢。当网络出现故障时,需要较长时间才能将此信息传递到所有路由器。这是RIP的主要缺点之一。
例如,假设有两个路由器R1和R2,R1连接网络1和网络2,R2连接网络2和网络3。如果R1到网络1的链路出现故障,R1需要将此信息传播给R2。然而,由于RIP的坏消息传播得慢,R2可能会在很长一段时间内误以为可以通过R1到达网络1。
 
内部网关协议:OSPF
1. 链路状态路由选择算法
OSPF(Open Shortest Path First)是一种基于链路状态的路由选择协议。其要点如下:
- 链路状态广播:每个路由器都向所有其他路由器通告其链路状态。
- 链路状态数据库:每个路由器都维护一个链路状态数据库,记录网络中所有链路的状态。
- Dijkstra算法:每个路由器使用Dijkstra算法计算到所有其他路由器的最短路径。
2. OSPF的工作过程
- 链路状态更新:路由器向所有其他路由器发送链路状态更新报文,包含其所有链路的状态信息。
- 链路状态数据库更新:路由器接收到链路状态更新报文后,更新其链路状态数据库。
- 最短路径计算:路由器使用Dijkstra算法计算到所有其他路由器的最短路径,并更新路由表。
例如,假设有四个路由器R1、R2、R3和R4,每个路由器都有若干链路相连。每个路由器会向其他路由器通告其链路状态,所有路由器维护一个相同的链路状态数据库。然后,每个路由器使用Dijkstra算法计算到所有其他路由器的最短路径。
 
3. OSPF的优缺点
- 优点:由于OSPF采用链路状态算法,它能迅速适应网络拓扑的变化,收敛速度快。此外,OSPF支持可变长子网掩码(VLSM)和区域划分,适合大规模复杂网络。
- 缺点:实现复杂,配置和维护需要较多的专业知识和经验。
4. OSPF的区域划分
OSPF引入了区域(Area)的概念,将一个自治系统(AS)划分为多个区域。区域之间通过骨干区域(Area 0)互连。这样做的好处是减少了路由表的大小和链路状态更新报文的传播范围,减少了网络的开销。
外部网关协议:BGP
1. 路径向量路由选择算法
BGP(Border Gateway Protocol)是一种基于路径向量的路由选择协议。其要点如下:
- 自治系统之间的路由选择:BGP主要用于不同自治系统之间的路由选择。
- 路径向量:每个BGP路由器维护一个路径向量,记录到达每个目的网络的路径。
- 路径属性:BGP路由器根据路径属性选择最优路径,如路径长度、下一跳、自治系统路径等。
2. BGP的工作过程
- 路径通告:BGP路由器向相邻BGP路由器通告其路径向量。
- 路径选择:BGP路由器根据路径属性选择最优路径,更新其路径向量。
- 路径更新:BGP路由器向相邻BGP路由器通告其新的路径向量。
例如,假设有两个自治系统AS1和AS2,AS1中的BGP路由器需要选择一条路径到达AS2中的某个网络。AS1中的BGP路由器会根据路径属性,如路径长度、下一跳、自治系统路径等,选择最优路径,并将其通告给相邻的BGP路由器。
 
3. BGP的优缺点
- 优点:BGP能够处理非常大的网络,适用于互联网这样的大规模分布式网络。它提供了灵活的路径选择机制,能够根据多种属性选择最优路径。
- 缺点:BGP的配置和维护较为复杂,需要专业的网络知识和经验。由于其收敛速度较慢,在网络拓扑发生变化时,可能导致较长时间的路由不稳定。
4. BGP的路径属性
BGP使用多个路径属性来选择最优路径,包括:
- AS-PATH:记录路径经过的自治系统序列,用于防止环路。
- NEXT-HOP:下一跳路由器的IP地址。
- LOCAL-PREF:本地优先级,用于选择出口路由。
- MED(多出口鉴别) :用于在不同自治系统之间进行路由选择。
5. BGP的应用场景
BGP主要用于互联网服务提供商(ISP)之间的路由选择,以及大型企业网络与ISP之间的路由选择。它能够处理复杂的路由策略和路径选择,是互联网的核心路由协议。
互联网中的实际应用
在实际的互联网中,路由选择协议的选择和配置非常重要。不同的网络环境和需求可能需要不同的路由选择协议。例如,一个小型企业网络可能使用RIP,而一个大型企业网络或ISP可能使用OSPF和BGP的组合。
总结
通过本文的介绍,我们了解了互联网中几种常用的路由选择协议及其路由选择算法。理想的路由选择算法应具备正确性、计算简单、自适应性、稳定性、公平性和最佳性。互联网采用分层次的路由选择协议,主要分为内部网关协议和外部网关协议。RIP作为一种基于距离向量的路由选择协议,虽然实现简单,但也存在坏消息传播得慢的缺点。OSPF作为一种基于链路状态的路由选择协议,能够更好地适应网络状态的变化。BGP作为一种基于路径向量的路由选择协议,主要用于不同自治系统之间的路由选择。
 图文来源:《计算机网络教程》第六版微课版
相关文章:
 
掌握互联网路由选择协议:从基础入门到实战
文章目录 路由选择协议的基本概念路由选择算法的分类分层次的路由选择协议路由信息协议(RIP)内部网关协议:OSPF外部网关协议:BGP互联网中的实际应用总结 互联网的路由选择协议是网络通信的核心,它决定了数据包如何在网…...
[笔记]ONVIF服务端实现[进行中...]
1.文档搜索: 从:https://www.cnblogs.com/liwen01/p/17337916.html 跳转到了:ONVIF协议网络摄像机(IPC)客户端程序开发(1):专栏开篇_onvif 许振坪-CSDN博客 1.1原生代码支持&…...
 
深度强化学习 ②(DRL)
参考视频:📺王树森教授深度强化学习 前言: 最近在学习深度强化学习,学的一知半解😢😢😢,这是我的笔记,欢迎和我一起学习交流~ 这篇博客目前还相对比较乱,后面…...
线性代数重要知识点和理论(下)
奇异值分解 奇异值分解非常重要且有趣。首先对于 n n n\times n nn对称矩阵 A A A,可以通过对角化得到其对角化形式 A P D P − 1 APDP^{-1} APDP−1,但是如果 A A A不是对称矩阵或者不是方阵,则不能进行对角化,但是可以通过奇…...
 
独立开发者系列(35)——python环境的理解
新手阶段,为了快速入门,基本都是直接开始写python代码实现自己想要的效果,类似搭建博客,写个web服务器,搭建简易聊天室,偶尔也写些爬虫,或者使用pygame写个简单小游戏,也有tk库做点简…...
中小企业常见的网络安全问题及防范措施
在数字化浪潮的推动下,我国中小企业的信息化建设取得了显著成就。然而,随着网络安全形势的日益严峻,中小企业在网络安全方面的短板逐渐暴露出来。本文将从中小企业网络安全现状出发,深入剖析其存在的问题,并提出针对性…...
Android 线程并发:线程通信:Handler机制
文章目录 API源码分析操作总结 API Handler相关 Handler对象.sendMessage(Message) 发送消息 Handler对象.handleMessage()空方法 自定义Handler重写handleMessage方法,处理Message Looper相关 Looper.getMainLooper() 获取App的UI线程的Looper对象 Looper…...
 
搭建自己的金融数据源和量化分析平台(三):读取深交所股票列表
深交所的股票信息读取比较简单: 看上图,爬虫读取到下载按钮的链接之后发起请求,得到XLS文件后直接解析就可以了。 这里放出深交所爬虫模块的代码: # -*- coding: utf-8 -*- # 深圳交易所爬虫 import osimport pandas as pd imp…...
 
企业级视频拍摄与编辑SDK的全面解决方案
视频已成为企业传播信息、展示品牌、连接用户的重要桥梁,如何高效、专业地制作高质量视频内容,成为众多企业面临的共同挑战。美摄科技,作为视音频技术领域的创新先锋,以其强大的视频拍摄与编辑SDK,为企业量身打造了一站…...
后端返回列表中包含图片id,如何将列表中的图片id转化成url
问题描述 如果我有一个列表数据,列表中每个对象都包含一个图片id,现在我需要将列表中的图片id转化成图片,然后再页面上显示出来 如果你有一个列表数据,列表中每个对象都包含一个图片 ID,并且你想将这些图片 ID 转化为…...
 
Python学习笔记44:游戏篇之外星人入侵(五)
前言 上一篇文章中,我们成功的设置好了游戏窗口的背景颜色,并且在窗口底部中间位置将飞船加载出来了。 今天,我们将通过代码让飞船移动。 移动飞船 想要移动飞船,先要明白飞船位置变化的本质是什么。 通过上一篇文章࿰…...
export在linux中的作用
在某些项目中常常使用export命令。该命令的作用是设置环境变量,并且该环境变量为当前shell进程与其启动的子进程共享。 export MODEL_NAME"stable-diffusion-v1-4"比如以上命令,如果不采用export,设置的变量仅在当前shell命令/进程…...
 
FFmpeg解复用器如何从封装格式中解析出不同的音视频数据
目录 1、ffmpeg介绍 2、FFMPEG的目录结构 3、FFmpeg的格式封装与分离 3.1、数据结构 3.2、封装和分离(muxer和demuxer) 3.2.1、Demuxer流程 3.2.2、Muxer流程 4、总结 4.1、播放器 4.2、转码器 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续…...
测试-常见问题
目录 1、测试报告中有哪些内容? 2、如何保证用例的覆盖度 3、测试用例和测试脚本的关系 4、Android和iOS测试的区别 5、小程序和App测试的区别 6、Web和App测试的区别 7、Alpha和Beta测试的区别 8、测试计划包括哪些? 9、Jmeter 、 monkey 10、设计用例的考虑点 …...
RSA非对称加密算法(Java实现)
废话不多说,直接上代码 public class RSAService {private static final String RSA "RSA";private static final String PUBLIC_KEY "xxx";private static final String PRIVATE_KEY "xxx";public static void main(String[] ar…...
netty构建http服务器
Netty 是一个高性能的异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。要使用 Netty 搭建一个支持 HTTP 方法(GET, POST, PUT, DELETE)的 HTTP 服务器,可以按照以下步骤进行操作。 准备工作 添加依赖…...
Docker中安装Kafka和Kafka UI管理界面
Kafka 简介 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流应用。它最初由LinkedIn开发,并于2011年开源,之后成为Apache项目的一部分。Kafka的核心概念和功能包括: 发布与订阅消息系统:Kafka允许用户发布和订阅消息流。高吞吐量:Kafka能够处理大量数…...
 
防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包
防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识&…...
C# 冒泡排序
栏目总目录 概念 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历待排序的数列,比较每对相邻的项,并在顺序错误时交换它们的位置,直到没有需要交换的项为止。由于排序过程中小数逐渐“浮”到前…...
 
网络传输层——UDP与TCP
前言: 1.国际网络体系结构: OSI模型: open system interconnect 理论模型 1977 国际标准化组织 各种不同体系结构的计算机能在世界范围内互联成网。 应用层:要传输的数据信息,如文件传输,电子邮件等…...
 
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
 
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
 
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
 
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
 
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
 
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
 
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
