计算机网络 —— 网络层 (路由协议)
计算机网络 —— 网络层 (路由协议)
- 什么是路由协议
- 内部网关协议
- 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…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...

Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...