【计网】网络交换技术之分组交换(复习自用,重要1)

复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了

另外两种交换技术可以直接点击链接访问相关笔记:

电路交换

报文交换

一、分组交换的定义

1.定义

    分组交换(Packet Switching) 是一种用于数据通信的网络传输技术,通常用于互联网等大规模分布式网络。在分组交换中,发送端的数据被分割成若干小的数据块(分组),每个分组独立携带必要的控制信息(例如目标地址、源地址、序列号等),通过网络传输。每个分组在网络中按照“存储转发”的方式,通过多个路由器(或交换节点)逐步转发,最终到达接收端。接收端再将这些分组按照顺序重新组装,恢复成原始的完整数据。

2.扩:为什么是“分组”而不是“大包”

     分组(packet)是为了提高网络资源利用率并且减少数据传输的延迟。如果直接传输一个大报文,若传输中有任何错误或丢包,重传的成本很高,且通信资源会被长时间独占。而将数据拆分成多个小的分组,使得每个分组都可以独立传输并且具有独立的路径选择,极大地提高了网络的灵活性和可靠性


二、分组交换的原理

分组交换的原理可以分为几个阶段,分别是:报文拆分分组封装逐跳存储转发分组重组。以下我将详细讲解每一个阶段。

1. 报文拆分与分组封装

1.1. 报文拆分

  • 报文(message)指的是一块较大的数据单元,它是源主机发送的数据,可能包含某个文件、文本等。由于网络带宽、链路限制等原因,发送这些报文可能面临较高的延迟和丢包风险。

  • 在分组交换中,发送端将报文拆分成若干小块,称为分组(packet)。每个分组都是数据的一个“片段”,可以独立传输,包含着原始数据的一部分。

1.2. 分组封装

每个分组都被封装在一个包含控制信息的单元中,确保它能够被正确地传输和路由。这些控制信息通常包括:

  • 源地址:发送该分组的主机的地址。

  • 目的地址:目标主机的地址,路由器通过它来判断该分组的目的地。

  • 序列号或偏移量:用于标记分组在原始报文中的位置或顺序。

  • 校验和(checksum):用于检查分组是否在传输过程中发生了错误。

在分组交换中,控制信息(头部)数据部分(负载)一起构成一个完整的分组。控制信息确保分组能够在网络中正确识别、转发、校验和重组。


2. 存储转发机制

2.1. 逐跳传输

  • 在分组交换中,分组通过多个网络节点(路由器)逐跳转发。在每个路由器,分组会被暂存(存储)并检查,然后再进行转发(转发)。这个过程称为存储转发(store-and-forward)。

  • 每个路由器负责接收、存储和转发分组。它会读取分组头部的目标地址信息,然后查找自己维护的路由表,根据路由表中的信息选择合适的下一跳路由器,然后将分组转发到下一个路由器,直到最终到达目的地。

2.2. 路由器的分组转发作用

  • 路由器是分组交换网络中的关键设备,负责在不同网络之间转发分组。路由器相当于网络中的“交通警察”或“邮局分拣中心”:当一个分组抵达路由器时,路由器读取分组首部中的目标地址等信息,然后查找自身维护的转发表(路由表),据此决定将分组发送到哪一个接口、朝向哪一个下一跳节点​。这个过程称为分组转发。简单来说,路由器根据目标地址找到“下一站”,再把分组转交给下一跳路由器,一步步让分组靠近最终目的地​。

  • 路由器的工作包括两个主要部分:​

    •   (1) 路由选择:通过路由协议(如OSPF、BGP等)的算法计算,构建和更新全网的路由信息,在每台路由器上生成转发表。路由器不断交换信息,动态维护这些表,使其反映当前网络拓扑和可达路径。

    • (2) 分组转发:当路由器收到一个分组时,执行查表操作(通常采用最长前缀匹配查找目标IP地址对应的路由项),获取该分组应转发的出接口和下一跳地址,然后将分组从对应接口发送出去​。在这一过程中,路由器还可能更新分组首部的某些字段(例如减小TTL、生存时间)并重新计算首部校验和,以保证分组在网络中按规定传播​。

 通过上述功能,路由器实现了不同网络之间的互联互通。它使每个分组各自独立地根据首部地址被送往目标,无需源主机预知全程路径​。可以说,没有路由器的解析和转发,互联网中海量分组就无法高效地从世界的这一端跑到那一端。路由器确保分组各行其道地到达终点,是分组交换网络的核心枢纽。


3. 路径选择与转发

3.1. 动态路径选择

  • 每个分组根据目标地址网络的状态,可以选择不同的路径。分组交换的一个关键特点是,路径是动态选择的,每个分组都可能选择不同的路径。

  • 路由器通过查找其路由表中的条目来决定将分组转发到哪个方向。这个过程是实时的,而非预先设定的,路径选择是根据当前网络状况(如链路繁忙程度、故障等)动态做出的

  • 这与电路交换不同,电路交换是先建立一个固定的连接(物理路径),通信过程中始终沿用这个路径。而在分组交换中,每个分组都可以选择不同的路径,这给网络带来了更高的灵活性和冗余性

  • 上图展示了三个分组(用不同颜色箭头表示)从左侧主机发送到右侧主机时可能选择的不同路线。可以看到,由于路由器可以根据网络拥塞或链路状态调整转发决策,各分组不一定走相同的路径。例如,绿色分组走上方路径,而红色分组走下方路径。这意味着分组到达目的地的顺序也不一定和发送顺序相同:有的分组可能绕远路或在中途等待更久,导致后发送的分组先到达。乱序传输是分组交换的固有现象之一,网络层本身并不保证分组按序抵达​。因此,需要由运输层协议(如TCP)或应用层在接收端对分组进行重新排序。总之,在分组交换中路径选择具有实时、自主的特点,每个分组各行其道,这赋予网络更强的灵活性和健壮性(即使某一路径故障,分组可绕道而行​),但也要求接收方具备乱序重排能力。

3.2. 逐跳存储转发

  • “逐跳”意味着每个分组从源到目的地会经过多个路由器,每经过一个路由器,就需要暂时存储分组并转发它。在每一跳的路由器,分组会被完全接收并进行校验,然后再发送到下一跳路由器。


4. 分组重组

4.1. 分组到达目标后

  • 在分组通过网络到达接收端时,它们可能不是按照顺序到达的(因为它们可能通过不同的路径传输)。接收端的任务是重排(reorder)这些分组,并根据它们的序号将它们重新组合(重组(reassemble))为原始的报文。

  • 重排:有些分组可能比其他分组先到达,因此接收端必须等待所有的分组到齐并按顺序排列。

  • 重组:接收端根据序号将数据部分拼接起来,恢复成完整的原始数据。若某些分组丢失或损坏,接收方需要通过重传机制请求丢失的分组重新发送。

  • 对于重排和重组的理解

    • 由于各分组可以独立选择路径且传输时间可能不同,接收端主机收到的分组有可能顺序乱掉。为了将原始报文正确复原,接收端需要对分组进行重排和重组。通常每个分组在首部中携带了用于重组的标识,例如序列号(或片偏移等),接收端可以利用这些标识来确定分组的正确位置次序​。当分组抵达终点主机后,运输层协议(如TCP)或IP层会根据序号将失序的分组重新排序:简单来说,就是按序号大小把分组的数据片段从小到大排列,这样就恢复了发送时的正确顺序​。只要所有分组都成功抵达,哪怕先前乱序,到这一步也能重新组装出完整的数据。

    • 接收端在重排的同时,会将各分组的数据部分提取出来按序拼接,重新构成原始报文的内容​。如果在网络层进行了IP分片,那么IP层会根据分片偏移将多个片段组合成完整的数据报再交付上层;如果是运输层的拆分(如TCP将应用报文拆成多个报文段),则TCP层根据序号将报文段排好顺序后重组数据流供应用使用。举例来说,TCP协议规定数据每个字节都有序号,接收方根据序号排好乱序分段,丢弃重复的数据,这样就确保了最终交付给应用的数据是按原始顺序的。当然,若有分组迟迟未到(可能丢失),接收方在等待一段时间后会发现缺口,这涉及差错恢复机制(下面将说明)。总体而言,重排重组过程对用户是透明的 —— 用户最终收到的仍是一整块按正确顺序排列的原始数据,好像从未被拆分过一样​。


5. 分组丢失与重传机制

5.1 对于分组冲突与网络堵塞的理解

由于分组在路由器采用存储转发,路由器内部需要缓存(缓冲区)来暂存分组。每个路由器的端口通常有一个输出队列:当多个分组同时需要从该端口发送时,它们会在缓冲队列中排队,按照先来先服务(FIFO)的顺序依次发送​。换言之,分组通常按到达顺序存储在路由器缓冲中等待转发。只有当前面的分组发送出去后,后续分组才能出队。这保证了一定的顺序性,但如果网络繁忙,也会引入排队时延——分组在队列中等待的时间。有时实时应用的数据包可能在队列中延迟过久甚至丢弃,因此一些高级路由器还会实现优先级队列等调度策略,但最基本的机制是FIFO队列​。

当输入流量过大、持续时间过长时,路由器缓冲区可能被塞满,这就是网络拥塞的情况​。缓冲区有容量限制,如果新分组到来时缓冲已满,路由器将无法再存储新的分组。此时最常见的策略是直接丢弃后来的一些分组(通常丢弃最新到达的,称为“尾弃”)​。也就是说,只有当缓冲区填满无空位时,路由器才会丢包​。一旦出现丢包,分组将在该路由器被抛弃,无法抵达目的,需要由后续机制来补救(例如发送端重传,详见后文)。在拥塞严重时,丢包率会升高,从而通知传输层减慢发送速率,实现一定的流量控制。正常情况下,路由器尽量通过队列缓冲短暂的流量高峰,但当持续流量超出链路带宽时,排队时延增加且最终不得不丢包,这是分组交换网络中的常见现象​。总之,路由器需要缓冲来平滑流量,但缓冲区并非无限,网络拥塞时会导致排队延迟和丢包,两者都会影响网络性能。

5.2 为什么会丢失分组(丢包)?

虽然路由器采用存储转发机制,并且每个分组在被转发之前都会经过检查,但在以下情况下,数据包还是可能会丢失:

  • 网络拥塞:如果网络中有大量的流量,路由器的缓冲区可能会满,无法再接收新的数据包。此时,路由器会丢弃最新到达的分组(通常叫“尾丢”)。这就像超市的货架满了,新的货物就没有地方放,只能丢掉一部分 。

  • 链路故障:如果某个链路发生故障(比如光纤断裂,或者无线连接中断),分组就无法继续向前转发,最终会丢失 。

  • 路由器处理错误:尽管路由器会检查分组的校验和和其他控制信息,但如果网络条件非常糟糕或者出现了硬件故障,某些数据包可能在传输过程中受到损坏,路由器将会丢弃这些损坏的分组。

5.3 重传机制是怎么工作的?

在分组交换中,丢失的分组需要通过重传来恢复。而这一工作并不是由路由器来做的,重传是由传输层协议(如TCP)来完成的,下面是详细过程:

  • TCP协议的重传机制:

    • 发送端等待确认:发送方会将分组发送出去,并开始计时等待接收方的确认消息(称为ACK,Acknowledgment)。接收方会在收到一个分组后,向发送方回送一个确认消息,表示它成功接收了数据。

    • 超时重发:如果发送方在一定时间内没有收到确认消息,就会认为这个分组丢失了(比如路由器在中途丢失了这个分组,或者接收方没有及时收到分组)。此时,发送方会重新发送该分组。这种方式叫做超时重传

    • 重复确认与重传:如果接收方收到了某个分组,但由于其他分组丢失,无法按顺序重组数据,它就不会发送确认消息,而是等待缺失的分组。当发送方发现没有收到确认(ACK),或者收到对后续分组的重复确认,它就会知道某些分组丢失了,并触发重传 。

5.4 简单举个例子:

  • 假设你在发送一个文件给你的朋友,文件被拆分成多个分组进行传输,每个分组都标有顺序号。

  • 你发送分组1、2、3、4,按顺序发送出去,发送方等待接收方发送确认(ACK)来告诉它每个分组是否都收到了。

  • 朋友收到了分组1、2、3,但因为网络拥塞或其他原因,分组4丢失了。

  • 朋友并没有发出“分组4已收到”的确认,而是一直等待分组4,这就导致发送方发现没有收到分组4的确认。

  • 发送方经过超时检测后,认为分组4丢失了,于是会重新发送分组4,直到接收方成功收到为止 。

5.5 为什么不由路由器来做重传?

路由器的主要职责是传递数据,它并不负责管理数据的完整性或重传。网络层(比如IP协议)会尽最大努力将数据送到目的地,但如果发生丢包,负责可靠传输的责任落在了传输层,例如TCP协议。TCP通过超时重传确认机制确保数据正确无误地从源端传送到接收端 。


三、分组交换的特点

  1. 无需建立专用连接
    分组交换与电路交换最大的区别在于,它不需要在通信开始前为每次通信建立专用的物理路径。在分组交换中,数据被拆分成多个小的分组,每个分组根据目标地址独立选择路径,并且可以通过不同的路径传输。网络资源并不会被长时间占用,资源利用效率更高。

  2. 存储转发机制
    在分组交换中,每个路由器(或交换节点)接收到一个分组时,必须先暂存该分组,进行必要的检查,然后再转发它。这个过程称为“存储转发”(store-and-forward)。它确保了分组的完整性和正确性,同时也带来了少许的延迟,因为分组需要经过每个路由器的处理和存储。

  3. 路径选择动态
    每个分组在通过网络时,其传输路径是动态选择的,可以根据网络的当前状态(如链路拥堵、故障等)选择最佳路径。不同的分组可能选择不同的路径,这使得网络具有高度的灵活性。

  4. 分组独立性
    分组交换中的每个分组都是独立的,携带完整的控制信息(如源地址、目标地址、序列号等),可以独立选择传输路径,且每个分组都通过独立的路径到达目的地。接收端根据序列号将分组重排、重组。

  5. 适应突发流量
    分组交换能够有效应对网络中的突发流量,因为它不需要事先占用全部的网络带宽。每个分组在需要时才占用带宽,其他时段网络带宽空闲,可以处理其他数据流。它能够灵活地根据需求调配资源。


四、分组交换的作用(好处)

  1. 提高网络资源的利用率
    由于不需要在通信前建立专用线路,分组交换可以在网络中动态分配资源。当没有数据传输时,网络资源(如带宽)就可以空闲,允许其他通信流共享网络带宽。这样,网络能够高效地利用资源。

  2. 增强网络的灵活性和容错性
    分组交换不依赖于固定路径,分组可以通过多条路径到达目的地,即使某条路径发生故障或拥塞,网络也能通过其他路径继续传输数据。这提高了网络的容错性可靠性,避免了单一链路故障导致大规模通信中断。

  3. 支持突发性数据流
    分组交换非常适合处理突发数据流,例如视频会议、实时游戏等,这些应用会有大量数据流的快速波动。分组交换能够有效调配带宽,避免因为突发流量导致网络拥塞。

  4. 降低通信成本
    不需要专门建立电路连接,分组交换能够降低通信成本,尤其在大规模网络中。它减少了资源的浪费,因为每个分组都能独立选择路径,不需要为每一次通信占用独占的资源。

  5. 网络规模的可扩展性
    分组交换的动态路径选择使得网络能够容易地扩展和适应网络规模的增长。随着设备和用户的增加,网络可以通过增加路由器和链路等设备来扩展网络,无需改变网络的基础结构。


五、分组交换的应用

  1. 互联网
    分组交换是现代互联网的核心技术,所有的互联网数据(如网页浏览、视频流、社交媒体、电子邮件等)都依赖于分组交换来实现数据的高效、可靠传输。在互联网中,所有数据都被拆分成小的分组,并通过动态路径传输。

  2. 即时通信(IM)
    分组交换用于即时通信软件(如微信、QQ、Slack等)的数据传输。在这些应用中,消息、图片、文件等都被切割成多个分组,通过网络传输。分组交换使得即时通信能够快速传输大量的小数据包。

  3. 视频流和音频流服务
    如Netflix、YouTube等视频平台,分组交换保证了视频和音频数据可以高效地传输,尽管这些数据量较大,但通过分组交换技术,数据能够分割为小块并通过网络传输,不会因带宽限制而造成严重的延迟。

  4. 虚拟私人网络(VPN)
    VPN在利用公用互联网进行加密通信时,依赖分组交换将数据分成多个加密的分组,通过网络传输。分组交换技术保证了数据可以在多个路径上传输,同时避免了路径故障带来的通信中断。

  5. 分布式计算和云服务
    云计算服务中的数据传输,也利用了分组交换技术。用户请求和返回的计算结果会被拆分成多个分组,快速传输到云服务器上进行计算处理,再返回给用户。分组交换使得这些应用能够在分布式网络中实现高效的通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL及Python中等效实现

一. STL 概述 STL 包含以下核心组件: 容器(Containers):存储数据的结构,如数组、链表、集合等。迭代器(Iterators):用于遍历容器的接口,类似指针。算法(Alg…

python-63-前后端分离之图书管理系统的Flask后端

文章目录 1 flask后端1.1 数据库实例extension.py1.2 数据模型models.py1.3 .flaskenv1.4 app.py1.5 运行1.6 测试链接2 关键函数和文件2.1 请求视图类MethodView2.2 .flaskenv文件3 参考附录基于flask形成了图书管理系统的后端,同时对其中使用到的关键文件.flaskenv和函数类M…

蓝桥杯真题——好数、R格式

目录 蓝桥杯2024年第十五届省赛真题-好数 【模拟题】 题目描述 输入格式 输出格式 样例输入 样例输出 提示 代码1:有两个案例过不了,超时 蓝桥杯2024年第十五届省赛真题-R 格式 【vector容器的使用】 题目描述 输入格式 输出格式 样例输入…

Python中NumPy的索引和切片

在数据科学和科学计算领域,NumPy是一个功能强大且广泛使用的Python库。它提供了高效的多维数组对象以及丰富的数组操作函数,其中索引和切片是NumPy的核心功能之一。通过灵活运用索引和切片操作,我们可以轻松访问和操作数组中的元素&#xff0…

设计模式:策略模式 - 消除复杂条件判断的利器

一、什么是策略模式? 策略模式(Strategy Pattern)是一种行为型设计模式,它将一组算法或业务逻辑封装为独立的策略类,使这些策略可以互换使用,并通过上下文类动态选择合适的策略。 核心思想 • 将不同的行…

LeetCode hot 100—不同路径

题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? …

pytorch查询字典、列表维度

输出tensor变量维度 print(a.shape)输出字典维度 for key, value in output_dict.items():if isinstance(value, torch.Tensor):print(f"{key} shape:", value.shape)输出列表维度 def get_list_dimensions(lst):# 基线条件:如果lst不是列表&#xff0…

多坐标系变换全解析:从相机到WGS-84的空间坐标系详解

多坐标系变换全解析:从相机到WGS-84的空间坐标系详解 一、常见坐标系简介二、各坐标系的功能和使用场景1. WGS-84 大地坐标系(经纬高)2. 地心直角坐标系(ECEF)3. 本地 ENU / NED 坐标系4. 平台坐标系(Body)5. 相机坐标系三、坐标变换流程图四、如何选用合适的坐标系?五…

【NumPy科学计算:高性能数组操作核心指南】

目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四、最佳实践推荐方案 ✅常见错误 ❌调试技…

【特权FPGA】之PS/2键盘解码

0 故事背景 见过这种接口的朋友们,大概都已经成家立业了吧。不过今天我们不讨论这种接口的历史,只讲讲这种接口的设计。(如果还没有成家的朋友也别生气,做自己想做的事情就对了!) 1 时序分析 数据帧格式如图…

DAPP实战篇:使用web3.js实现前端输入钱包地址查询该地址的USDT余额—操作篇

专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读396次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你想要知道区块…

高中生学习数据隐私保护的“技术-制度-文化”协同机制研究

一、引言 1.1 研究背景与意义 在数字化时代的浪潮下,教育领域正经历着深刻的变革,智能教育平台如雨后春笋般涌现,为高中教育带来了新的活力与机遇。这些平台借助先进的信息技术,能够实时收集、分析大量的高中生学习数据&#xf…

【Java多线程】告别线程混乱!深度解析Java多线程4大实现方式(附实战案例)

一、继承Thread类 实现步骤&#xff1a; 1.继承Thread类 2.重写run()方法 3.创建线程对象并调用start()方法 示例&#xff1a; class MyThread extends Thread {Overridepublic void run() {for (int i 0; i < 5; i) {System.out.println(Thread.currentThread().getNam…

全国产V7-690T核心板/算法验证板/FPGA开发板

UD SOM-404全国产化信号处理模块既可以作为核心板使用&#xff0c;也可以单独使用。FPGA对外有80组GTY通过两个FMC连接器全部引出&#xff0c;多个模块可以级联使用&#xff0c;扩展信号处理能力。FMC连接器也满足标准规范&#xff0c;可以插入标准的FMC或FMC子板。模块为100%国…

STM32_HAL库提高中断执行效率

目录 中断流程分析我的解决办法优缺点 大家都在说STM32 HAL 库中断效率低下。具体哪里不行&#xff1f;如何优化&#xff1f; 我手里的项目要用到多个定时器TIM6、TIM7、TIM9、TIM10、TIM11、TIM12、TIM13&#xff0c;在处理这些定时器中断的时候&#xff0c;也发现了这个问题。…

RabbitMQ惰性队列的工作原理、消息持久化机制、同步刷盘的概念、延迟插件的使用方法

惰性队列工作原理 惰性队列通过尽可能多地将消息存储到磁盘上来减少内存的使用。与传统队列相比&#xff0c;惰性队列不会主动将消息加载到内存中&#xff0c;而是尽量让消息停留在磁盘上&#xff0c;从而降低内存占用。尽管如此&#xff0c;它并不保证所有操作都是同步写入磁…

Spark Core(二)

Spark-Core编程&#xff08;二&#xff09; RDD转换算子 RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型 Value类型 1&#xff09;map 将处理的数据逐条进行映射转换&#xff0c;这里的转换可以是类型的转换&#xff0c;也可以是…

C#打开文件及目录脚本

如果每天开始工作前都要做一些准备工作&#xff0c;比如打开文件或文件夹&#xff0c;我们可以使用代码一键完成。 using System.Diagnostics; using System.IO;namespace OpenFile {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, …

Python生成exe

其中的 -w 参数是 PyInstaller 用于窗口模式&#xff08;Windowed mode&#xff09;&#xff0c;它会关闭命令行窗口的输出&#xff0c;这通常用于 图形界面程序&#xff08;GUI&#xff09;&#xff0c;比如使用 PyQt6, Tkinter, PySide6 等。 所以&#xff1a; 如果你在没有…

【大模型微调】如何解决llamaFactory微调效果与vllm部署效果不一致如何解决

以下个人没整理太全 一、生成式语言模型的对话模板介绍 使用Qwen/Qwen1.5-0.5B-Chat训练 对话模板不一样。回答的内容就会不一样。 我们可以看到例如qwen模型的tokenizer_config.json文件&#xff0c;就可以看到对话模板&#xff0c;一般同系列的模型&#xff0c;模板基本都…