集线器、交换机、路由器是如何转发包的

集线器、交换机、路由器是如何转发包的

  • 集线器
  • 交换机
    • MAC地址表的维护
  • 路由器
    • 路由表中的信息
    • 路由器的包接收操作
    • 查询路由表确定输出端口
    • 找不到匹配路由时选择默认路由
    • 包的有效期
    • 通过分片功能拆分大网络包
    • 路由器发送操作中的一些特点
  • 参考文档

集线器

集线器是一层(物理层)设备
集线器将信号发送给所有连接在它上边的线路

集线器是什么呢?
文字描述就是:集线器(Hub)是计算机网络中的一种网络设备,主要用于连接多台计算机,实现数据包的广播传输。 集线器工作在OSI模型的物理层,负责物理信号的传输。它将多个计算机的物理连接集中在一起,形成一个共享的网络。 集线器接收到的数据包会被广播到所有连接在它上面的计算机。这意味着,无论是哪台计算机发送的数据包,所有计算机都会接收到这个数据包。

然而,随着技术的发展,集线器逐渐被交换机(Switch)所取代。交换机不同于集线器,它在数据链路层(OSI模型的第二层)工作,能够根据MAC地址将数据包仅发送到目标设备,而不是广播到所有设备。这样,交换机能够提供更高效的数据传输,减少了网络中的冗余流量。

集线器内部结构如下图:
集线器内部结构图
在每个接口的后面装有和网卡中的PHY(MAU)功能相同的模块。
网卡不仅可以连接集线器,因为网卡的PHY(MAU)模块和集线器都是一样的,所以两台计算机的网卡也可以相互连接,只要将一侧的发送信号线和另一侧的接收信号线连起来就可以收发数据了。

信号到达集线器的PHY(MAU)模块后,会进入中继电路。中继电路的基本功能就是将输入的信号广播到集线器的所有端口上。当然,也有一些产品具有信号整形、错误抑制等功能,但基本上就是将输入的信号原封不动输出到网线接口。

接下来,信号从所有接口流出,到达连接在集线器上的所有设备。然后,这些设备在收到信号之后会通过MAC头部中的接收方MAC地址判断是不是发送给自己的,如果是就接收,如果不是则忽略。这样网络包就到达指定的MAC地址的接收方了。

交换机

来一张交换机的图片。图片取自某宝某品牌:
在交换机

交换机端口不具有MAC地址
交换机根据MAC地址表查找MAC地址,然后将信号发送到相应的端口

信号到达网线接口,并有PHY(MAU)模块进行接收,这一部分和集线器是相同的。也就是说,当信号从双绞线传入时,就会进入PHY(MAU)模块的接收部分。

接下来,PHY(MAU)模块会将网线中的信号转换为通用格式,然后传递给MAC模块。MAC模块将信号转换为数字信息,然后通过包末尾的FCS校验错误,如果没有问题则存放到缓冲区中,如果有错误就丢弃这个包。这部分操作和网卡基本相同,可以认为交换机的每个网线接口后边都是一块网卡。网线接口和后边的电路部分一起称为一个端口,也就是说交换机的一个端口就相当于交换机上的一块网卡。但交换机的工作方式和网卡有一点不同。网卡本身具有MAC地址,并通过该对收到的包的接收方MAC地址判定是不是发给自己的,如果不是发给自己的则丢弃;相对的,交换机的端口不核对接收方MAC地址,而是直接接收所有的包并存放到缓冲区。因此,和网卡不同,交换机的端口不具有MAC地址

将包放入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录。MAC地址表主要包含两个信息,一个是设备的MAC地址,另一个是该设备连接在交换机的哪个端口上。MAC地址和端口是一一对应的,通过这张表就能够判断出收到的包应该转发到哪个端口。

MAC地址表的维护

交换机在转发包的过程中,需要对MAC地址表的内容进行维护,维护操作分两种。

第一种是收到包时,将发送方MAC地址以及其输入端口的号码写入MAC地址表中。由于收到包的哪个端口就连着发送这个包的设备,所以只要将这个包的发送方MAC地址写入地址表,以后当收到发往这个地址的包时,交换机就可以将它发送到正确的端口了。交换机每次收到包时都会执行这个操作,因此只要某个设备发送过网络包,它的MAC地址就会被记录到地址表中。

另一种是删除地址表中某条记录的操作,这是为了防止设备移动时产生问题。比如,我们开会时会把笔记本从工位拿到会议室,这时设备就发生了移动。从交换机的角度来看,就是本来连接在某个端口上的笔记本消失了。这时如果交换机收到了发往这台已经消失的笔记本的包,那么它依然会把包发送到原来的端口,通信就会出错,因此必须想办法删除哪些已经过时的记录仪。然而交换机没办法知道这台笔记本已经从原来的端口移走了。因此地址表中的记录不能永久有效,而是要在一段时间不使用后自动删除。

那么当笔记本被拿到会议室之后,会议室里的交换机又会如何工作呢?只要笔记本电脑连接到会议室的交换机,交换机就会根据笔记本电脑发出来的包更新它的地址表。因此对于目的交换机来说不用做什么特别的措施就可以正常工作了。

如果接入到新的交换机,当前笔记本又没有发送过包,当需要接收包的时候,怎么知道MAC地址呢?
广播ARP请求,获取目标设备的MAC地址,一旦目标设备回应了ARP请求,交换机会将其MAC地址添加到MAC表中,以便将来的通信可以直接定位到目标端口。

一旦交换机知道了目标设备的MAC地址,它就会将数据包定向到正确的端口,而不再是广播到所有端口。这种机制使得交换机能够动态地学习和更新网络中各设备的MAC地址,从而提高了网络的效率。

路由器

路由器各个端口都具有MAC地址和IP地址

网络包在到达路由器时会被转发到下一个路由器,这一转发操作的工作原理和交换机类似,也是通过查表判断包的转发目标。

路由器的内部结构如下图所示。其中包转发模块负责判断包的转发目的地,端口模块负责包的收发操作。
路由器内部结构
路由器在转发包时,首先通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术。接下来,转发模块会根据收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询,以此判断转发目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思。

端口模块会根据相应通信技术的规范执行包收发的操作,这意味着端口模块时以实际的发送方或者接收方的身份来收发网络包得。以以太网为例,路由器的端口具有MAC地址,因此它能够成为以太网的发送方和接收方。端口还具有IP地址,从这个意义上讲,它和计算机的网卡是一样的。

路由表中的信息

路由器根据IP地址判断转发目标
路由器会忽略主机号,只匹配网络号
路由器表的子网掩码列指标是在匹配网络包目标地址时需要对比的数量

在“查表判断转发目标”这一点上,路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同。交换机是通过MAC头部中的接收方MAC地址来判断转发目标的,而路由器则是根据IP头部中的IP地址来判断的。由于使用的地址不同,记录转发的内容也会不同

路由表
路由表示例如上图,最左侧的目的地址列记录的实接收方的信息。实际上这里的IP地址只包含表示子网的网络号部分的比特值,而表示主机号部分的比特值全部为0。路由器会将接受到的网络包的接收方IP地址与路由表中的目标地址进行比较,找到相应的记录。交换机在地址表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分。

在匹配地址的过程中,路由表需要知道网络号的比特数,因此路由表中还有一列子网掩码。通过这个值就可以判断出网络号的比特数。


路由器还会把几个子网合并成一个子网,并在路由表中只产生一条记录,称之为路由聚合。 路由聚合会将几个子网合并成一个子网,并在路由表中只产生一条记录。

路由聚合

假设现在有三个子网,分别是 10.10.1.0/24,10.10.2.0/24、10.10.3.0/24,路由器 A 需要将包发往这 3 个子网。在这种情况下,路由器 A 中原本有对应这 3 个子网的 3 条记录,但是我们把这三个子网聚合成一个子网为 10.10.0.0/16,这样也能够正确地进行转发,但我们减少了路由表中的记录数量,这就是路由聚合。经过路由聚合,多个子网会被合并成一个子网,子网掩码会发生变化,同时,目标地址列也会改成聚合后的地址。

相对地,还有另外一些情况,如将一个子网进行细分并注册在路由表中,然后拆分成多条记录。

此外,通过上述方法,我们也可以将某台计算机的地址写入路由表中,这时的子网掩码为 255.255.255.255,也就是说地址中的全部 32 个比特都为 1。这样一来,主机号部分比特全部为 0 可以表示一个子网,主机号部分比特不全部为 0 可以表示某一台计算机,两种情况可以用相同的规则来处理。


路由表最后一列是跃计数,它表示距离目标IP地址的距离是远还是近。这个数字越小,表示距离目的地越近,数字越大,表示距离目的地越远。

路由器的包接收操作

路由器的端口都具有MAC地址,直接受与自身地址匹配的包,遇到不匹配的包则直接丢弃

信号到达网线接口部分,其中的PHY(MAU)模块和MAC模块将信号转换为数字信息,然后通过包末尾的FCS进行错误校验,如果没问题则检查MAC头部中的接收方MAC地址,看看是不是发送给自己的包,如果是就放到就收缓冲区,否则就丢弃这个包。如果包的接收方MAC地址不是自己,说明这个包时发送给其他设备的,如果接受这个包就违反了以太网的规则。

查询路由表确定输出端口

通过路由器转发的网络包,其接收方MAC地址为路由器端口的MAC地址

完成包接收操作之后,路由器就会丢弃包开头的MAC头部。MAC头部的作用就是将包送达路由器,其中的接收方MAC地址就是路由器端口的MAC地址。因此,当包到达路由器之后,MAC头部的任务就完成了,于是MAC头部 就会被丢弃。

接下来路由器会根据MAC头部后方的IP头部中的内容进行包的转发操作。

根据包的接收方IP地址查询路由表中的目标地址栏,以找到相匹配的记录。这个匹配不是匹配全部的32个比特,而是根据子网掩码列中的值判断网络号的比特数,并匹配相应数量的比特。按照这样的规则可能会匹配到多条候选记录,路由器会首先寻找网络号比特数最长的一条记录。网络号的比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数越少,即子网中存在的主机数量越少,这一规则的目的是尽量缩小范围,所以根据这条规则判断转发目标就会更加准确。

然而,有时候路由表中会存在网络号长度相同的多条记录,例如考虑到路由器或网线的故障而设置的备用路由就属于这种情况。这时需要根据跃点计数值来进行判断。跃点计数越小说明路由越近,因此应选择越点数较小的记录。

如果在路由表中找不到匹配的记录,路由器会丢弃这个包,并通过ICMP消息告知发送方。

找不到匹配路由时选择默认路由

路由表中子网掩码为 0.0.0.0的记录表示“默认路由”

如果找不到目标记录,路由器就直接丢弃该包,那么是不是要把所有的转发目标都配置到路由器中表中呢?如果转发目标就成千上万,是不是都要写到路由表呢?

不是,路由表最后一行的作用就解决了如上问题。这一行的子网掩码为 0.0.0.0,关键就在这里,子网掩码 0.0.0.0的意思就是网络包接收方IP地址和路由表目标地址的匹配的比特数为0,换句话说,就是根本不需要匹配

包的有效期

从路由表中查找到转发目标之后,网络包就会被转发给输出端口,并最终发送出去,但在此之前,路由器还有一些工作要完成。

第一个工作就是更新IP头部中的TTL(time to live,生存时间)字段。TTL字段表示包的有效期,包每经过一个路由器的转发,这个值就会减1,当这个值变成0时,就表示超过了有效期,这个包就会被丢弃。

这个机制是为了防止包在一个地方陷入死循环。

通过分片功能拆分大网络包

路由器的端口并不只有以太网一种,也可以支持其他局域网或专线通信计数。不同的线路和局域网类型各自能传输的最大包长度也不同。一旦转发的包的长度超过了输出端口能传输的最大长度,就无法直接发送这个包了。

遇到这种情况,可以使用IP协议中定义分片功能对包进行拆分,缩短每个包的长度。首先需要知道输出端口的MTU,看看这个包能不能不分片直接发送。最大包长度是由端口类型决定的,用这个最大长度减掉头部的长度就是MTU,将MTU与要转发的包长度进行比较。如果MTU太小就需要将这个包按照MTU进行分片,再次之前还要看一下IP头部中的标志字段,确认是否可以分片。
对包进行拆分的分片功能
如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过ICMP消息通知发送方。否则,就可以按照输出端口MTU对数据进行一次拆分了。

路由器发送操作中的一些特点

路由器判断下一个转发目标的方法如下:

  • 如果路由表的网关列内容为IP地址,则该地址就是下一个转发目标。
  • 如果路由器的网关列内容为空,则IP头部中的接收方IP地址就是下一个转发目标

路由器也会使用ARP来查询下一个转发目标的MAC地址

参考文档

《网络是怎样连接的》 ——户根勤

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

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

相关文章

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

目录 前言 复杂度总结 预备代码 插入排序 1.直接插入排序: 时间复杂度O(N^2) \空间复杂度O(1) 复杂度(空间/时间): 2.希尔排序: 时间复杂度 O(N^1.3~ N^2) 空间复杂度为O(1) 复杂度(空间/时间&#…

基于蝠鲼觅食优化的BP神经网络(分类应用) - 附代码

基于蝠鲼觅食优化的BP神经网络(分类应用) - 附代码 文章目录 基于蝠鲼觅食优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蝠鲼觅食优化BP神经网络3.1 BP神经网络参数设置3.2 蝠鲼觅食算法应用 4.测试结果…

pytorch实现经典神经网络:VGG16模型之初探

文章链接 https://blog.csdn.net/weixin_44791964/article/details/102585038?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169675238616800211588158%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id16967523861680…

【Overload游戏引擎分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码,可以从视图投影矩阵逆推出摄像机的视锥体,本文来分析一下原理 一、平面的方程 视锥体是用平面来表示的,所以先看看平面的数学表达。 平面方程可以由其法线N(A, B, C)和一个点Q(x0,…

Django实战项目-学习任务系统-用户登录

第一步:先创建一个Django应用程序框架代码 1,先创建一个Django项目 django-admin startproject mysite将创建一个目录,其布局如下:mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py 2,再创建一个…

开发餐饮类私域流量是开发应用APP还是小程序还是低代码跨平台APP分析他的利与弊

在开发餐饮类应用程序时,我们需要先了解市场需求,定义目标受众,并提供独特的功能。个人感觉我们提供周围的在线订购、外卖服务、用户评价等功能,以吸引用户。同时,设计用户习惯的界面,使用户轻松选择自己的…

Java使用Hutool工具包将汉字转换成汉语拼音

主题:使用Java将汉字转换成拼音 介绍 在Java开发中,有时候我们需要将汉字转换成拼音,以方便进行数据处理、搜索和排序等操作。本文将介绍如何使用Hutool和Pinyin4j这两个Java库来实现汉字转拼音的功能。 依赖库介绍 在开始之前,…

mc我的世界云服务器租用价格表

开Minecraft我的世界服务器配置怎么选择?10人以内玩2核4G就够用了,开我的世界服务器选择轻量应用服务器就够了,轻量CPU采用至强白金处理器,大型整合包一般1.12版本的,轻量2核4G配置都差不多的,如果是1.16的…

在线免费无时长限制录屏工具 - 录猎在线版

需要录屏的小伙伴注意啦,想要长时间录制又不想花钱的,可以看下这款在线版录屏软件 —— 录猎在线版,一个录屏软件所需要的基本功能它都有,设置录制范围、录制的声音来源、摄像头也能录制的。同时它是支持Windows和Mac系统的&#…

PyCharm搭建Scrapy环境

Scrapy入门 1、Scrapy概述2、PyCharm搭建Scrapy环境3、Scrapy使用四部曲4、Scrapy入门案例4.1、明确目标4.2、制作爬虫4.3、存储数据4.4、运行爬虫 1、Scrapy概述 Scrapy是一个由Python语言开发的适用爬取网站数据、提取结构性数据的Web应用程序框架。主要用于数据挖掘、信息处…

【计算机网络】-基础知识

1.计算机网络(计算机技术通信技术)的结合 ICTITCT 2.计算机分类1:通信子网(通信节点、通信链路),资源子网(PC、服务器,类似终端节点) 分类2:网络的结构,例如…

Mac电脑交互式原型设计 Axure RP 8汉化最新 for mac

Axure RP 8是一款专业且快速的原型设计工具,主要用于定义需求、规格、设计功能和界面。这款工具主要适用于用户体验设计师、交互设计师、业务分析师、信息架构师、可用性专家和产品经理等职业。 Axure RP 8的主要特性包括能够快速设计出应用软件或Web网站的线框图、…

RustDay01——运行在线GitHub Rust环境

1.跟着教程进入GitHub教室 2. 授权确认后进入学习空间 3.点击链接进入在线平台 4.添加本机密钥对到GitHub 5. 安装依赖 我们使用在线的Linux试验平台,就自动帮我们clone好了仓库 我们直接在仓库目录执行 cargo install --force --path . 安装依赖 PS:其实刚开始…

uni-app:实现简易自定义下拉列表

效果 代码 <template><view><view class"dropdown-trigger" tap"showDropdown">{{ selectedItem }}</view><view class"dropdown-list" v-if"showList"><view class"dropdown-item" v-f…

电容笔值不值得买?ipad上好用的电容笔推荐

由于大多数学生都没有稳定的工作&#xff0c;在购买产品的时候&#xff0c;往往会选择一些比较经济实惠的产品。随着ipad的版本更新&#xff0c;以及出现更多的功能&#xff0c;它将逐渐进入我们的生活与工作。由于电子产品的不断升级&#xff0c;不断改进&#xff0c;对电容笔…

Spring WebClient 基于响应式编程模型的HTTP客户端

一、简介 WebClient是一个非阻塞的、可扩展的、基于Reactive Streams规范的HTTP客户端。它提供了一种简洁的方式来进行HTTP请求&#xff0c;并且可以很好地与其他Spring组件集成。WebClient支持同步和异步操作&#xff0c;使得它非常适合用于构建响应式应用程序。 WebClient允…

Unity ToLua热更框架使用教程(1)

从本篇开始将为大家讲解ToLua在unity当中的使用教程。 Tolua的框架叫LuaFramework&#xff0c;首先附上下载链接&#xff1a; https://github.com/jarjin/LuaFramework_UGUI_V2 这个地址的是UGUI的。 下载完之后导入项目&#xff0c;首先&#xff0c;我们要先让这个项目跑起…

BRISK: Binary Robust Invariant Scalable Keypoints全文翻译

pdf链接&#xff1a;https://pan.baidu.com/s/1gFAYMPJStl4cF0CswY9cMQ 提取码&#xff1a;yyds 摘要 从图像中有效和高效地生成关键点是文献中深入研究的问题&#xff0c;并形成了许多计算机视觉应用的基础。该领域的领导者是SIFT和SURF算法&#xff0c;它们在各种图像转换下…

为什么说,网络安全工程师是网安行业的天花板?

为什么说&#xff0c;网络安全工程师是网安行业的天花板&#xff1f; 最近看到网上有很多人在问诸如&#xff1a;“怎样成为网络信息安全工程师”等相关问题&#xff0c;甚至还有人说“网络安全工程师已经成为这个行业的天花板”&#xff0c;这可能与近几年网络安全事件频发&a…

深度解析locked勒索病毒,勒索病毒解密,数据恢复

locked勒索病毒曾经消失了一段时间&#xff0c;但是从今年6月份以来&#xff0c;这种类型的勒索病毒又“重出江湖”&#xff0c;被感染的服务器和企业越来越多&#xff0c;这让很多企业和安全运维人员都非常头疼。为了减少这种情况的发生&#xff0c;云天数据恢复中心将对locke…