网络探索之旅:网络原理(第二弹)
上篇文章,小编分享了应用层和传输层深入的一点的知识,那么接下来,这篇文章,继续分享网络层和数据链路层。
网络层
了解这个网络层,那么其实就是重点来了解下IP这个协议
对于这个协议呢,其实也是和前面的一样,重点了解下它的报文格式。
报文格式

图1
那么上面的内容可以说是与TCP不遑多让。
那么接下来就来一一讲解下这些到底是什么吧
版本:
那么这里版本只有两个选项
IPV4、IPV6
IPv4指的是互联网协议第四版,它使用32位地址。
IPv6指的是互联网协议第六版,它使用64位地址。
而目前主流的是IPv4,同样的上面给的图1也是以IPv4的报文格式来分享的。
首部长度:
这里用来表示IP报文头部的长度,由于是4个比特位,所以最大可以到表示到15
但同时它也是4个字节为单位的,又可以表示到60个字节。
同时它的长度不是固定的,也表示是可变长的。
什么意思呢?就是说其是否变长是由“选项”的选项来设置的
最小到5,最大可到60字节。
8位服务类型
这个作用是对IP报文的数据报指示优先级。
3位是优先权字段(已弃用),4位TOS字段,和一位保留字段(必须设置为0)
TOS用于指示IP数据包在网络传输过程中应优先考虑服务质量
最小延时、最大吞吐量、最高可靠性、最小成本
这四者相互冲突,只能设置一个选项,同时不同场景下,也是对应不同的字段,比如对于ftp程序来说,优先考虑的是最大吞吐量。
随着现代网络的发展
TOS字段被重新定义为区分服务(DS)字段
DS字段分为两大结构
1.DSCP(Differentiated Services Code Point, 6位)
用于指定特定的服务等级或行为聚合。不同的值,映射着不同的作用
比如加速转发、确保转发等等作用。
作用:服务质量分类,比如实时语音和视频流量可以标记位高优先级,背景下载任务可以标记为低优先级
流量控制,更改路由器策略,实现更精细的流量管理和资源分配
2.ECN(Explicit Congestion Notification, 2位)
用于显式拥塞通知,允许路由器标记数据以指示网络中的拥塞状态,而不是丢弃数据包。
作用:提高效率,通过不必要的丢包,从而提高网络的整体效率和稳定性。
16位总长度
这里指的是IP数据包整个的长度了。
16位的长度最大可以表示65535个字节,约等于64kb,那么此时就意味着传输数据只能到这吗?
显然,IP协议可没有那么“蠢”
它内置了拆包组包机制
ip协议可以把大的数据包,拆成小的数据包,进行分片传输,再到接收方那么进行组装,此时呢
它就可以传输超过64kb的数据了。
16位标识、3位标志位、13位片偏移
这几个需要合在一起来讲的,这是因为,这三个东西是对IP协议中组包和拆包,起到很大的作用
标识:
当一个很大的数据包需要通过分片传输时,每个分片都会携带相同的“标识”值,以便接收端区分哪些数据包是一个原始数据包的,并正确的讲它们组合在一起
标志位:
第一位:
DF(Don't Fragment)
值为1,表示不分片传输
值为0,表示分片传输,默认为0
第二位
MF(More Fragments)
值为1,代表不是最后一个分片
值为0,代表最后一个分片
第三位,保留位,暂不使用
片偏移:
作用:用于指定当前分片在原始数据中相对位置,帮助接收端按照正确顺序来处理分片过来的数据。
8位生存时间
这个是表示,一个数据包在网络最多可以存活多长时间。
这是为了如若,传输目的是错误的,即IP地址是不存在的,如若一直是发送当前的数据包,就会占用网络带宽资源,所以生存时间规定它只能存活多长时间,时间到了,就被当前的路由器丢弃。
那么值得注意的是,这里的时间,其实是代表的是次数
是指经过路由器转发的次数
发送一个数据包的时候,这里会有一个初始值(32、64、128……)
每经过一个路由器就会-1,那么此时如若减到0了,代表这个数据包存活“时间也到头了
就会被当前路由器丢掉
我们可以直观感受到的是,window上直接ping一个IP地址

对于ping:这是一个网络工具命令,通过发送Internet控制消息协议回显请求到目标主机上,并等待接收回显应答工作。
8位协议:
用于标识上层协议,即传输层协议用了什么协议
这是一些常见的协议编号和对应的协类型
| 协议编号 | 协议名称 | 描述 |
|---|---|---|
| 1 | ICMP | Internet控制消息协议 |
| 6 | TCP | 传输控制协议 |
| 17 | UDP | 用户数据报协议 |
| 47 | GRE | 通用路由封装 |
| 50 | ESP | 封装安全负载(用于IPsec加密) |
| 51 | AH | 认证头(用于IPsec认证) |
| 89 | OSPF | 开放最短路径优先 |
16位首部校验和
这个就是可以验证下IP数据包在网络传输中,是否存在出错的可能,当然,这里是针对IP报头而言
毕竟上层传输层对载荷进行生成校验和。
32位源IP地址、32位目的IP地址
这个理解起来更简单了,就是可以表示说,从哪里来?到哪里去?
但是其中一些内容,还是值得讲讲的
比如这里32位地址,可不是用一串32位整数来表示的,人为阅读,可读性太差
可以根据这个,把32位,划分成四个字节,通过3个圆点分开
每一个部分是一个字节,范围是0~255,每一个部分用十进制表示
这样的写法就是点分十进制的写法。
举个例子

这是我本机的IP地址:192.168.255.1
这里还发现一个叫子网掩码的东西,那什么是子网掩码呢?
- 子网掩码是一个32位的数字,通常表示为四个以点分隔的十进制数(如
255.255.255.0)。 - 它由连续的“1”和连续的“0”组成,其中“1”对应于IP地址中的网络部分,“0”对应于主机部分。
然后,其实根据这个我们就可以计算出网络地址了
什么是网络地址?
是在计算机网络中用于标识一个网络或子网的唯一地址。它是一个由 IP 地址 和 子网掩码 决定的地址,表示网络的 "身份"。在任何网络或子网中,网络地址 用来区分网络和主机部分。
如何计算呢?
将IP地址、子网掩码每位换算成二进制,然后进行与运算
-
192.168.255.1的二进制:11000000.10101000.11111111.00000001 -
255.255.255.0的二进制:11111111.11111111.11111111.00000000
与结果:11000000.10101000.11111111.00000000换算成十进制:192.168.255.0
对于IP地址192.168.57.1
前四位代表的是网络号,最后一位1代表的是主机号(同一网段下,网络号相同,主机号不同,不同网段下,网络号必须不同)
这里介绍两个特殊的IP地址
1.广播地址
比如在192.168.255.0的网络地址中
广播IP:192.168.255.255
作用:用于向网络内的所有设备发送消息
2.环回地址
范围:127.0.0.0 到 127.255.255.255
常用127.0.0.1
作用:用于设备自身的网络测试和通信。
那么值得注意的是我们的IP地址是32位的,即范围可以基本可以到42亿9千万,
所以用它来表示网络中唯一的地址,也不是未尝不可(在以前的年代中)
但随着现在社会的发展,物联网的的时代,全世界都有很多机器也需要联网,也需要IP地址,此时呢,也是会遇到IP地址不够分的问题
那么这里介绍三种方案
1.动态分配IP
简单来说,设备上网,此时通过网络中的DHCP(动态主机配置协议)服务器自动分配一个IP地址
当设备不上网时,释放该IP地址,从而达到利用效率高的问题
2.NAT地址网络地址转换
简单来说,就是以一个IP代表一个局域网内所有设备的地址。
这里会延伸出几个概念
公网:公网指的是开放给所有人访问的网络,最典型的例子就是互联网。任何连接到公网的人都可以通过它与世界各地的其他设备进行通信。
私网:私网是指仅限于特定组织或个人使用的网络,不对外开放。私网可以进一步细分为内网和外网的概念
外网:外网是一种介于内网和公网之间的网络形态,它允许外部合作伙伴(如供应商、客户等)有限制地访问企业内部的部分资源和服务,但仍然保持较高的安全性控制。
内网:内网是一种特殊的私网,专指企业内部使用的网络系统。它通常部署在公司内部,用于支持员工之间的协作、资源共享以及内部业务应用的运行。
所以说,公网IP是唯一的,私网在不同局域网中是可以重复的。
那么如何触发到这个NAT机制呢?
有这样的几种情况是不会涉及到的
1.同一个局域网内,主机A访问主机B
2.公网上的设备A,访问设备B
3.一个局域网内,主机A,访问另一个局域中的主机B(NAT机制中,是不会允许的!)
以下这样的情况会触发到这样的 情况
4.局域网内部的设备A,访问公网上的设备B
那么此时,它的流程大概是怎么样的呢?
场景:我观看爱奇艺电视
发送数据

返回数据

那么我们的电脑的IP地址,会在运营商那,进行一个临时转换。
那么返回数据的时候,为什么会知道,运营商那边,会发送给谁呢?
这是因为,运营商的路由器中,会有一个路由映射表,通过获取接收的数据,就会记录在映射表中
举个例子
旧IP,旧端口,新IP,新端口
可能会以这样的方式进行组织数据。
那么对于这个NAT就分享到这
3.应用IPv6
这个是较为直接的,这个是用128位,16个字节去表示IP地址的
这个比32位,4个字节表示的IP地址,大很多了,理论上可以给地球的每一粒沙子分配一个IP。
选项
提供IP报文中额外扩展功能和额外信息的能力
常见的选项类型
1.记录路由(Record Route, Type 7)
作用:记录数据包经过的所有路由器的IP地址。
(2) 松散源站选路(Loose Source and Record Route, LSRR, Type 131)
作用:允许发送者指定某些中间路由器必须经过,但并不严格限制路径上的其他跳点。
(3) 严格源站选路(Strict Source and Record Route, SSRR, Type 137)
作用:与LSRR类似,但要求数据包严格按照指定的路径传输,不能经过未列出的路由器。
(4) 时间戳(Timestamp, Type 68)
作用:记录数据包到达每个路由器的时间戳。
(5) 安全(Security, Type 130)
作用:提供基本的安全标记或分类。
(6) 验证和复制互联网协议(CIPSO, Type 134)
作用:提供更复杂的安全标签机制。
载荷
里面的内容就是传输层中内容,实际传输的数据。
那么到这里IP报文格式分享的差不多了,接下来继续分享数据链路层协议报文格式
数据链路层
对于数据链路层也存在着很多协议,比如以太网帧、点对点协议(PPP, Point-to-Point Protocol)
这里以太网帧来分享
以太网帧
报文格式如下:

接下来一一解释下吧
1.前导码:
作用:
同步时钟:前导码由一系列交替的1和0组成(具体为10101010...),用于在发送方和接收方之间同步时钟频率。
准备接收:它让接收设备知道即将接收到一个完整的帧,并允许其调整内部时钟以便正确地读取后续数据。
2.帧起始界定符
标识帧开始:标志着前导码结束和以太网帧数据部分的开始。虽然它的大部分位与前导码相同,但最后一位是1而不是0,这使得接收方能够识别出帧的确切起点。
3.目的MAC地址、源MAC地址
简单来说,数据从哪个设备来,到哪个设备去
值得注意的是,这个MAC地址,在设备出厂的时候就已经写死了,不可以更改了
4.类型
作用:
区分上层协议:在以太网II帧中,这个字段指示了封装的数据包所使用的上层协议类型(例如IPv4为0x0800,IPv6为0x86DD)。
5.数据
作用:承载信息:该字段包含了来自上层协议(如IP、ARP等)的数据包。
值得注意的是,这里是1500字节,是另一个参数决定
MTU
它的作用:
限制数据包大小:MTU决定了通过一个特定链路传输的最大数据包大小。如果一个数据包超过了该链路的MTU值,则需要对该数据包进行分片(Fragmentation),即将其分割成较小的数据包以便传输。
提高传输效率:适当的MTU设置可以帮助减少网络中的分片数量,从而降低处理开销并提高传输效率。
避免丢包:如果数据包超过某些路由器或交换机支持的最大尺寸,可能会导致数据包被丢弃,进而引起网络性能问题。
在以太网中,MTU默认的值就是1500字节
超出此范围,那么就会进行拆包,分片传输
在接收方中,进行组包。
6.校验和( 帧校验序列(Frame Check Sequence, FCS)):
作用:
错误检测:FCS通常通过循环冗余校验(CRC)算法生成,用于检测帧在传输过程中是否发生了错误。
验证完整性:接收方也会计算FCS并与接收到的FCS值对比,若不匹配则认为帧已损坏并可能丢弃该帧。
那么到这里呢,数据链路层也分享到这里了。
相关文章:
网络探索之旅:网络原理(第二弹)
上篇文章,小编分享了应用层和传输层深入的一点的知识,那么接下来,这篇文章,继续分享网络层和数据链路层。 网络层 了解这个网络层,那么其实就是重点来了解下IP这个协议 对于这个协议呢,其实也是和前面的…...
深入剖析 JVM:从组成原理到调优实践
深入剖析 JVM:从组成原理到调优实践 深入剖析 JVM:从组成原理到调优实践一、JVM 组成架构:运行 Java 程序的 “幕后引擎”1.1 内存结构:数据存储的 “分区管理”1.2 执行引擎:字节码的 “翻译官”1.3 本地方法接口&…...
阿里云下一代可观测时序引擎-MetricStore 2.0
作者:徐昊(博澍) 背景 作为可观测场景使用频度最高的数据类型,Metrics 时序数据在可观测领域一直占有着重要地位,无论是从全局视角来观测系统整体状态,还是从大范围数据中定位某一个异常的位置࿰…...
从入门到精通【 MySQL】 数据库约束与设计
文章目录 📕1. 数据库约束✏️1.1 NOT NULL 非空约束✏️1.2 DEFAULT 默认值约束✏️1.3 UNIQUE 唯一约束✏️1.4 PRIMARY KEY 主键约束✏️1.5 FOREIGN KEY 外键约束✏️1.6 CHECK 约束 📕2. 数据库设计✏️2.1 第一范式✏️2.2 第二范式✏️2.3 第三范…...
使用LLaMAFactory微调Qwen大模型
一、环境配置与工具安装 1. 硬件要求 GPU:至少1块NVIDIA GPU(推荐RTX 4090/A100/H100,显存≥16GB)。内存:≥64GB系统内存。存储:≥100GB硬盘空间用于模型与数据集存储。2. 软件依赖 Python 3.8+:需安装CUDA支持的PyTorch版本(如torch==2.0.1+cu117)。 依赖库:通过以…...
Dubbo 通信流程 - 服务的调用
Dubbo 客户端的使用 在 Dubbo 应用中,往类成员注解 DubboReference,服务启动后便可以调用到远端: Component public class InvokeDemoFacade {AutowiredDubboReferenceprivate DemoFacade demoFacade;public String hello(String name){// …...
【数据结构】哈夫曼树
哈夫曼树 在学习哈夫曼树之前,先了解以下几个概念: 一:**路径长度:**在一棵树中,从一个节点到另一个节点所经过的“边”的数量,被我们称为两个节点之间的路径长度。 二:**树的路径长度…...
HCIP(TCP)(2)
1. TCP三次握手 SYN (同步序列编号) 报文: 客户端发送 SYN 报文,开始建立连接,并初始化序列号。 SYN-ACK (同步序列编号-确认) 报文: 服务器收到 SYN 报文后,回复 SYN-ACK 报文,确认连接请求,并初始化自己的序列号和确…...
VMware Ubuntu 网络配置全攻略:从断网到畅通无阻
一、网络连接模式选择(先搞懂原理) VMware提供三种网络模式,就像手机的不同网络套餐: 模式适用场景特点类比NAT个人上网/新手首选虚拟机共享主机IP,能上网但隐身家用WiFi桥接服务器/需要被局域网访问虚拟机会获得独立…...
基于Web的交互式智能成绩管理系统设计
目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…...
第 12 章(番外)| Solidity 安全前沿趋势 × 审计生态 × 职业路径规划
🌐 第 12 章(番外)| Solidity 安全前沿趋势 审计生态 职业路径规划 ——做得了审计,也接得了项目,走进 Web3 安全工程师的职业实战地图 ✅ 本章导读 Solidity 安全,不只是代码安全、业务安全、审计安全…...
输出3行3列矩阵的鞍点
【问题描述】在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。任意输入一个3行3列矩阵,请设计程序输出其鞍点。 【输入形式】每行3个数,输入3列 【输出形式】输出所有鞍点;如果没有…...
k8s日志管理
k8s日志管理 k8s查看日志查看集群中不是完全运行状态的pod查看deployment日志查看service日志进入pod的容器内查看日志 管理k8s组件日志kubectl logs查看日志原理 管理k8s应用日志收集k8s日志思路收集标准输出收集容器中日志文件 k8s查看节点状态失败k8s部署prometheus监控 k8s…...
【数据结构】顺序表-元素去重
数据元素 结点定义,复杂数据类型,可用作整体性的管理系统。如果单独研究某些数据,比如只看学号或成绩,那么直接使用int之类的简单数据类型亦可。对应修改:typedef int Elemtype; typedef struct student{ //定义学生…...
物理安全——问答
目录 1、计算机的物理安全包含哪些内容 1. 设备保护 2. 访问控制 3. 电力与环境安全 4. 数据存储保护 5. 硬件防护 6. 监控与审计 7. 灾难恢复与应急响应 8. 拆卸与维修安全 2、物理安全有哪些需要关注的问题 1、计算机的物理安全包含哪些内容 1. 设备保护 防止盗窃&…...
element-plus中,Loading 加载组件的使用
一.基本使用 给一个组件,如:table表格,加上v-loading"true"即可。 举例:复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…...
Mybatis_Plus中的常用注解
目录 1、TableName TableId TableId的type属性 TableField 1、TableName 经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操…...
云数据库概念
1.云数据库概念 云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。云…...
高并发金融系统,“可观测-可追溯-可回滚“的闭环审计体系
一句话总结 在高并发金融系统中,审计方案设计需平衡"观测粒度"与"系统损耗",通过双AOP实现非侵入式采集,三表机制保障操作原子性,最终形成"可观测-可追溯-可回滚"的闭环体系。 业务痛点与需求 在…...
UDP视频传输中的丢包和播放花屏处理方法
在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...
企业内训|DeepSeek技术革命、算力范式重构与场景落地洞察-某头部券商
3月19日北京,TsingtaoAI公司负责人汶生受邀为某证券公司管理层和投资者举办专题培训,围绕《DeepSeek技术革命、算力范式重构与场景落地洞察》主题,系统阐述了当前AI技术演进的核心趋势、算力需求的结构性变革,以及行业应用落地的关…...
K8S学习之基础五十二:k8s配置jenkins
k8s配置jenkins...
VS Code C/C++项目设置launch.json中的environment参数解决支持库路径问题
问题描述 Windows 11 VS Code C/C 开发环境搭建分别写了c和cpp两个示例代码,在运行过程中c代码没有发现问题(可能简单,没有用到太多支持),但使用了stl的cpp代码并没有运行出来,如下图: 出问题…...
怎样解决 Windows 11 上的 DirectX 错误,最新DX 问题解决方法
在使用 Windows 11 操作系统的过程中,大家可能会遇到 DirectX 错误的情况,这可能会给游戏体验、多媒体应用甚至是系统的整体性能带来负面影响。不过别担心,本文将为大家详细介绍如何解决 Windows 11 上的 DirectX 错误,让您的系统…...
Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式
以下是Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式: // 1. 目标类(被增强的类) package com.example;public class TargetService {public void doTask(String param) {System.out.println("…...
.net平台C#对于2D/二维点云处理用哪些库?
对于单线激光雷达生成的2D点云数据的处理, 虽然比较简单, 但网上的资料比较少, PCL是避不开的, 但它主要处理的是3D点云, 对2D也可以处理, 但它是C语言的, 如果使用的是C语言开发&#x…...
PH热榜 | 2025-03-30
1. Deepcord 标语:Discord 数据分析:获取指标洞察与受众研究 介绍:Deepcord:为社区建设者提供的Discord分析工具。跟踪超过50万个服务器的指标,发现热门社区,监控竞争对手,找到你的目标受众。…...
STM32H743学习记录
2025/03/30 SRAM速率计算方式 MCU主频 乘以 单片机位数 除以 每个字节的位数(8)即可得出单片机的SRAM速率 如72M主频32位单片机速率 72 * 32 / 8 288 M/s FLASH速率计算方式 FLASH大小 乘以 单片机位数 除以 每个字节位数(8)…...
Open webui的使用
问题 之前本地量化模型管理器ollama的文章,我们知道可以通过ollama来管理本地量化模型,也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…...
swagger上传图片请求报错
1.如下是上传图片的接口 ApiOperation(value "WF开卡审核-关店换卡信用卡证明")PostMapping(value "/uploadPhoto/{id}")public Result<?> uploadPhoto(List<MultipartFile> file,PathVariable Long id) {return wfAuditService.uploadPhot…...
