计算机网络 —— 网络层 (路由协议)
计算机网络 —— 网络层 (路由协议)
- 什么是路由协议
- 内部网关协议
- RIP
- 关键特性
- OSPF
- 主要特点
- 外部网关协议
- BGP
- 关键特性
我们今天来看路由协议:
什么是路由协议
路由协议是网络设备(主要是路由器)用来决定数据包在网络中传输路径的规则集。它们通过共享路由信息来构建并维护路由表,确保数据能够从源设备有效地传输到目标设备。路由协议按照不同标准可以分为以下几类:
- 按工作原理分类:
- 距离矢量路由协议(Distance Vector Routing Protocols):如RIP(Routing Information Protocol)和IGRP(Interior Gateway Routing Protocol),这类协议基于跳数(hop count)作为度量标准来选择路径,并且定期向邻居广播整个路由表。它们简单但容易产生路由环路和慢收敛的问题。
- 链路状态路由协议(Link State Routing Protocols):如OSPF(Open Shortest Path First)和IS-IS(Intermediate System to Intermediate System),这些协议通过泛洪网络拓扑信息来构建一个完整的网络图,每个路由器基于这个图计算最佳路径。它们提供了更快的收敛速度和避免路由环路的能力。
- 按用途分类:
- 内部网关协议(IGPs,Interior Gateway Protocols):在单个自治系统(AS)内部使用的路由协议,如RIP、OSPF和IS-IS。
- 外部网关协议(EGPs,External Gateway Protocols):用于不同自治系统之间的路由传递,最著名的是BGP(Border Gateway Protocol)。
- 按路由表的更新方式分类:
- 静态路由:由网络管理员手动配置,不会随网络变化自动更新。
- 动态路由:路由信息会根据网络的变化自动更新,包括上述的距离矢量和链路状态协议。
- 按支持的协议类型分类:
- 单播路由协议:处理单个发送者到单个接收者的通信。
- 多播路由协议:设计用于支持一对多的通信,如PIM(Protocol Independent Multicast)。
- 组播路由协议:实质上与多播路由协议相同,术语上有时互换使用,关注于高效地向多个目的地发送数据。


路由协议的选择取决于网络的规模、复杂性、性能要求以及管理的便捷性。动态路由协议特别适用于大型网络,因为它能自动适应网络拓扑变化,减少管理负担,而静态路由则更适合小型网络或者对安全性、简单性有特殊需求的场景。
我们这里以内部和外部进行区分:

内部网关协议
内部网关协议(IGP,Interior Gateway Protocol)是在一个自治系统(Autonomous System, AS)内部运行的路由协议,负责在AS内部的路由器之间传播路由信息,以确定数据包在该自治系统内部的最佳传输路径。IGP的主要目标是高效、准确地更新路由表,确保数据能够在复杂的网络环境中快速、可靠地传输。几种常见的IGP包括:
- RIP(Routing Information Protocol):一种较为古老的IGP,基于距离矢量算法。RIP使用跳数(hop count)作为度量标准来确定到达目的地的最佳路径,最大跳数限制通常是15跳,超过这个值即认为网络不可达。RIP有版本1和版本2,后者支持VLSM(Variable Length Subnet Mask)和认证功能。
- OSPF(Open Shortest Path First):基于链路状态的IGP,能够提供更为快速的收敛速度和避免路由环路的能力。OSPF路由器收集整个网络的链路状态信息,并使用Dijkstra最短路径优先算法计算出到达每个网络的最短路径树。OSPF支持复杂的网络划分,包括区域划分(Area)来优化路由更新和减少带宽消耗。
- IS-IS(Intermediate System to Intermediate System):最初设计用于ISO的CLNP(ConnectionLess Network Protocol),后来扩展支持IPv4和IPv6。IS-IS也是链路状态协议,其工作原理与OSPF类似,但在某些方面更为简洁高效,特别是在大规模网络中。IS-IS支持分层的网络设计,通过Level-1(区域内)和Level-2(区域间)路由器来分割路由计算的复杂度。
- EIGRP(Enhanced Interior Gateway Routing Protocol):Cisco开发的高级距离矢量协议,结合了距离矢量和链路状态特性,支持快速收敛、负载均衡、VLSM和毒性逆转等功能。EIGRP使用度量值(Metric)来评估路径,该度量值综合考虑了带宽、延迟、可靠性、负载和最大传输单元(MTU)等因素。
我们这里介绍RIP和OSPF
RIP
RIP(Routing Information Protocol,路由信息协议)是一种经典的内部网关协议(IGP),用于在小型到中型的同构网络中实现动态路由选择。以下是RIP协议的关键特征和工作原理:
关键特性
- 距离矢量协议:RIP基于距离矢量算法工作,使用跳数(hop count)作为路由度量。一个跳数代表数据必须通过的一个网络设备(通常是路由器),RIP认为最佳路径是跳数最少的路径。RIP最多支持15跳,超过这个限制的网络被视为不可达,这限制了RIP在较大网络中的应用。
- 周期性更新:RIP路由器周期性地(默认每30秒)广播或组播其完整的路由表给直连的邻居,即使路由信息未发生变化。这种方式有助于保持网络中所有路由器的路由信息同步,但同时也增加了网络的广播流量。
- 收敛慢与路由环路:由于其基于距离矢量的特性,RIP容易产生路由环路。为了解决这个问题,RIP采用了水平分割(Split Horizon)、毒性反转(Poison Reverse)、保持计时器(Hold-Down Timer)和触发更新(Triggered Update)等机制。
- 版本:RIP有两个主要版本,RIPv1和RIPv2。RIPv1是无类别路由选择协议,不支持VLSM和CIDR,且路由更新时不携带子网掩码信息。RIPv2是其增强版,支持VLSM、CIDR和认证,且路由更新通过组播地址发送而非广播,提高了效率。
- UDP传输:RIP使用用户数据报协议(UDP)作为传输层协议,端口号为520。RIP的消息封装在UDP数据包中,然后通过IP协议传输。


OSPF
开放最短路径优先(OSPF,Open Shortest Path First)是由互联网工程任务组(IETF)开发的一种基于链路状态的内部网关协议(IGP),主要用于在一个自治系统(AS)内部高效地分配路由信息。OSPF协议的设计初衷是为了替代早期的IGP,如RIP,以提供更强大的功能和更好的网络性能。以下是OSPF协议的一些核心特点和机制:
主要特点
- 链路状态路由协议:OSPF基于链路状态算法,每个路由器维护一个链路状态数据库(LSDB),包含整个网络的拓扑结构信息。通过这个数据库,每个路由器独立计算到达各个网络的最短路径树(SPT)。
- 快速收敛:OSPF使用Dijkstra算法计算最短路径,并通过多种机制(如SPF算法、部分路由计算、增量更新)来加速网络变更时的收敛速度,减少网络中断时间。
- 分层设计:OSPF支持区域(Area)的概念,允许将大型网络划分为多个区域来管理和优化路由传播。这样可以减少路由更新的流量,提升网络效率,并增强网络的可管理性。
- 支持VLSM和CIDR:OSPF能够处理变长子网掩码(VLSM)和无类别域间路由(CIDR),这对于高效利用IP地址空间和简化网络设计至关重要。
- 认证机制:提供认证功能,可以配置接口级别的认证来保护路由信息的交换,增加网络安全性。
- 多种类型的OSPF报文:包括Hello报文(用于发现和维护邻居关系)、数据库描述报文(DD)、链路状态请求报文(LSR)、链路状态更新报文(LSU)和链路状态确认报文(LSAck),这些报文共同协作以实现状态同步和更新。
- 版本兼容性:OSPF有两个主要版本,OSPFv2用于IPv4网络,定义在RFC 2328中;OSPFv3用于IPv6网络,定义在RFC 2740中,它们在基本机制上相似,但在地址处理和一些扩展特性上有所不同。


外部网关协议
BGP
边界网关协议(BGP,Border Gateway Protocol)是一种外部网关协议(EGP),用于在不同的自治系统(AS)之间交换路由信息和实现互联网的互联互通。它是构成互联网架构的核心协议之一,负责在广泛的网络中传播可达性信息,确保数据包可以从一个AS传输到另一个AS,最终达到目的地。以下是BGP的一些关键特性和工作原理:
关键特性
- 自治系统间的路由:BGP的主要作用是在不同的AS之间传播路由信息。每个AS都被分配一个唯一的AS号,BGP路由器通过建立邻居关系交换路由信息,以确定如何将数据包从一个AS转发到另一个AS。
- 路径属性:BGP路由不仅包含目的网络前缀和下一跳信息,还携带一系列路径属性,这些属性影响路由的选择和传播。常见的属性包括Origin、AS_PATH、Next_Hop、MED(Multi-Exit Discriminator)、Local_Pref等,其中AS_PATH记录了一条路由经过的所有AS,对于防止路由环路和选择最佳路径至关重要。
- 路由选择算法:BGP路由器基于策略和路径属性选择最优路由。策略可以基于属性设定,如优选本地AS内路由、选择AS_PATH较短的路由等。BGP并不直接使用像OSPF那样的最短路径优先算法。
- 邻居关系和会话:BGP通过TCP(端口179)建立邻居关系,保证了数据传输的可靠性。邻居之间交换Update、Notification、Keepalive和Open等消息来维持连接和更新路由信息。
- 路由反射器和联盟:为了简化大规模网络中的BGP部署,引入了路由反射器(RR)和联盟(Confederation)机制。路由反射器允许非直连的BGP对等体之间传播路由,减少了全连接的需求;联盟则是将大的AS逻辑上划分为多个小AS,便于管理且不影响外部路由选择。
- 版本:目前广泛使用的是BGPv4,支持CIDR和路由聚合,是IPv4和IPv6互联网的骨干路由协议。早期的BGPv1、v2版本已不再使用。





我们来看两道题:


这里只是对协议进行了大致的梳理,并没有进行深度的阐释,这里建议大家配合视频进行食用。
相关文章:
计算机网络 —— 网络层 (路由协议)
计算机网络 —— 网络层 (路由协议) 什么是路由协议内部网关协议RIP关键特性 OSPF主要特点 外部网关协议BGP关键特性 我们今天来看路由协议: 什么是路由协议 路由协议是网络设备(主要是路由器)用来决定数据包在网络中…...
HCIA 15 AC+FIT AP结构WLAN基础网络
本例配置ACFIT,即瘦APAC组网。生活中家庭上网路由器是胖AP,相当于ACFIT二合一集成到一个设备上。 1.实验介绍及拓扑 某企业网络需要用户通过 WLAN 接入网络,以满足移动办公的最基本需求。 1. AC 采用旁挂核心组网方式,AC 与AP …...
给Windows软件添加异常捕获模块生成dump文件(附源码)
软件在运行过程中会时常发生内存越界、内存访问为例、stack overflow线程栈溢出、空指针与野指针等异常崩溃,仅仅是依靠Debug和Release下的调试是远远不够的,因为有些崩溃不是必现的,或者是Debug下很难出现的。所以我们需要在软件中添加异常捕获的模块,在捕获到异常时生成包…...
C语言| 数组
直接定义一个数组,并给所有元素赋值。 数组的下标从0开始,下标又表示数组的长度。 【程序代码】 #include <stdio.h> int main(void) { int a[5] {1, 2, 3, 4, 5}; int i; for(i0; i<5; i) { printf("a[%d] %d\…...
upload-labs第八关教程
upload-labs第八关教程 一、源代码分析代码审计 二、绕过分析点绕过上传eval.php使用burp suite进行抓包修改放包,查看是否上传成功使用中国蚁剑进行连接 一、源代码分析 代码审计 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(U…...
平板消解加热台-温度均匀,防腐蚀-实验室化学分析
DBF系列防腐电热板 是精致路合金加热板块表面经进口高纯实验级PFATeflon氟塑料防腐不粘处理,专为实验室设计的电加热产品,是样品前处理中,加热、消解、煮沸、蒸酸、赶酸等处理的得力助手。可以满足物理、化学、生物、环保、制药、食品、饮品…...
Ubuntu基础-vim编辑器
目录 前言: 一. 安装 二. 配置 三. 基本使用 1.使用 Vim 编辑文本文件 2.代码编辑 3.多窗口编辑 四. 总结 前言: Vim 是从 VI 发展出来的一个文本编辑器,具有代码补充、错误跳转等功能,在程序员中被广泛使用。它的设计理念是命令的组合ÿ…...
Java 网站开发入门指南:如何用java写一个网站
Java 网站开发入门指南:如何用java写一个网站 Java 作为一门强大的编程语言,在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行,但 Java 凭借其稳定性、可扩展性和丰富的生态系统,仍然…...
Armbian OS(基于ubuntu24) 源码编译mysql 5.7
最近弄了个S905X3的盒子刷完Armbian OS (基于ubuntu24),开始折腾Arm64之旅。第一站就遇到了MySQL的问题,由于MySQL没有提供Arm64版本,又不想塞Docker镜像,因此选择源码来编译MySQL5.7。下面记录详细过程和遇…...
React+TS前台项目实战(六)-- 全局常用组件Button封装
文章目录 前言Button组件1. 功能分析2. 代码注释说明3. 使用方式4. 效果展示(1)有加载动画,执行promise函数(2)无加载动画,执行click事件 总结 前言 今天这篇主要讲全局按钮组件封装,可根据UI设…...
Vite支持的React项目使用SASS指南
前言 在现代前端开发中,SASS是一种广受欢迎的CSS扩展语言,它提供了许多实用功能,如变量、嵌套、部分和混合等。 本教程将指导您在一个使用Vite作为构建工具的React项目中如何配置和使用SASS。 使用步骤 1、创建一个Vite React项目 首先确…...
实验12 路由重分布
实验12 路由重分布 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 在大型网络的组建过程中,隶属不同机构的网络部分往往会根据自身的实际情况来选用路由协议。例如,有些网络规模很小,为了管理简单&…...
version-manager最好用的SDK版本管理器,v0.6.2发布
项目地址:https://github.com/gvcgo/version-manager 中文文档:https://gvcgo.github.io/vdocs/#/zh-cn/introduction 功能特点: 跨平台,支持Windows,Linux,MacOS支持多种语言和工具,省心受到…...
MFC工控项目实例之三theApp变量传递对话框参数
承接专栏《MFC工控项目实例之二主菜单制作》 用theApp变量传递对话框参数实时改变iPlotX坐标轴最小值、最大值。 1、新建IDD_SYS_DATA对话框,类名SYS_DATA。 三个编辑框IDC_EDIT1、IDC_EDIT2、IDC_EDIT3变量如图 2、SEAL_PRESSURE.h中添加代码 #include "re…...
C# OpenCvSharp 图像处理函数-图像拼接-hconcat、vconcat、Stitcher
在图像处理和计算机视觉领域,图像拼接是一个常见的操作。OpenCvSharp是一个用于.NET平台的OpenCV封装库,可以方便地进行图像处理。本文将详细介绍如何使用OpenCvSharp中的hconcat、vconcat函数以及Stitcher类进行图像拼接,并通过具体示例帮助读者理解和掌握这些知识点。 函…...
软件方案评审与模块优化:从FOC模块出发的电控平台建设
一、背景 洞悉模块发展趋势,定制行业应用特点,明确优化方向与阶段性目标 随着科技进步的飞速发展,模块化设计已成为众多行业产品开发的核心理念。无论是软件系统、硬件组件,还是复杂系统中的功能模块,都需要对其发展…...
emoji_call_read
这道题我觉得可以记录一下。 主要函数,一样,先考虑怎么泄露libc基址。 但,0x20实在太小,组成不了连续3个ret syscall。 而且文件中也没pop rdi;ret这个gadget,只能另寻他法。 我们注意到: main函数中的这…...
一键自动粘贴,高效处理邮箱地址,让你的工作效率翻倍提升!
在信息爆炸的时代,邮箱地址已成为我们日常工作和生活中的必备元素。无论是商务沟通、报名注册还是信息传递,邮箱地址都扮演着至关重要的角色。然而,手动复制粘贴邮箱地址的繁琐操作往往让人头疼不已,不仅效率低下,还容…...
【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题
文章目录 【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题完整案例 【Java】Java 使用 Graphics2D 在图片上添加文字,并解决图片变红问题 完整案例 public static void main(String[] args) {try {String filePath "D:\\Works…...
初识docker插件
文章目录 一、Docker插件概述二、Docker插件的优势三、Docker插件的使用例子1. 安装Docker插件2. 启用Docker插件3. 创建卷并使用 四、常用的Docker插件五、总结 Docker插件(Docker Plugin)是Docker扩展功能的一种重要方式,它允许用户为Docke…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
