OSI网络的七层模型
作者:曲明浩
在学习OSI网络七层模型的时候,作为一个新手小白,我看别的大神写的文章都太高端了,什么帧的封装和解封装还有什么端到端的通信,觉得我虽然知道了是这个东西但是总是差点意思,不方便理解内核,简单说就是,挖去窝看了一大圈,没看懂,所以我想把我自己慢慢摸索理解的OSI七层模型的过程分享给大家,当然我所写的所有内容都是基于查资料,自己理解等等方法最后总和写出来的,如果有什么逻辑,内容,结构上的问题,请及时指出,我一定改正。
OSI七层模型分类详解
第一层物理层
第二层数据链路层
第三层网络层
第四层运输层
第五层会话层
第六层表示层
第七层应用层
七层协议的上下层的分类
上下层的分类
上层
低层
小结
设备原理讲解(物理层到网络层)
集线器
二层交换器
三层交换器
三层交换器
路由器
一.OSI七层模型
背景:
20 世纪 70 年代,计算机网络迅速发展,但不同厂商的设备因协议不兼容无法互通。
目标:国际标准化组织(ISO)于 1984 年提出 OSI(开放系统互连参考模型),旨在通过分层设计解决异构网络互联问题。
核心思想:
- 每层独立完成特定功能,层间通过接口交互。
- 下层为上层提供服务,上层无需关心底层实现细节。
现在我们首先单独讲解一下OSI七层模型
1.1第一层物理层
**物理层:**在我们的OSI模型中,物理层就是我们模型的最底层,我来举个例,物理层主要负责处理物理介质上的信号传输,例如:传输原始比特流(0和1);
这时候我们就要问了:托马的,这0,1我知道是二进制,原始比特流又是个什么东西?
我来解释下:原始比特流:原始比特流是由 0 和 1 组成的二进制数字序列,是信息在计算机网络中传输的最基本形式,当然我知道对于我们刚学习的人来说这也是屁话,还是举例!
比如说,你要给朋友发一条信息 “我想吃苹果”。手机或电脑就会把这句话变成由 0 和 1 组成的代码,这些 0 和 1 的组合就是原始比特流。就好像把 “我想吃苹果” 这句话变成了只有计算机能懂的秘密语言,然后通过网络的电线、光纤或者无线信号等,把这些 0 和 1 的代码传给朋友的设备,朋友的设备再把这些 0 和 1 变回 “我想吃苹果” 这句话,他就知道你说什么啦。
(你不需要仔细了解原始比特流到底是个什么,你只要知道这是一种传输的最基本形式就行)
我用我的大白话来通俗点讲这个层次的原理,可能就相当于快递员的推车,只管搬运包裹,不关心内容。
然而化为实例,你将电脑与打印机通过 USB 线连接起来,USB 线就是物理层的一部分。它为电脑和打印机之间提供了数据传输的通道,电脑把要打印的文档数据通过 USB 线传输给打印机。如果 USB 线损坏,打印机就无法接收到电脑发送的打印任务,或者在传输过程中可能会出现数据错误,导致打印出的内容不完整或乱码。我们的这些连接就是要让原始比特流流进下一层进行下一步操作。
当然在这同时要注意,物理层还包含了对传输信号的编码、调制,以及传输介质的电气特性(比如电线的电阻、电容等参数)、机械特性(如接口的形状、尺寸)等方面的规定,这些共同保障比特流能正确、高效地传输(所谓的硬件的硬性要求)。
最后,我们列出常见的物理层的设备和实例:网线、光纤、WiFi无线电波、电缆。
1.2第二层数据链路层
现在我们要唠一唠这个第二层——数据链路层。
我们刚才讲到通过物理层处理好了介质成功的把我们的原始比特流(一个0和1组成的二进序列,就是信息流)传入我们数据链路层内部了,我们现在就要讲数据链路层的作用。
数据链路层:
刚才说了,物理层的成功连接导致传了一大堆01的二进制数据进入我们数据链路层,但是这不扯呢吗?堆一大堆数放这给谁看,谁看也看不懂啊,所以我们找来了数据链路层对这些数据进行加工和优化,方便我们下一层确认,我们详细来看。
在最开始的时候,这个分组非常乱,每个公司都有一套自己的分组方法,但是总不能说你用你的,我用我的?这谁受了,所以我们规定了这个大众使用的核心方法,以太网协议(当然还有其他协议,主要是以太网我们就讲这个)
现在我们来讲讲这传入的一大堆数据的加工问题该怎么办,在以太网协议内部,一组电信号称为一个“帧”。(我们都知道影视作品,短视频等日常生活中的视频文件的最小单位是一帧,也就是一个画面,而在我们的数据链路层内部,这个帧其实也大差不差,这个帧是里面的加工得到的一个数据包。)
我们现在来解析一下这个帧的内容:
每一个数据帧都包括帧头,数据和帧尾部组成
帧 = 帧头 + 数据 +帧尾
我知道这个讲法,看我们把这三个部分以此拆解来详细看它们的组成
帧头:
帧头 = 前导码 + 帧开始定界符 + 目标MAC地址 + 类型/长度
这些成分咱们一个一个唠,不着急。
前导码:
定义:前导码是以太网帧中的起始部分,主要功能是实现接收方的时钟同步,确保数据的准确接收
-
实现时钟同步:
以太网中数据以比特流形式在物理介质上传输,发送方和接收方需要在时钟频率上保持一致,才能正确地发送和接收数据。前导码由
10101010
的交替序列组成,这种特定的比特模式能为接收方的时钟电路提供一个清晰的信号,使其通过识别该序列,与发送方的时钟信号进行同步,锁定到正确的时钟频率上。由于数据传输过程中可能存在信号延迟、干扰等情况,接收方的时钟可能会与发送方的时钟产生偏差。前导码持续的 7 字节(56 位)长度,为接收方时钟同步提供了足够的时间,使其能够稳定地调整时钟相位,确保在后续数据接收过程中,能够准确地在每个比特的中间进行采样,以正确解读数据。
-
告知接收方准备接收数据:
前导码的存在就像一个 “预告信号”,向接收方表明即将有数据帧到来。接收方的物理层电路在检测到前导码的特定模式后,会启动一系列的准备工作,如激活接收电路、初始化数据缓存等,为后续接收和处理帧中的有效数据做好准备。
-
实现比特同步:
它可以帮助接收方确定每个比特的起始和结束位置。通过识别前导码的比特模式,接收方能够建立起对每个比特的时间基准,从而准确地将接收到的信号解析为一个个的比特,进而组合成字节和更高层的数据单元。
简单来说下:这个前导码就是给个时间例子,这就是所谓的提供时钟同步信号,这样接受和发送两者的时钟就有的参考了,可以依照我们的时钟同步信号,再就是拖延下时间给个信号,让接受者知道有信号来了也同时能拖延下时间。
标准形式
- 长度:7 字节(56 位)。
- 二进制模式:由交替的
1
和0
组成,即10101010
重复 7 次
一般大多数情况下,前导码都是固定的,所以前导码就给这个主要的标准形式。
帧开始定界符:
- 标志帧的开始:它是以太网帧中紧跟在前导码之后的一个特殊字节,值为
10101011
。前导码的作用是使接收方的时钟与发送方的时钟同步,而 SFD 则明确地指示接收方接下来的内容就是实际的帧数据,告知接收方从该位置开始对后续的比特流进行解析,以获取帧中的地址、数据等信息。 - 区分数据与前导码:由于前导码也是由
1
和0
组成的特定序列,SFD 的独特模式(最后两位为11
,不同于前导码的10
交替)能够让接收方清楚地识别出前导码的结束和真正数据的开始,避免将前导码的部分误当作数据进行处理,确保接收方准确地定位到帧的起始位置,从而正确地解析整个帧。 - 辅助接收方同步:在某种程度上,SFD 也有助于接收方进一步确认同步状态。当接收方检测到 SFD 的特定模式时,不仅意味着帧数据的开始,也可以作为对之前时钟同步效果的一种验证。如果接收方能够正确识别出 SFD,说明时钟同步基本成功,后续可以按照同步的时钟来准确接收和处理帧数据。
简单来说,前导码的跟屁虫,形式是10101011
,看到这个就标志可以对比后续的比特流,可以获取帧地址和信息等,结尾的11
也标志了真正数据开始了。
标准形式
- 形式:一个字节(8 位)的二进制数,其值为
10101011
。
目标MAC地址:
我先来讲下目标MAC地址的作用:
- 精准定位目标设备:在局域网中,每台设备的网络接口都有唯一的 MAC 地址,如同现实世界中的家庭住址。当数据帧在局域网中传输时,目标 MAC 地址能引导数据帧准确找到接收方设备。例如,在一个办公室网络中,一台电脑向打印机发送打印任务,数据帧中的目标 MAC 地址就是打印机网络接口的 MAC 地址,这样数据就能准确无误地到达打印机。
- 数据帧过滤与接收决策:网络中的设备在接收到数据帧时,会将帧中的目标 MAC 地址与自身的 MAC 地址进行比对。只有当两者匹配时,设备才会接收并处理该数据帧;若不匹配,设备通常会丢弃该数据帧。这一机制确保了设备只接收发送给自己的数据,避免了网络带宽的浪费和数据处理的混乱。
- 构建网络拓扑与路径选择:网络设备如交换机,通过学习和记录网络中各设备的 MAC 地址及连接端口,构建起网络拓扑结构。当交换机收到一个数据帧时,会根据目标 MAC 地址以及自身保存的 MAC 地址表,决定从哪个端口转发数据帧,以实现数据在局域网内的高效传输。
大概知道了MAC地址的使用我们来讲下MAC地址是哪来的,到底是个什么东西:
MAC 地址(Media Access Control Address),也称为物理地址或硬件地址,通常是由设备制造商在生产过程中烧录到网络设备的网卡芯片中的,也可由用户根据需求进行设置。具体如下:
- 制造商分配:
- IEEE 注册:IEEE(电气和电子工程师协会)负责管理和分配 MAC 地址的块。制造商需要向 IEEE 购买一段地址范围,这些地址块具有全球唯一性。
- 芯片烧录:制造商在生产网络设备(如网卡、路由器等)时,会将分配到的 MAC 地址烧录到设备的网卡芯片中。每个设备都有一个唯一的 MAC 地址,就像每个人都有一个唯一的身份证号码一样。
- 用户自定义:在某些情况下,用户也可以手动更改设备的 MAC 地址,这种方式被称为 “MAC 地址欺骗” 或 “MAC 地址克隆”。例如,在一些网络环境中,用户可能需要将自己设备的 MAC 地址设置为与另一台设备相同,以绕过某些网络限制或实现特定的网络配置。不过,这种方式需要用户具备一定的网络知识和操作技能,并且在某些情况下可能会违反网络使用规定或法律法规。
讲到了帧里面的MAC地址我们就不得不讲下帧的三种发送方式:
- 单播:这是最常见的方式,帧的目标 MAC 地址是特定设备的 MAC 地址。发送方仅向该特定目标设备发送数据帧,只有目标设备会接收并处理此帧,其他设备则会忽略。例如,一台电脑向另一台指定的电脑发送文件时,就使用单播方式,数据帧精准地发送到目标电脑的 MAC 地址所标识的设备。举个例子,其实就相当于
- 广播:此时帧的目标 MAC 地址为广播地址(如以太网中为 FF:FF:FF:FF:FF:FF)。发送方发送的帧会被局域网内的所有设备接收和处理。常用于网络中的一些初始化过程或需要向所有设备发送相同信息的情况,比如网络中的设备请求获取 IP 地址时,会通过广播帧发送请求。
- 多播:帧的目标 MAC 地址是多播地址,它标识了一组特定的设备。只有加入了相应多播组的设备才会接收和处理该帧,而其他设备则忽略。多播常用于一些需要向特定群组设备发送数据的场景,如视频会议中,发送方可以通过多播方式将视频数据发送给参与会议的多个设备。
其实我用自己的白话翻译下就是:
- 单播:可以把单播想象成在一个大型办公楼里,你给特定的一个同事送一份文件。你知道这个同事在哪个办公室(相当于知道目标设备的 MAC 地址),你直接把文件送到这个同事那里,其他同事不会收到这份文件。在网络中,比如你用即时通讯软件给某个好友发送消息,这条消息形成的数据帧的目标 MAC 地址就是你好友设备的 MAC 地址,只有你好友的设备会接收和处理这个数据帧,网络中的其他设备对这个数据帧是不做处理的。
- 广播:就像在一个学校里,学校通过校园广播系统发布通知,学校里的所有学生(相当于局域网内的所有设备)都能听到这个通知。在网络中,比如网络设备在进行 DHCP(动态主机配置协议)获取 IP 地址时,设备会发送广播帧,帧的目标 MAC 地址是广播地址(FF:FF:FF:FF:FF:FF),局域网内的所有设备都会收到这个帧,但只有 DHCP 服务器会对这个帧进行响应,其他设备虽然收到了,但不会进行实际处理,只是知道有这样一个广播帧存在。
- 多播:比如学校里有一个兴趣小组(相当于一个多播组),学校向这个兴趣小组发布活动通知。只有兴趣小组的成员(加入了相应多播组的设备)会收到这个通知,其他非兴趣小组成员的学生(未加入多播组的设备)不会收到。在网络中,像在线视频会议,会议的组织者通过多播方式发送视频数据,只有参加这个会议的成员(加入了该多播组的设备)能接收到这些视频数据,而没有加入会议的设备是接收不到的。
长度/类型:
-
长度:(是指“长度/类型的这个结构的长度,不是单独说长度”)该字段占 2 个字节(16 位)。
-
表示内容:
- 当数值小于等于
0x05DC
(即 1500 十进制)时,代表的是数据字段的长度,也就是帧中数据部分的字节数。比如,若该字段值为0x05DC
,则表示数据字段长度为 1500 字节,这也是以太网帧中数据字段的最大长度(不包括帧头和帧尾)。 - 当数值大于
0x05DC
时,该字段表示的是上层协议的类型。例如,0x0800
表示上层协议是 IP 协议,0x0806
表示是地址解析协议(ARP)等。
- 当数值小于等于
这里我们打开详细讲下,因为我们要知道,“长度/类型”这个成分是帧头的最后一个数据,“长度/类型”指的是我们后面的数据内容,这个字段的信息都是说后面数据的信息的。
我们可以看到这个字段的数据大小 ≤ 0x05DC
(1500 十进制) 时,表示的是数据字段的字节长度。我们来详细讲讲这个长度模式。
长度模式(值 ≤ 1500)
当该字段的值 ≤ 0x05DC
(1500 十进制) 时,它表示数据字段的字节长度,遵循以下规则:
-
数值直接映射字节数
- 例如,若字段值为
0x00C8
(200 十进制),则表示数据字段包含 200 字节。 - 最小值为 46 字节(以太网帧的最小数据长度,不足时需填充),最大值为 1500 字节(MTU,最大传输单元)。
- 例如,若字段值为
-
填充机制
- 若数据实际长度不足 46 字节(如 ARP 请求通常为 28 字节),则需在数据后添加填充(Padding)使其达到 46 字节,此时字段值仍为实际数据长度(如 28),但帧总长度会因填充而增加。
-
帧总长度计算
- 帧总长度 = 前导码(7B) + SFD(1B) + MAC 地址(12B) + 类型 / 长度(2B) + 数据字段(≤1500B) + FCS(4B)。
- 当数据字段为 1500 字节时,帧总长度为 1526 字节。
当这个字段的值 >
0x05DC
(1500 十进制)时,表示上层协议类型,我们叫这个模式为类型模式。
举几个常见的协议类型值:
十六进制值 | 十进制值 | 协议类型 |
---|---|---|
0x0800 | 2048 | IPv4 |
0x0806 | 2054 | ARP(地址解析协议) |
0x86DD | 34525 | IPv6 |
0x8100 | 33024 | IEEE 802.1Q VLAN 标签 |
0x88CC | 35020 | LLDP(链路层发现协议) |
0x88E5 | 35045 | IEEE 802.1X 认证 |
长度类型这个字段的范围:对应的十进制范围是0到65535。
其中:
- 0−0x05DC(即0−1500十进制):表示数据字段的长度。
- 0x05DD−0xFFFF(即1501−65535十进制):表示上层协议的类型。
数据字段
- 长度限制:数据字段的长度通常在 46 字节到 1500 字节之间。这是因为以太网帧有最小和最大长度限制,除去帧头、帧尾等固定部分,留给数据字段的长度就是这个范围。当数据实际长度小于 46 字节时,需要进行填充,以达到最小长度要求,确保帧的正常传输和处理。
- 数据内容:数据字段包含了上层协议传递下来需要通过网络传输的数据。这些数据的格式和含义取决于上层协议,比如如果上层是 IP 协议,那么数据字段中就包含 IP 数据包,其中有源 IP 地址、目标 IP 地址、数据包的内容等信息;如果是 ARP 协议,数据字段则包含用于地址解析的相关信息,如硬件地址、协议地址等。
- 与其他字段的关系:数据字段的长度由帧头中的类型 / 长度字段来指示(当该字段值小于等于 0x05DC 时)。接收方根据类型 / 长度字段的值来确定从帧中提取数据字段的长度,从而准确解析出有效数据。同时,数据字段后面紧跟着帧校验序列(FCS)字段,用于对帧进行差错检测,以确保数据传输的正确性。
帧尾
帧尾通常指的是以太网帧校验序列(FCS)字段,主要用于检测数据传输过程中是否错误。
-
长度:一般为 4 个字节。
-
计算方式:FCS 是通过对帧中的数据部分(包括帧头和数据字段)进行循环冗余校验(CRC)计算得出的一个值。发送方在发送帧之前,会根据特定的 CRC 算法对帧的相关部分进行计算,生成 FCS,并将其附加到帧的末尾。接收方在接收到帧后,会采用相同的 CRC 算法对收到的帧(除 FCS 字段外)进行重新计算,并将计算结果与帧中携带的 FCS 进行比较。
这个地方我就不多讲了,这个地方计算方法我也没怎么看懂(狗头保命)。
1.3第三层网络层
网络层主要是负责网络中数据的路由、寻址和传输控制等功能,来实现不同设备的通信。
核心功能:为不同的网络中的设备提供端到端的逻辑通信
现在我们分解网络层的核心功能依次讲解
1.3.1逻辑寻址:
通常在网络初始化或设备接入网络时进行,为设备分配 IP 地址等逻辑地址,为后续的数据传输提供标识基础,在数据传输过程中,逻辑寻址信息也会被不断使用和验证,但它不是一个在每次数据传输时都严格先于其他功能执行的步骤。
我们详细来解释下原理:
地址分配:网络中的设备需要有唯一的标识,逻辑寻址就是给每个设备分配这样一个标识,即逻辑地址。
IP地址:为每个设备分配唯一的逻辑地址(如IPv4/IPv6),与物理地址(MAC)解耦。
打开来说:
IP 地址是唯一的逻辑地址
-
唯一性:在一个特定的网络环境中,每个设备都需要有一个唯一的标识,以便数据能够准确地发送到目标设备。就像现实生活中每个家庭都有一个唯一的地址一样,网络中的设备也通过 IP 地址来被唯一识别。例如,在互联网上,任何两台设备的 IP 地址都不能相同,否则就会出现地址冲突,导致数据传输错误。
-
逻辑地址:IP 地址是一种基于网络层的逻辑编址方式,它是由网络管理员或互联网服务提供商(ISP)根据一定的规则分配给设备的。它不像物理地址那样与设备的硬件直接绑定,而是可以根据网络的需求和管理策略进行灵活分配和更改。例如,当一台设备从一个网络移动到另一个网络时,它的 IP 地址可能会发生变化,但设备本身的硬件并没有改变。
-
IPv4
是互联网早期使用的主流网络层协议,1981 年正式标准化(RFC 791),采用32 位地址,是当前互联网的基础协议之一,但面临地址耗尽、安全性不足等问题。 -
IPv6
是为解决 IPv4 局限性而设计的下一代互联网协议,1998 年标准化(RFC 2460),采用128 位地址,旨在提供更大的地址空间、更高效的路由、更强的安全性和对移动网络的支持。
特性 | IPv4 | IPv6 |
---|---|---|
地址长度 | 32 位(2³² ≈ 43 亿个地址) | 128 位(2¹²⁸ ≈ 3.4×10³⁸个地址) |
地址表示 | 点分十进制(如:192.168.1.1) | 冒号十六进制(如:2001:0db8:85a3:0000:0000:8a2e:0370:7334),支持压缩写法(如:2001:db8::1) |
地址耗尽问题 | 已耗尽(通过 NAT、私有地址缓解) | 理论上地址无限,彻底解决地址短缺问题 |
刚才在上面解释完了物理地址MAC地址的意思,记忆不清的可以往上翻找一下,解释一下解耦的意思
- 解耦的意义:IP 地址与 MAC 地址的解耦意味着它们在功能和管理上是相互独立的。这种解耦使得网络的设计和管理更加灵活。网络层可以基于 IP 地址进行路由选择和数据包转发,而不必关心设备的具体物理连接和 MAC 地址。例如,当网络拓扑发生变化或设备移动到不同的子网时,只需要更新 IP 地址的相关信息,而不需要改变设备的 MAC 地址。同时,在数据传输过程中,网络层使用 IP 地址来确定数据包的源和目的节点,而数据链路层则使用 MAC 地址来实现本地网络中的数据帧传输。通过地址解析协议(ARP)等机制,可以在 IP 地址和 MAC 地址之间进行动态转换,实现不同层次地址之间的映射,从而确保数据能够在网络中正确传输。
通俗一点来说逻辑地址IP和物理地址MAC地址:把 IP 地址和 MAC 地址比作 “家庭地址” 和 “身份证号”
- MAC 地址:就像每个人的身份证号,是刻在网卡(网络接口)上的 “物理身份”,出厂时就固定了,一辈子不变(比如:00-1A-2B-3C-4D-5E)。
- IP 地址:就像你现在的 “家庭地址”,是网络给你临时分配的 “逻辑位置”,可以随时变化(比如:你住在 “北京市朝阳区 1 号”,搬家后地址变成 “上海市浦东新区 2 号”)。
解耦的核心:身份证号(MAC)和家庭地址(IP)是独立的 —— 你的身份证号不会因为搬家(换网络)而改变,家庭地址可以随便改,两者互不影响。
1.3.2路由:
路由与路由选择
**路由**是指指导数据在网络中传输的过程,其核心是**路由选择**,即根据数据包的目的地址,从源到目的地之间选择一条最佳路径。这一过程如同快递运输,需规划从发货地到收货地的最优路线,确保数据包高效、准确送达。例如,在复杂的互联网中,一个数据包从你的电脑发往百度服务器,需经过多个网络节点(路由器),路由选择就是确定每一步的转发方向。路由协议:
路由协议是两个路由器的沟通“语言”,以此来生成更新路由表,可分为静态路由和动态路由两类,这里插讲一下路由表是什么东西:路由表是存储在路由器或联网计算机中的电子表格(文件)或类数据库,是网络设备转发数据的关键依据。它存储着指向特定网络地址的路径信息(部分还记录路由度量值,如跳数、带宽等),包含网络拓扑相关信息。路由器等设备通过查询路由表,为接收到的数据包规划最佳传输路径。
(通俗讲)路由表如同网络设备的 “导航地图”。就像开车时导航会根据起点、终点规划路线,路由表帮助网络设备判断数据包的目标位置,并选择最佳转发路径。静态路由表类似提前设定好的固定路线(如每天上下班走同一条路),而动态路由表则像实时导航(根据交通状况动态调整路线),确保数据在复杂的网络环境中高效、准确地传输。
静态路由
-
原理:由网络管理员手动配置路由表,明确告知路由器 “到某目标网络,下一跳该怎么走”。
适用场景:小型、结构简单且稳定的网络。例如,一个只有几台设备的小办公室,网络拓扑几乎不变,手动配置静态路由即可满足需求。
动态路由
- 原理:路由器通过运行动态路由协议,自动学习网络拓扑变化并更新路由表。
RIP(Routing Information Protocol,路由信息协议):
- 核心:基于 “跳数”(经过的路由器数量)选择路径,跳数越少路径越优(最大跳数为 15,超过则视为不可达)。
- 适用场景:小型网络。例如,一个只有两三个子网的小型企业网络。
OSPF(Open Shortest Path First,开放最短路径优先):
- 核心:基于 “链路状态”(如带宽、延迟、链路是否可用),通过 Dijkstra 算法计算出最短路径树,生成路由表。
- 适用场景:中大型企业网络或园区网。例如,大型校园网中,不同教学楼的子网通过 OSPF 动态调整路由。
BGP(Border Gateway Protocol,边界网关协议):
- 核心:用于不同自治系统(AS,如不同运营商网络)之间的路由交换,基于策略(如带宽、成本、运营商间的协议)选择路径。
- 适用场景:互联网骨干网,如中国电信与中国联通的网络之间通过 BGP 交换路由信息。
讲了路由我们知道路由器是第三层的设备,现在讲下路由和路由器的区别和联系
定义
- 路由:是指在网络中确定数据从源节点到目标节点传输路径的过程,涉及到路径选择、数据包转发等一系列操作,它是一种网络技术和功能的抽象概念。
- 路由器:是一种网络设备,用于连接多个不同的网络,并根据路由表转发数据包,实现网络之间的数据通信和路由功能,是实实在在的物理设备。
功能特性
- 路由:主要功能是路径选择和数据包转发决策,通过路由协议学习网络拓扑信息,构建和维护路由表,以确定最佳传输路径。
- 路由器:除了具备路由功能外,还具有网络连接、数据处理、网络安全防护(如访问控制)、NAT(网络地址转换)等功能,它是实现路由功能的具体设备,同时还承担着更多网络管理和控制的任务。
表现形式
- 路由:通常以软件算法、协议和路由表等形式存在于网络设备(如路由器、三层交换机等)中,通过这些机制来实现路径选择和数据转发。
- 路由器:以硬件设备的形式存在,有具体的物理外观,包括多个网络接口、处理器、内存等组件,通过这些硬件组件协同工作来实现各种网络功能。
联系
- 路由器是实现路由功能的载体,路由功能依赖于路由器等网络设备来实现。路由器通过运行路由协议,学习和维护路由信息,根据路由算法进行路径选择,从而实现数据包的正确转发,完成路由过程。
1.3.3分组转发
网关
在讲这个功能之前我要先讲一下网关的定义
网关是连接两个或多个不同网络的设备,充当 “网络桥梁”,实现不同网络之间的数据传输和协议转换。
- 核心作用:让不同 “语言”(协议)、不同 “规则”(网络架构)的网络能够互相通信。
- 类比理解:比如你从中国去美国,需要通过海关(边界),海关会检查你的证件、转换你的通行规则(签证、语言等)。网关就是网络世界的 “海关”,连接两个不同的网络边界。
网关的核心功能
- 协议转换(最关键功能)
- 不同网络可能使用不同的通信协议(如局域网用 TCP/IP,工业网络用 Modbus,物联网设备用 Zigbee),网关能将数据从一种协议 “翻译” 成另一种协议。
- 例子:家里的路由器(常作为网关)将局域网内设备的 TCP/IP 数据,转换为互联网的标准协议,让设备能访问外网。
- 数据转发与路由
- 接收来自一个网络的数据,根据目标地址判断转发到哪个网络,并选择最佳路径。
- 类似快递中转站:收到包裹(数据)后,根据收件地址(目标网络),决定走哪条路(路由)送到下一个站点(下一个网络)。
- 地址转换(NAT 功能)
- 最常见场景:家庭或企业网络中,网关通过网络地址转换(NAT),让多个设备共享一个公网 IP 访问互联网。
- 例如:家里 5 台设备都用私有 IP(如 192.168.1.x),网关将它们的请求统一转换为一个公网 IP(如运营商分配的 202.100.1.1)发送到互联网,返回的数据再按设备区分。
- 最常见场景:家庭或企业网络中,网关通过网络地址转换(NAT),让多个设备共享一个公网 IP 访问互联网。
这个详细打开讲,怕难以理解。
在家庭或企业网络中使用 NAT 时,内部设备使用私有 IP 地址(如 192.168.1.x),这些私有 IP 地址在局域网内是唯一的,但在互联网上是不可路由的。网关(通常是路由器)通过 NAT 功能,将内部设备发送到互联网的数据包中的源 IP 地址替换为公网 IP 地址(如运营商分配202.100.1.1),同时记录下内部设备的私有 IP 地址和端口号等信息。
当互联网上的服务器返回数据时,它会将数据发送到网关的公网 IP 地址。网关接收到数据后,根据之前记录的信息,将数据包中的目的 IP 地址和端口号转换回对应的内部设备的私有 IP 地址和端口号,然后将数据转发给相应的内部设备。
所以,NAT 实际上是在数据包进出局域网时,对 IP 地址和端口号进行转换和映射,使得多个内部设备能够共享一个公网 IP 地址访问互联网,同时保证数据能够正确地在内部设备和互联网之间传输,而不是简单地用新 IP 地址代替原来的 IP 地址。它起到了隐藏内部网络结构、节省公网 IP 地址资源以及在一定程度上提高网络安全性的作用。
再举个例子详细讲讲:
- 手机访问网站:
手机(192.168.1.100)向网站(假设 IP 地址为 103.100.1.2)发送请求。手机将数据包发送给网关(路由器),数据包的源 IP 地址是 192.168.1.100,目的 IP 地址是 103.100.1.2。
网关接收到数据包后,进行 NAT 操作。它将数据包的源 IP 地址替换为自己的公网 IP 地址 202.100.1.1,并在 NAT 表中记录下内部设备(192.168.1.100)和端口号等信息,然后将数据包发送到互联网上的网站(103.100.1.2)。 - 网站响应手机请求:
网站(103.100.1.2)接收到请求后,将响应数据包发送给网关(202.100.1.1)。响应数据包的源 IP 地址是 103.100.1.2,目的 IP 地址是 202.100.1.1。
网关接收到响应数据包后,根据 NAT 表中的记录,将数据包的目的 IP 地址转换为手机的私有 IP 地址 192.168.1.100,然后将数据包转发给手机。 - 电脑和智能电视的情况类似:
电脑(192.168.1.101)和智能电视(192.168.1.102)在访问互联网时,网关同样会进行 NAT 操作。网关会为每台设备维护不同的 NAT 表项,确保数据能够正确地在内部设备和互联网之间传输。
多个内部设备(手机、电脑、智能电视)共享一个公网 IP 地址(202.100.1.1)访问互联网,网关通过 NAT 功能对数据包的 IP 地址和端口号进行转换和映射,实现了内部设备与互联网之间的通信。
下面是举例显示的NAT表:
内部设备(私有 IP: 端口) | 网关(公网 IP: 端口) | 目标设备(目标 IP: 端口) | 协议 |
---|---|---|---|
192.168.1.100:5000 | 202.100.1.1:8080 | 103.100.1.2:80(假设网站服务端口为 80) | TCP(假设手机访问网站使用 TCP 协议) |
192.168.1.101:6000 | 202.100.1.1:8081 | 目标网站 IP(假设为 104.100.1.3):443(假设访问的网站使用 HTTPS 协议,端口为 443) | TCP |
192.168.1.102:7000 | 202.100.1.1:8082 | 目标服务 IP(假设为 105.100.1.4):53(假设智能电视访问的服务使用 DNS 协议,端口为 53) | UDP(假设智能电视访问 DNS 服务使用 UDP 协议) |
分组转发内容:
分组转发是网络层的核心内容,由路由器基于路由表完成数据包的跨网络传输。
路由器工作流程
当路由器收到一个数据包时,工作流程如下:
接收数据包
- 路由器的物理接口通过网络介质(如网线、光纤等)接收来自其他设备的电信号或光信号,并将其转换为数字信号,即数据包。
- 路由器会对接收的数据包进行初步的校验,检查数据包的完整性,如通过检查帧校验序列(FCS)来确保数据在传输过程中没有出现错误。如果数据包校验失败,通常会将其丢弃。
检查目标 IP 地址
- 路由器剥离数据链路层的帧头和帧尾,获取到网络层的数据包,然后从中提取出目标 IP 地址。
- 这个目标 IP 地址是决定数据包最终去向的关键信息,路由器后续的操作都将围绕如何将数据包发送到该目标 IP 地址所对应的设备展开。
查询路由表
- 路由器根据提取的目标 IP 地址,在其内存中存储的路由表中进行查找。
- 路由表是路由器进行路由决策的核心数据结构,它包含了多个路由条目,每个条目通常包含以下信息:
- 目标网络:标识了某个特定的网络地址范围,路由器通过将目标 IP 地址与这些网络地址进行匹配,来确定数据包的目标网络。
- 下一跳地址:指的是数据包在传输过程中要到达的下一个路由器的 IP 地址。当路由器确定了目标网络对应的路由条目后,就会将数据包发往下一跳地址所指定的路由器。
- 接口:表明了路由器应该从哪个物理接口将数据包发送出去,以到达下一跳地址或直接到达目标设备(如果目标设备与路由器在同一网段)。
- 跃点数(Metric):是一个用于衡量到达目标网络的路径代价的数值。不同的路由协议会使用不同的方式计算跃点数,例如距离矢量路由协议可能将经过的路由器数量作为跃点数,而链路状态路由协议则可能综合考虑链路带宽、延迟、可靠性等因素来计算跃点数。路由器在选择路径时,通常会优先选择跃点数较小的路径,认为这样的路径是 “更佳” 的路径。
- 路由器在查询路由表时,会将目标 IP 地址与路由表中的各个目标网络地址进行最长匹配。例如,路由表中有 192.168.1.0/24 和 192.168.1.128/25 两个网络条目,当目标 IP 地址为 192.168.1.130 时,路由器会选择 192.168.1.128/25 这个条目,因为它与目标 IP 地址的匹配程度更高,能更精确地确定目标网络。
这个地方我也解释下——最长匹配原则
-
子网掩码的作用:子网掩码用于确定 IP 地址中网络部分和主机部分的边界。在 CIDR(无类别域间路由)表示法中,如
192.168.1.0/24
和192.168.1.128/25
,后面的数字表示子网掩码中网络位的长度。/24
表示子网掩码为255.255.255.0
,/25
表示子网掩码为255.255.255.128
。子网掩码中网络位为1
的部分对应 IP 地址中的网络部分,主机位为0
的部分对应 IP 地址中的主机部分。 -
网络地址范围:
192.168.1.0/24
代表的网络地址范围是从192.168.1.0
到192.168.1.255
,而192.168.1.128/25
代表的网络地址范围是从192.168.1.128
到192.168.1.255
。可以看出,192.168.1.130
既属于192.168.1.0/24
这个大网络,也属于192.168.1.128/25
这个更小的子网。 -
最长匹配原则:当路由器有多个匹配的路由条目时,会优先选择子网掩码最长(即网络位最长)的条目,因为它所定义的网络范围更精确。
192.168.1.128/25
的子网掩码比192.168.1.0/24
更长,它能更准确地定位到目标 IP 地址所在的子网,所以路由器会选择192.168.1.128/25
这个条目来转发数据包,这样可以确保数据包能够更精准地到达目标网络。**总结一句:**子网掩码越长,代表网络位越长,主机位越短,也就意味着划分出的子网越小,子网内可容纳的主机数量越少,但对 IP 地址的划分也就越精确,所以最长匹配原则就是找子网掩码最长的优先匹配。
选择最佳出口接口
- 当在路由表中找到与目标 IP 地址匹配的路由条目后,路由器会根据该条目中的接口信息确定数据包的出口接口。
- 如果有多条路由条目都匹配目标 IP 地址(例如,通过不同的路由协议学习到了到同一目标网络的不同路径),路由器会比较这些条目的跃点数或其他度量值,选择具有最低跃点数或最优度量值的条目所对应的接口作为出口接口。这一步骤确保了路由器能够选择最有效的路径来转发数据包,以提高网络性能和效率。
通过数据链路层转发到下一跳
- 确定了出口接口后,路由器会将数据包交给数据链路层进行处理。
- 数据链路层会在数据包前面添加新的帧头,帧头中包含了下一跳设备的 MAC 地址(如果是以太网链路)等信息。路由器通过地址解析协议(ARP)来获取下一跳设备的 MAC 地址。ARP 会根据下一跳的 IP 地址在本地的 ARP 缓存中查找对应的 MAC 地址,如果缓存中没有,则会发送 ARP 请求广播来获取。
- 添加完帧头后,数据链路层会将数据包封装成数据帧,并通过选定的出口接口将数据帧发送到物理介质上,以电信号或光信号的形式传输到下一跳设备。下一跳设备收到数据帧后,会重复上述过程,直到数据包最终到达目标设备。
实例讲解
场景:主机 A(172.16.10.10/24,MAC: AA:BB:CC:DD:EE:FF)向主机 B(172.16.20.11/24)发送数据,需通过网关 R(172.16.10.1,MAC: 11:22:33:44:55:66)跨网段转发。
步骤 1:主机 A 封装数据帧(首次通信)
-
判断网段:主机 A 对比自身 IP(172.16.10.10/24)与目标 IP(172.16.20.11/24),发现不在同一网段,需通过网关转发。
-
查找 ARP 表:主机 A 检查本地 ARP 表,发现无网关 R 的 MAC 地址。
-
发送 ARP 请求:主机 A 以广播形式(目标 MAC:
FF:FF:FF:FF:FF:FF
)发送 ARP 请求,询问网关 R 的 MAC 地址。-
数据帧结构:
源 MAC 目标 MAC 源 IP 目标 IP 数据部分 AA:BB:CC:DD:EE:FF FF:FF:FF:FF:FF:FF 172.16.10.10 172.16.20.11 ARP 请求(网关 R 的 IP)
-
-
交换机学习 MAC 地址:
- 交换机收到数据帧后,将源 MAC(AA:BB:CC:DD:EE:FF)与接收端口关联,更新MAC 地址表39。
- 由于目标 MAC 是广播地址,交换机将数据帧转发到所有端口(除接收端口)。
步骤 2:网关 R 响应 ARP 请求
-
网关 R 接收 ARP 请求:网关 R 识别到请求的 IP 是自己的 IP(172.16.10.1),生成 ARP 响应。
-
发送 ARP 响应:网关 R 以单播形式(目标 MAC: AA:BB:CC:DD:EE:FF)回复 MAC 地址(11:22:33:44:55:66)。
-
数据帧结构:
源 MAC 目标 MAC 源 IP 目标 IP 数据部分 11:22:33:44:55:66 AA:BB:CC:DD:EE:FF 172.16.10.1 172.16.10.10 ARP 响应(网关 R 的 MAC)
-
-
主机 A 更新 ARP 表:主机 A 将网关 R 的 IP(172.16.10.1)与 MAC(11:22:33:44:55:66)存入ARP 表8。
步骤 3:主机 A 封装数据帧(正式通信)
-
使用网关 MAC:主机 A 将数据帧的目标 MAC 设置为网关 R 的 MAC,源 IP 和目标 IP 保持不变。
-
数据帧结构:
源 MAC 目标 MAC 源 IP 目标 IP 数据部分 AA:BB:CC:DD:EE:FF 11:22:33:44:55:66 172.16.10.10 172.16.20.11 实际数据
-
-
交换机转发数据帧:
- 交换机查询MAC 地址表,找到目标 MAC(11:22:33:44:55:66)对应的端口,将数据帧转发到网关 R36。
步骤 4:网关 R 处理数据帧(跨网段转发)
-
解封装数据帧:网关 R 剥离二层头部,检查 IP 数据包的目标 IP(172.16.20.11)。
-
查找路由表:
- 网关 R 查询路由表,发现目标网络(172.16.20.0/24)需通过另一接口(假设 MAC: 22:33:44:55:66:77)转发14。
-
重新封装数据帧:
-
网关 R 通过 ARP 协议获取主机 B 的 MAC 地址(假设为 00:11:22:33:44:55),封装新数据帧:
源 MAC 目标 MAC 源 IP 目标 IP 数据部分 22:33:44:55:66:77 00:11:22:33:44:55 172.16.10.10 172.16.20.11 实际数据 -
关键变化:
- 源 MAC 变为网关 R 另一接口的 MAC。
- 目标 MAC 变为主机 B 的 MAC(通过 ARP 获取)28。
- IP 地址保持不变(无 NAT 时)。
-
步骤 5:目标网段交换机转发数据帧
- 交换机学习 MAC 地址:
- 目标网段交换机收到数据帧后,记录源 MAC(22:33:44:55:66:77)与接收端口,更新MAC 地址表39。
- 查询 MAC 地址表:
- 交换机查找目标 MAC(00:11:22:33:44:55)对应的端口,直接转发到主机 B56。
步骤 6:主机 B 接收数据帧
- 检查数据帧:
- 主机 B 验证目标 MAC(00:11:22:33:44:55)和目标 IP(172.16.20.11)匹配,接收数据并剥离二层头部。
- 响应数据(可选):
- 主机 B 若需回复,重复类似流程,但源 / 目标 IP 和 MAC 互换。
关键表格在里面起到的作用
1. ARP 表
-
作用:将 IP 地址映射为 MAC 地址,用于数据帧封装。
-
详解:
实现 IP 地址到 MAC 地址的映射:在以太网中,数据帧的传输需要知道目标设备的 MAC 地址。然而,上层应用通常只知道目标设备的 IP 地址。ARP 表就是用来存储 IP 地址和 MAC 地址对应关系的数据库。当设备需要发送数据到某个 IP 地址时,它会先查询 ARP 表,看是否有对应的 MAC 地址。如果有,就可以直接将数据帧封装上目标 MAC 地址进行发送;如果没有,就会发送 ARP 请求来获取目标 IP 地址对应的 MAC 地址,并在收到响应后将映射关系存入 ARP 表。避免了每次发送数据都要进行 ARP 请求的开销。一旦设备获取并存储了目标 IP 地址与 MAC 地址的映射关系,在一定时间内再次向同一目标 IP 地址发送数据时,就可以直接从 ARP 表中获取 MAC 地址,无需再次发送 ARP 请求,从而加快了数据帧的封装和发送速度,提高了网络通信的效率。
-
参与步骤:
- 步骤 1:主机 A 发送 ARP 请求获取网关 R 的 MAC8。
- 步骤 4:网关 R 发送 ARP 请求获取主机 B 的 MAC。
-
维护设备:主机、路由器48。
2. MAC 地址表
-
作用:记录 MAC 地址与交换机端口的映射,实现局域网内数据帧精准转发。
-
详解:
数据帧转发:在局域网中,交换机等网络设备通过 MAC 地址表来确定数据帧的转发目的地。当交换机收到一个数据帧时,它会检查数据帧中的目的 MAC 地址,然后在 MAC 地址表中查找对应的表项。如果找到匹配的表项,交换机就会根据表项中记录的端口信息,将数据帧从对应的端口转发出去,从而实现数据帧在局域网内的准确传输,通过监听网络中的数据帧来学习连接到各个端口的设备的 MAC 地址。当交换机收到一个源 MAC 地址不在其 MAC 地址表中的数据帧时,它会将该源 MAC 地址与接收该数据帧的端口号对应起来,并添加到 MAC 地址表中。通过这种方式,交换机逐渐建立起整个局域网的网络拓扑信息,知道哪些设备连接到了哪个端口,进而能够更高效地转发数据帧。
-
参与步骤:
- 步骤 1:交换机学习主机 A 的 MAC 与端口39。
- 步骤 3:交换机查询网关 R 的 MAC 对应的端口6。
- 步骤 5:目标网段交换机学习网关 R 的 MAC 与端口。
-
维护设备:交换机35。
3. 路由表
- 作用:根据目标 IP 地址选择转发路径(下一跳和出接口)。
- 详解:
核心功能:当路由器收到一个数据帧时,根据其目标 IP 地址查询路由表,确定转发路径。
- 参与步骤:
- 步骤 4:网关 R 查询路由表确定目标网络的下一跳14。
- 维护设备:路由器17。
数据帧结构变化总结
阶段 | 源 MAC | 目标 MAC | 源 IP | 目标 IP | 关键动作 |
---|---|---|---|---|---|
主机 A 首次通信 | AA:BB:CC:DD:EE:FF | FF:FF:FF:FF:FF:FF | 172.16.10.10 | 172.16.20.11 | 广播 ARP 请求网关 R 的 MAC |
网关 R 响应 ARP | 11:22:33:44:55:66 | AA:BB:CC:DD:EE:FF | 172.16.10.1 | 172.16.10.10 | 单播回复 MAC 地址 |
主机 A 正式通信 | AA:BB:CC:DD:EE:FF | 11:22:33:44:55:66 | 172.16.10.10 | 172.16.20.11 | 数据帧发往网关 R |
网关 R 跨网段转发 | 22:33:44:55:66:77 | 00:11:22:33:44:55 | 172.16.10.10 | 172.16.20.11 | 重新封装数据帧(新 MAC 地址) |
目标网段交换机转发 | 22:33:44:55:66:77 | 00:11:22:33:44:55 | 172.16.10.10 | 172.16.20.11 | 查 |
1.3.4分片与重组
在网络通信中,分片与重组是为解决数据包大小与网络链路层 MTU 不匹配问题而采用的机制,以下是其详细原理:
MTU 限制的原因
- 不同的网络链路层协议对数据帧的大小有不同的限制,这是由链路层的硬件特性和协议规定决定的。以以太网为例,其 MTU 通常为 1500 字节,这是因为以太网的帧结构、传输效率、冲突检测机制等因素综合决定了一个合适的数据帧大小范围,若帧太大则可能导致传输错误或效率低下。
分片原理
- 判断是否需要分片:当路由器接收到一个数据包时,它会检查数据包的大小以及要转发到的下一个网络的 MTU。如果数据包的大小超过了下一个网络的 MTU,就需要进行分片。
- 确定分片大小和数量:路由器会根据 MTU 的大小来确定如何将数据包分割成多个小片段。一般来说,每个分片的大小尽量接近 MTU,但要包含必要的网络层头部信息。例如,一个 4000 字节的数据包要通过 MTU 为 1500 字节的网络,除去 IP 头部(通常为 20 字节),实际可用于数据的长度为 1480 字节,那么这个数据包可能会被分为 3 个分片,前两个分片各包含 1480 字节的数据,第三个分片包含剩余的 1040 字节数据。
- 添加分片标识和偏移量:为了让目标主机能够正确地重组这些分片,路由器会在每个分片的 IP 头部中设置一些特定的字段。其中,“标识” 字段用于标记这些分片属于同一个原始数据包,所有属于同一数据包的分片具有相同的标识值。“标志” 字段中的一位用于表示是否还有更多的分片(除了最后一个分片外,其他分片该位都设置为 1),另一位用于表示该数据包是否允许分片(若不允许分片且数据包超过 MTU,路由器会丢弃该数据包并向源主机发送错误消息)。“片偏移” 字段则表示该分片在原始数据包中的位置,以 8 字节为单位进行计算。例如,第一个分片的片偏移为 0,第二个分片的片偏移为 185(因为 1480÷8 = 185),第三个分片的片偏移为 370。
重组原理
-
基于标识字段收集分片:目标主机在接收到分片后,会根据 IP 头部中的 “标识” 字段来判断哪些分片属于同一个原始数据包。它会在内存中为每个接收到的不同标识的数据包开辟一个缓冲区,用于暂存该数据包的各个分片。
-
按照偏移量排序重组:目标主机根据 “片偏移” 字段来确定每个分片在原始数据包中的顺序。它会将接收到的分片按照片偏移的值进行排序,然后将它们依次拼接起来,还原出原始的数据包。
-
判断重组是否完成:目标主机通过检查 “标志” 字段中的 “更多分片” 位来确定是否已经接收到了所有的分片。当接收到的某个分片的 “更多分片” 位为 0 时,且根据片偏移和数据包大小等信息判断没有缺失其他分片时,就认为该数据包的所有分片都已接收完毕,可以进行重组。如果在一定时间内没有接收到完整的分片,目标主机可能会丢弃已接收的部分分片,并向源主机发送相应的错误消息,提示数据包丢失或重组失败。
路由器不负责重组数据包,而是d将这一任务交给目标主机,这样可以减轻路由器的负担,使其能够更专注于数据包的转发和路由选择等核心功能,提高整个网络的性能和效率。
1.3.5拥塞控制(网络层)
定义:
当网络中数据流量过大,导致路由器 / 交换机的缓冲区溢出、链路带宽被占满、处理能力过载时,网络性能(如延迟、丢包率)会严重下降,这种状态称为拥塞。
拥塞控制是通过一系列机制,监控网络负载、调整数据发送速率或路径,避免或缓解拥塞,确保网络高效稳定运行的技术。
1.4传输层
第四层传输层(Transport Layer),主要负责实现端到端的可靠数据传输,确保数据在不同主机上的应用进程之间准确、有序地传递。传输层的核心功能是弥补网络层(第三层)服务的不足,提供分段与重组、流量控制、错误控制、复用与解复用等机制
第四层传输层的核心TCP和UDP,我们在这里把这两个的功能作用详细打开讲下来理解我们的传输层。
1.4.1 TCP(传输控制协议)
TCP是面向连接的协议,通信前先进行连接,通信结束释放连接,核心是确保数据可靠有序并且不重复的传输
,其次TCP是一个全双工通信,客户端和服务端以下功能都可以实现。
三次握手建立连接
当TCP向服务端发送一次请求数据,去询问下对方,能否和你建立联系,我们称这个数据包为SYN报文,也就是同步标志位。
如果服务端同意我们的连接,就回复我们,这个回复数据称为 SYN+ACK 报文,里面包含确认号和自身初始序号。
我们客户端收到之后就回复ACK报文,这样连接就建立了。
这也就是所谓的三次握手。
我们可能会问,那第三次握手是干什么的,不加不是也可以吗?这是为防止已经失效的请求报文突然传入服务器引起错误——假如我们是两次握手建立连接,那如果有一次的SYN报文发送滞留在过程中了,那样的话,服务端回复我SYN + ACK报文,已经建立完连接了这个时候我们滞留的SYN报文发送过去了,服务端又开了一个新的线程,客户端此时是一个线程;但是服务端是两个线程;这样造成了状态不一致;所以这种情况下,我们最后一步解决了网络通道不可靠的问题。
应用场景:需要高可靠性的场景,如 HTTP/HTTPS、FTP、SMTP、POP3、SSH 等。
分段与重组
MTU 限制:网络层(如 IP)的数据包最大长度(MTU,通常为 1500 字节)限制了单次传输的数据量。若应用层数据(如大文件、长视频流)超过 MTU,需在传输层拆分。
发送端 —— 分段
数据流分割:将应用层的字节流(如 HTTP 请求、文件数据)分割为多个TCP 分段(Segment),每个分段包含:TCP 头部(20~60 字节):包含序号(Sequence Number)、确认号(Acknowledgment Number)、端口号、控制位(如 SYN、ACK)等。数据载荷:不超过 MTU - IP 头部长度(例如,若 MTU 为 1500 字节,IP 头部占 20 字节,则 TCP 数据载荷最大约 1480 字节)。
接收端 —— 重组
TCP协议需要在不可靠的信道上保持可靠的连接,我们刚才知道,数据过多是会被分段的,这也就导致一包数据可能被分成多个包发送,处理丢包问题,乱序问题,TCP协议就为每个连接创建了一个数据缓冲区,建立连接后,第一个字节的序列号为0,依次递增,发送信息时候,从其中取一部分信息组成发送报文。
发送报文:序列号 + 长度 + 数据内容(刚才取的数据)。
当然我们接受到发送报文之后,需要回复确认报文。
确认报文的ACK:ACK = 序列号 + 长度 = 下一包起始序列号
这样一问一答的发送方式,可以确认数据发送正确,当然也可以一次发送多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以发送的数据切割成一系列碎片发送到对端。对端根据序列号和长度重构完整数据,这个区间丢失某些数据包,我们可以重新传输,这样确保数据都完整传入。假如丢了50-100这个区间的数据,则可以回复ACK = 50的数据这样就会重新发送这一段的数据包来进行补全。
四次挥手
处于连接状态的客户端和服务端,都可以发送关闭请求,这时候就需要四次挥手来关闭连接了。
现在假设客户端主动发起关闭请求,就要向服务端发送一包FIN包,表示关闭连接,自己进入中止等待1状态;当服务端收到这个FIN包就回复一包ACK包,表示自己进入关闭等待的状态,客户端进入中止等待2的状态;最后确认状态时候,服务端再发送一包FIN包,进入最后确认状态;客户端接受后发送ACK包进入超时等待状态,客户端经过超时等待之后关闭连接,服务端直接关闭连接,在这里超时等待是因为发送完最后一包ACK之后,防止服务端没有收到连接等待一下,如果没收到最后的ACK,就会重发ACK并刷新超时时间。
1.4.2 UDP(用户数据报协议)
UDP是基于非连接的,发送数据就是简单的把数据包封装一下,然后从网卡发送出去,数据包之间并没有状态上的联系,这种的发送方式性能损耗少,资源占用少,也因为不用握手确定,所以连接速度也快,但是容易丢数据。
应用场景:实时性要求高或容忍一定丢包的场景,如 DNS、DHCP、VoIP(语音通话)、视频流(如 RTMP、RTP)、游戏(如 FPS、实时对战)等。
1.5会话层
OSI第五层会话层是为 应用层实体(进程) 提供建立、管理和终止应用程序之间的会话连接,并协调应用层实体之间的通信。其核心功能围绕 “会话管理” 展开,确保应用程序之间高效、有序地交互。
在这里我们介绍下令牌机制,这种机制是一种用于控制会话双方数据传输权限的逻辑管理机制(类似半双工模式);令牌本质上是一种控制权标记;会话双方持有的一方才能发送数据,另一方只能接受,数据传输结束后就把令牌传递给对方,避免了数据的冲突和混乱。在这里简单理解下,下面我们详细讲讲会话层的主要功能。
1.5.1会话的建立
会话建立的目标是在两个应用进程内部建立逻辑连接(类似打电话的拨号和接通);客户端通过发送会话请求报文给服务端,请求连接。
这里会话请求报文我就不详细打开讲了,成分放在下面了,简单看下:
协议标识 | 协议版本号 | 标识会话层协议的版本,确保通信双方协议兼容 |
---|---|---|
报文类型 | 指出报文功能,如会话建立请求、中断请求等 | |
身份标识 | 会话标识符(Session ID) | 全局唯一标识一次会话,贯穿会话始终 |
端点标识符(Endpoint ID) | 标识会话两端的应用进程,包括客户端和服务器端的相关标识信息 | |
参数协商 | 令牌控制参数 | 约定会话中令牌类型(如发送令牌等)及传递规则,如令牌超时时间等 |
同步点策略 | 定义会话数据分段的同步标记规则,如同步点粒度、同步点模式(自动或手动等) | |
流量控制参数(可选) | 约定会话数据传输的速率限制等相关参数,类似 TCP 的滑动窗口机制相关参数 | |
安全认证(可选) | 认证类型 | 指定认证机制,如口令、数字证书、Kerberos 票据等 |
认证凭证 | 根据认证类型携带对应信息,如哈希密码、票据内容等,通常加密传输 | |
会话恢复(可选) | 恢复点标记 | 若会话中断后重连,携带上次会话的中断点标记,用于确定从何处恢复数据传输 |
恢复时间戳 | 记录原会话中断时间,供服务器验证恢复请求的有效性,防止过期请求 |
1.5.2会话的管理
会话管理是会话建立后的持续状态维护,包括了同步涵盖,对话控制,状态监控三个任务,我们来打开讲讲:
同步点:同步点是数据传输过程中人为设置的“进度标记点”,用于记录传输状态。
同步点的作用:发送方在数据流中插入同步点标记,标记点包含当前传输位置,数据校验值等信息,接受方收到同步点标记后,验证数据完整性,若确认无误返回确认报文,并记录同步点位置,(学会剪辑的应该了解假如我们像剪辑一份作品,我们应该在每个音乐节点做一个标记,这样我们就能知道每部分视频对应什么,每部分音乐处于什么阶段),也就是接收方接受到同步点标记验证数据完整性,数据无误则返回确认报文,并记录同步点位置。
同步点有什么用呢?假如客户端向服务器传输一个10GB 的视频文件,每1GB设置一个同步点,我们传输到3.5GB的时候,网络断开连接了,那我们重新连接之后,文件不会从0开始传输,会直接从3GB的节点开始传,传下面的7GB,不用从0开始传输。
对话控制
**全双工模式:**双方可以自由通信,无需令牌。
半双工模式:依赖令牌机制控制发送权限,发送方发送TOKEN_RELEASE
申请,接收方验证返回,并记录令牌所有人,持有令牌的人发送数据,令牌释放,发送TOKEN_RELEASE
报文,超时释放,超过时间没使用令牌,接收方强行发送TOKEN_RELEASE
。
会话状态维护:会话层会实时跟踪会话的活动状态,更新同步点位置。
1.5.3会话终止
会话终止分为正常终止和异常终止。
正常终止属于主动关闭:一方发送会话终止请求,另一方确认后释放资源。客户端发送SESSION_END
报文,请求终止会话,服务端完成剩余数据处理后返回SESSION_ACK
确认;双方清楚会话状态,关闭传输层连接。
异常终止:触发的条件有很多,类似网络中断、应用崩溃、超时未响应等。
一方检测到异常后,立即发送会话中断报文(如 SESSION_ABORT ),通知对方终止会话;双方丢弃未确认的数据,但记录最后一个有效同步点,以便重启会话时恢复;强制释放资源(如临时文件、内存缓存),避免资源泄漏。
1.6表示层
OSI的第六层为表示层,其的独特价值在于解决不同系统之间数据语义差异的一致性问题。不同系统可能采用不同的编码、格式或加密方式(如 Windows 与 Lunix 的文件系统差异)表示层通过标准化的数据 “中介格式” 实现跨平台兼容,其工作逻辑类似 “翻译”—— 发送方将数据转为标准格式传输,接收方再还原为本地格式。
核心功能:
数据格式转换:语法转换机制:通过抽象语法定义数据的逻辑结构,通过传输语法,定义数据在网络中的二进制表示;字节序处理:解决大端序(Big-Endian)与小端序(Little-Endian)的差异(大端序是 “高位在前”,小端序是 “低位在前”。这种差异会导致不同系统之间数据解析错误)
举例:比如中国人用中文写邮件,法国人用法语写邮件,直接互发会看不懂。表示层就像翻译官,把中文翻译成法文(或反之),让双方能理解。
加密解密:发送方用 AES 加密数据 → 用接收方 RSA 公钥加密 AES 密钥 → 组合传输;接收方用私钥解密 AES 密钥 → 用 AES 密钥解密数据。
举例:写一封秘密信件时,用密码本把内容加密(比如字母替换),对方收到后用同样的密码本解密,防止中途被偷看。
数据压缩:无损压缩与有损压缩的选择:无损压缩:适用于文本、程序文件,确保数据还原无误。有损压缩:适用于多媒体数据,通过丢弃次要信息减少体积。
举例:一大箱衣服时,用真空袋压缩体积,节省邮费;对方收到后再拆开恢复原状
1.7应用层
OSI模型的最顶层第七层,应用层是直接面向应用程序的一层,是用户和网络交互的“接口”,定义了应用程序如何通过网络交互的规则。这个地方纠正一点,我们不能简单认为应用层就是软件,我刚开始觉得就是软件(举例:HTTP 协议规定 “浏览器如何请求网页、服务器如何响应”,但它本身不是软件,而是一套 “通信规范“。)
我们可以把应用层比作“交通规则”,这个规则本身不是交通工具,只是规定了车的行驶方式,应用层则是规定了“通信规则”。
我们接下来讲应用层的核心功能:
1.7.1用户接口与应用交互:
为用户或应用程序提供直接操作的接口,定义了“如何发起网络请求”和“如何处理网络响应”。举例理解下:用户用菜单(接口)选择菜品(如 “请求网页”),服务员(应用层协议)将需求传达给后厨(网络下层)。
**实例:**浏览器点击链接时,应用层通过 HTTP 协议生成请求报文,下层负责传输;收到响应后,应用层解析 HTML 并渲染页面。
1.7.2应用协议实现:
定义不同应用场景的通信协议和规则,确保跨平台互操作性。
我们来举两个例子:
- HTTP/HTTPS(网页浏览):
- 规则:请求 - 响应模式(如 GET 请求格式、200 OK 响应码),数据以 HTML/JSON 格式传输。
- SMTP/POP3/IMAP(电子邮件):
- SMTP 负责发信(如邮件头格式、认证流程),POP3/IMAP 负责收信(如邮件下载策略)。
- FTP/SFTP(文件传输):
- 规定 “如何登录服务器”“如何列出文件”“如何断点续传”(如 FTP 的控制连接与数据连接分离)。
1.7.3数据处理与语义解析:
对应用级数据进行语义解析,提取业务逻辑所需的信息。
内容解析:例如 HTTP 响应中的 HTML 数据,应用层会解析标签(如<div>
)、链接(<a href>
),确定如何展示给用户。业务逻辑处理:例如电商平台的 API 接口,应用层解析 JSON 数据(如{"商品ID":123,"数量":2}
),调用库存查询、下单等逻辑。
1.7.4资源共享与服务发现:
协调网络中的资源访问(如文件、打印机、数据库),并提供服务发现机制。举个例:类似 “图书馆索引系统”:读者通过书名(域名)查书架位置(IP),应用层协议就像索引规则,告诉用户 “资源在哪里、如何获取”。
服务注册与发现:例如 DNS(域名系统):将域名(www.example.com)解析为 IP 地址,本质是 “服务地址的查询服务”。资源访问控制:例如 SMB 协议(Windows 文件共享):规定 “如何访问局域网中的共享文件夹”“权限验证流程”。
1.7.5安全服务与认证
提供应用级的安全机制,包括身份认证、加密传输、权限控制。
HTTPS:在 HTTP 基础上引入 TLS/SSL 加密,确保网页传输数据不被窃听(如网银登录时的加密)。SSH(远程登录):通过密钥认证防止非法登录,加密远程命令传输(如 Linux 服务器的ssh
登录)。OAuth/Token 认证:如微信扫码登录其他 APP 时,应用层协议处理 token 的生成与验证。
1.7.6总结
应用层对用户:“可见的应用入口”(如浏览器、邮件客户端),直接处理用户需求;对网络:将用户需求转化为具体的协议指令,并协调下层完成数据传输。
好了,我们OSI七层模型在这里已经讲完了,以上就是我所有个人对OSI的基本理解了。下面写一些典型的设备以及更多知识拓展。
二.OSI七层协议划分上下层的分层原理
我们要知道,OSI七层模型是基于功能独立性,接口标准化,层次间抽象隔离等核心原则;OSI七层模型同样也是个抽象的概念模型。
在OSI七层模型中,也划分了上下层,这种分类属于一种“功能边界的抽象划分”现在简单讲讲这个七层模型的上下层。
2.1上层
上层(会话层、表示层和应用层,第 5~7 层)
主要负责:解决 “应用如何利用网络完成业务需求”,关注数据的 “语义” 和 “用户交互”,相当于 “搬砖后的装修设计”。
面向应用与用户上层不关心数据在网络中的具体传输细节(如底层如何路由、如何纠错),而是专注于 “应用逻辑”(如文件怎么传、数据怎么显示、会话怎么管理)。
抽象化与标准化通过分层设计,将复杂的应用需求拆分为独立的功能层(会话、表示、应用),各层仅关注自身职责,降低系统耦合度。例如:表示层只处理数据格式,不关心数据的具体用途;应用层只提供服务接口,不关心数据如何加密。
跨系统兼容性上层通过标准化协议(如 HTTP、FTP)和数据格式转换(表示层),解决不同操作系统、硬件平台间的交互问题。
2.2底层
底层(物理层、数据链路层、网络层和传输层,第 1-4 层)
主要负责:解决数据在网络中的 “传输机制”,包括信号传输、链路控制、路由选择及端到端的连接管理。以下是下层各层的功能。
面向 “数据传输” 的底层机制
下层不关心数据的 “语义”(如文件、网页),而是专注于数据的 “传输形式”:如何编码为信号、如何组帧、如何路由、如何确保到达目标端。
分层封装与抽象
每一层将上层数据封装为特定格式的 PDU(协议数据单元),并添加本层头部(如物理层无头部,数据链路层加帧头,网络层加 IP 头,传输层加段头),各层仅处理本层的逻辑,屏蔽下层细节。例如:应用层数据→传输层段→网络层包→数据链路层帧→物理层比特流。
可靠性与效率的平衡
下层通过错误检测(数据链路层)、路由选择(网络层)、确认重传(传输层 TCP)等机制确保数据可靠传输,同时通过分片、拥塞控制等优化传输效率。
2.3小结
底层(1~4 层):解决 “如何传数据”(硬件传输、网络连接);
上层(5~7 层):解决 “传什么数据” 和 “如何用数据”(会话管理、数据格式、业务逻辑)。
这种庖丁解牛一样的分层标准,让工程师能聚焦某一维度某一层的问题,同时通过标准化接口确保整体系统的协同 —— 这正是 OSI 模型虽未被完全实现,却成为网络技术基础理论的核心原因。
三.设备原理详解(物理层到网路层)
3.1集线器(物理层)
如果我们现在没有WiFi,还想分享一些文件给其他人的电脑,,只有几根网线,那我们很可能用网线直接把电脑都连接起来,拿晾衣服举例,如果我们现在已经通过网线连接了几个设备,但是我们想再次连接其他设备,那我们可能只能在中间添加某个电脑,或者用一根长导线连接出去,这样会导致这个网络非常混乱并且无序,那其实这就像一个晾衣架,本来我们衣服都好好的晾在衣架上,然后我们中间突然插了一个衣架里面挂了好多湿衣服,这样会直接导致非常混乱,大家衣服都晾不好了,所以我们应该添加一个集线器。
集线器有多个端口,这样原本的网络位置就可以加入更多的电脑,不过如果只想让这其中的两台电脑之间进行通信,该怎么办?
每台电脑都有自己的MAC地址,也就是我们上面说的物理地址,要和对方通信就要知道自己和对方的MAC地址就行,这个时候通信数据被封装,也就是我们上面说的数据帧内容,里面填入我们和对方的MAC地址,通过网线发送出去,经过集线器的时候就会把这个数据帧发送给每个人,集线器不看你的数据帧的里面有什么东西,收到就复制给所有设备,当然所有设备收到数据帧后会看是否有自己的MAC地址,属于自己就留下,但是不是自己的就丢弃,问题是这种情况大家都被迫你接受你的数据帧,这样会增加设备的工作量。
还有一点,集线器一大问题就是不能同时发送和接受数据,一次只能允许一台设备发送数据,如果两台设备同时发送集线器发送数据会发生冲突碰撞,数据帧就会被丢弃,然后等一会之后,又一起发送再次碰撞,这就是集线器的基本原理——也就是半双工通信。
3.2二层交换器
二层交换机基础
还是上面的例子,但是这次换成二层交换机连接,二层交换机为什么是二层,就是说它是数据链路层的设备,但是为什么交换器比集线器高一层呢?因为二层交换机有特殊的功能,我们详细讲讲。
交换机内部有的是MAC地址表,MAC地址表会记录MAC地址和端口号,我们把电脑的网线分别插进交换机的端口上。
当然,不是说我们电脑连接了交换机,我们的MAC地址表就会记录我们的电脑连接了哪个端口,这些的MAC地址分别是什么,给个情景主机A,和主机B还有主机C ,同时连接导线在交换机上,主机A的IP:192.168.1.6,它的MAC地址6563e2;主机B的IP:192.168.1.9,它的MAC地址b29ac0。
主机A现在想要发送信息给主机B,现在我们已知主机A、B的IP地址、A的MAC地址,不知道B的MAC地址,但是我们帧里面也要填写目标的MAC地址,所以此时我们现在要发送一个ARP请求。简单讲,ARP请求就相当于你在路上捡到100块钱,然后你大喊了一句100块钱是谁的,丢钱的人就会知道你这里有他的一百块钱;此时我们不知道对方的MAC地址,此时填写的就是全是F的地址,也就是**FF:FF:FF:FF:FF:FF
(广播地址),我们现在发送了数据帧达到了交换机,交换机接收到这个信息,也就进入了学习模式,交换机会记录这个数据是从哪个端口来的,还有对应的源MAC地址,接着交换机会看到我们发送到数据内部的目标MAC是广播地址FF:FF:FF:FF:FF:FF**,这时候交换机会把数据帧发送给连接的所有设备,此时正是交换机的泛洪模式了,这时候如果IP地址不匹配,也就是不是目标的MAC地址的主机,比如主机C,那他们就会忽略这个IP地址。如果IP匹配,那么目标主机B就会响应。响应的数据里最重要的就是含有自己的MAC地址,这个时候响应的数据返回了,返回到交换机里,再次进入学习模式,在MAC地址表里记录了主机B的MAC地址和端口,这次主机B返回的帧数据,返回到MAC地址表,但是我们MAC地址表已经学习了主机A的端口号和MAC地址,就不需要广播了,直接转发就OK。最后我们主机A就得到了主机B的MAC地址也就可以顺利的发送信息了。
二层交换机的局限性
当然我们如果多台设备发送的数据帧都是广播地址,那么我们的交换机就会都变成泛洪模式,五个设备就会发生在集线器发送五次信号分别给剩下四个人,这样就会彻底混乱了,变成“大洪水”了,不仅影响网络,还会浪费设备的算力以及降低设备安全性。
还有我们可以通过VLAN的方式对不同设备进行划分,划分为不同的虚拟局域网进行优化,我们来讲一下VLAN是什么:
通过在二层交换机上进行配置,依据特定规则将网络中的设备划分到不同的 VLAN 中。数据帧在网络中传输时,交换机会根据 VLAN 标识(如 802.1Q 标签 )来判断其所属 VLAN,并将其转发到该 VLAN 内的其他端口,实现不同 VLAN 之间的隔离。例如,交换机收到一个带有 VLAN 标识的数据帧,会依据标识将其精准转发到对应的 VLAN 端口,非该 VLAN 的端口无法接收。
同时升级改善了网路,在划分完VLAN之后,广播只会在固定的虚拟局域网内部发送,也就是所属的VLAN,如果我们想要跨VLAN发送,就会出现问题了,不同的VLAN都有自己的网络,想要从一个网络到另一个网络,就需要涉及三层的路由了。
3.3三层交换机
三层交换机属于介于二层交换机和路由器之间,顾名思义,三层交换机就是拥有处理三层网络层能力,但是三层交换机没有丢掉二层交换机的祖传能力,也就是说三层交换机既可以处理MAC地址,也可以处理IP地址;既可以转发又可以路由,因此就能解决VLAN之间路由通信的问题,因为可以放心创建多个VLAN,因此可以有更多的广播域。
场景复现
-
VLAN10(子网:192.168.1.0/24)
主机 A:IP 192.168.1.10,MAC A1,默认网关 192.168.1.1(三层交换机 VLAN10 接口 IP)。 -
VLAN20(子网:192.168.2.0/24)
主机 B:IP 192.168.2.20,MAC B1,默认网关 192.168.2.1(三层交换机 VLAN20 接口 IP)。 -
三层交换机配置
:
- VLAN10 接口 IP:192.168.1.1,MAC:SW-MAC1(物理端口 P1 的 MAC)。
- VLAN20 接口 IP:192.168.2.1,MAC:SW-MAC2(物理端口 P2 的 MAC)。
- 路由表包含直连路由:192.168.1.0/24(出接口 P1)、192.168.2.0/24(出接口 P2)。
首次通信(软件参与的路由处理)
1. 主机 A 判断目标网段并发起 ARP 请求
-
主机 A 逻辑:
计算目标 IP(192.168.2.20)与自身子网(192.168.1.0/24)的网络地址,发现不在同一子网 → 需通过网关转发。 -
ARP 请求内容:
-
二层帧
(带 VLAN10 标签):
- 源 MAC:A1,源 IP:192.168.1.10
- 目标 MAC:全 F(广播),目标 IP:192.168.1.1(网关 IP)
- VLAN 标签:VID=10,优先级 = 0(802.1Q 格式)。
-
目的:获取网关(192.168.1.1)的 MAC 地址。
-
2. 三层交换机响应 ARP 请求
- 交换机处理:
- 接收 VLAN10 内的 ARP 广播 → 解析发现目标 IP 是自身 VLAN10 接口 IP。
- 回复 ARP 应答:
- 二层帧(带 VLAN10 标签):
源 MAC:SW-MAC1,源 IP:192.168.1.1
目标 MAC:A1,目标 IP:192.168.1.10 - 主机 A 更新 ARP 表:记录
192.168.1.1 → SW-MAC1
。
- 二层帧(带 VLAN10 标签):
3. 主机 A 封装数据包并发送至网关
- 三层数据包:
- 源 IP:192.168.1.10,目标 IP:192.168.2.20
- 二层帧(VLAN10 标签):
- 源 MAC:A1,目标 MAC:SW-MAC1
- VLAN 标签:VID=10
- 数据流向:主机 A → 交换机端口 P1(属于 VLAN10)。
4. 三层交换机解析数据包并查询路由表
- 交换机处理流程:
- 剥离二层帧头:读取 VLAN10 标签,确认输入端口为 P1,关联 VLAN10。
- 提取目标 IP:192.168.2.20 → 查询 IP 路由表。
- 路由匹配:找到直连路由
192.168.2.0/24
,出接口为 P2(VLAN20 接口)。
5. 交换机解析目标主机 B 的 MAC 地址(ARP 解析)
- 检查 ARP 表:
若 ARP 表中无192.168.2.20 → B1
的记录 → 在 VLAN20 内发起 ARP 请求。 - ARP 请求内容:
- 二层帧(带 VLAN20 标签):
源 MAC:SW-MAC2,源 IP:192.168.2.1(网关 IP)
目标 MAC:全 F(广播),目标 IP:192.168.2.20 - 主机 B 响应:回复 ARP 应答,携带自身 MAC 地址 B1 → 交换机更新 ARP 表。
- 二层帧(带 VLAN20 标签):
6. 交换机重构二层帧并转发
- 三层处理完成后:
- 源 IP / 目标 IP 不变(仍为 A → B)。
- 重新封装二层帧(VLAN20 标签):
- 源 MAC:SW-MAC2(VLAN20 接口 MAC)
- 目标 MAC:B1(主机 B 的 MAC)
- VLAN 标签:VID=20
- 数据流向:交换机端口 P2(属于 VLAN20)→ 主机 B。
7. 主机 B 接收数据包并准备回复
- 主机 B 解析:
二层帧目标 MAC 为 B1,剥离标签后发现三层目标 IP 为自身 → 接收数据。 - 回复逻辑:主机 B 需反向通信,流程与上述类似(先查网关 MAC,再通过交换机路由)。
0,目标 IP:192.168.2.20
- 二层帧(VLAN10 标签):
- 源 MAC:A1,目标 MAC:SW-MAC1
- VLAN 标签:VID=10
- 数据流向:主机 A → 交换机端口 P1(属于 VLAN10)。
4. 三层交换机解析数据包并查询路由表
- 交换机处理流程:
- 剥离二层帧头:读取 VLAN10 标签,确认输入端口为 P1,关联 VLAN10。
- 提取目标 IP:192.168.2.20 → 查询 IP 路由表。
- 路由匹配:找到直连路由
192.168.2.0/24
,出接口为 P2(VLAN20 接口)。
5. 交换机解析目标主机 B 的 MAC 地址(ARP 解析)
- 检查 ARP 表:
若 ARP 表中无192.168.2.20 → B1
的记录 → 在 VLAN20 内发起 ARP 请求。 - ARP 请求内容:
- 二层帧(带 VLAN20 标签):
源 MAC:SW-MAC2,源 IP:192.168.2.1(网关 IP)
目标 MAC:全 F(广播),目标 IP:192.168.2.20 - 主机 B 响应:回复 ARP 应答,携带自身 MAC 地址 B1 → 交换机更新 ARP 表。
- 二层帧(带 VLAN20 标签):
6. 交换机重构二层帧并转发
- 三层处理完成后:
- 源 IP / 目标 IP 不变(仍为 A → B)。
- 重新封装二层帧(VLAN20 标签):
- 源 MAC:SW-MAC2(VLAN20 接口 MAC)
- 目标 MAC:B1(主机 B 的 MAC)
- VLAN 标签:VID=20
- 数据流向:交换机端口 P2(属于 VLAN20)→ 主机 B。
7. 主机 B 接收数据包并准备回复
- 主机 B 解析:
二层帧目标 MAC 为 B1,剥离标签后发现三层目标 IP 为自身 → 接收数据。 - 回复逻辑:主机 B 需反向通信,流程与上述类似(先查网关 MAC,再通过交换机路由)。