网络探索之旅:网络原理(第二弹)

news2025/4/2 10:56:39

上篇文章,小编分享了应用层和传输层深入的一点的知识,那么接下来,这篇文章,继续分享网络层和数据链路层。

网络层

了解这个网络层,那么其实就是重点来了解下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位协议:

用于标识上层协议,即传输层协议用了什么协议

这是一些常见的协议编号和对应的协类型

协议编号协议名称描述
1ICMPInternet控制消息协议
6TCP传输控制协议
17UDP用户数据报协议
47GRE通用路由封装
50ESP封装安全负载(用于IPsec加密)
51AH认证头(用于IPsec认证)
89OSPF开放最短路径优先

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值对比,若不匹配则认为帧已损坏并可能丢弃该帧。
 

那么到这里呢,数据链路层也分享到这里了。

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

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

相关文章

深入剖析 JVM:从组成原理到调优实践

深入剖析 JVM:从组成原理到调优实践 深入剖析 JVM:从组成原理到调优实践一、JVM 组成架构:运行 Java 程序的 “幕后引擎”1.1 内存结构:数据存储的 “分区管理”1.2 执行引擎:字节码的 “翻译官”1.3 本地方法接口&…

阿里云下一代可观测时序引擎-MetricStore 2.0

作者:徐昊(博澍) 背景 作为可观测场景使用频度最高的数据类型,Metrics 时序数据在可观测领域一直占有着重要地位,无论是从全局视角来观测系统整体状态,还是从大范围数据中定位某一个异常的位置&#xff0…

从入门到精通【 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 第三范…

Dubbo 通信流程 - 服务的调用

Dubbo 客户端的使用 在 Dubbo 应用中,往类成员注解 DubboReference,服务启动后便可以调用到远端: Component public class InvokeDemoFacade {AutowiredDubboReferenceprivate DemoFacade demoFacade;public String hello(String name){// …

【数据结构】哈夫曼树

哈夫曼树 在学习哈夫曼树之前,先了解以下几个概念: 一:**路径长度:**在一棵树中,从一个节点到另一个节点所经过的“边”的数量,被我们称为两个节点之间的路径长度。 二:**树的路径长度&#xf…

HCIP(TCP)(2)

1. TCP三次握手 SYN (同步序列编号) 报文: 客户端发送 SYN 报文,开始建立连接,并初始化序列号。 SYN-ACK (同步序列编号-确认) 报文: 服务器收到 SYN 报文后,回复 SYN-ACK 报文,确认连接请求,并初始化自己的序列号和确…

基于Web的交互式智能成绩管理系统设计

目录 摘要 绪论 一、应用背景 二、行业发展现状 三、程序开发的重要意义 四、结语 1 代码 2 数据初始化模块 3 界面布局模块 4 核心功能模块 5 可视化子系统 6 扩展功能模块 7 架构设计亮点 功能总结 一、核心数据管理 二、智能分析体系 三、可视化系统 四、扩…

k8s日志管理

k8s日志管理 k8s查看日志查看集群中不是完全运行状态的pod查看deployment日志查看service日志进入pod的容器内查看日志 管理k8s组件日志kubectl logs查看日志原理 管理k8s应用日志收集k8s日志思路收集标准输出收集容器中日志文件 k8s查看节点状态失败k8s部署prometheus监控 k8s…

element-plus中,Loading 加载组件的使用

一.基本使用 给一个组件&#xff0c;如&#xff1a;table表格&#xff0c;加上v-loading"true"即可。 举例&#xff1a;复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…

Mybatis_Plus中的常用注解

目录 1、TableName TableId TableId的type属性 TableField 1、TableName 经过以上的测试&#xff0c;在使用MyBatis-Plus实现基本的CRUD时&#xff0c;我们并没有指定要操作的表&#xff0c;只是在 Mapper接口继承BaseMapper时&#xff0c;设置了泛型User&#xff0c;而操…

高并发金融系统,“可观测-可追溯-可回滚“的闭环审计体系

一句话总结 在高并发金融系统中&#xff0c;审计方案设计需平衡"观测粒度"与"系统损耗"&#xff0c;通过双AOP实现非侵入式采集&#xff0c;三表机制保障操作原子性&#xff0c;最终形成"可观测-可追溯-可回滚"的闭环体系。 业务痛点与需求 在…

企业内训|DeepSeek技术革命、算力范式重构与场景落地洞察-某头部券商

3月19日北京&#xff0c;TsingtaoAI公司负责人汶生受邀为某证券公司管理层和投资者举办专题培训&#xff0c;围绕《DeepSeek技术革命、算力范式重构与场景落地洞察》主题&#xff0c;系统阐述了当前AI技术演进的核心趋势、算力需求的结构性变革&#xff0c;以及行业应用落地的关…

VS Code C/C++项目设置launch.json中的environment参数解决支持库路径问题

问题描述 Windows 11 VS Code C/C 开发环境搭建分别写了c和cpp两个示例代码&#xff0c;在运行过程中c代码没有发现问题&#xff08;可能简单&#xff0c;没有用到太多支持&#xff09;&#xff0c;但使用了stl的cpp代码并没有运行出来&#xff0c;如下图&#xff1a; 出问题…

怎样解决 Windows 11 上的 DirectX 错误,最新DX 问题解决方法

在使用 Windows 11 操作系统的过程中&#xff0c;大家可能会遇到 DirectX 错误的情况&#xff0c;这可能会给游戏体验、多媒体应用甚至是系统的整体性能带来负面影响。不过别担心&#xff0c;本文将为大家详细介绍如何解决 Windows 11 上的 DirectX 错误&#xff0c;让您的系统…

PH热榜 | 2025-03-30

1. Deepcord 标语&#xff1a;Discord 数据分析&#xff1a;获取指标洞察与受众研究 介绍&#xff1a;Deepcord&#xff1a;为社区建设者提供的Discord分析工具。跟踪超过50万个服务器的指标&#xff0c;发现热门社区&#xff0c;监控竞争对手&#xff0c;找到你的目标受众。…

Open webui的使用

问题 之前本地量化模型管理器ollama的文章&#xff0c;我们知道可以通过ollama来管理本地量化模型&#xff0c;也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…

STM32单片机的桌面宠物机器人(基于HAL库)

效果 基于STM32单片机的桌面宠物机器人 概要 语音模块&#xff1a;ASR PRO&#xff0c;通过天问block软件烧录语音指令 主控芯片&#xff1a;STM32F103C8T6 使用HAL库 屏幕&#xff1a;0.96寸OLED屏&#xff0c;用来显示表情 4个舵机&#xff0c;用来当作四只腿 底部一个面…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(ollama方式)

操作系统&#xff1a;Ubuntu Linux 22.04 一、安装模型运行环境 打开链接https://ollama.com/download/linux 1.安装ollama &#xff08;1&#xff09;一条指令即可实现的简易版安装方法&#xff08;也可称为在线安装&#xff09; curl -fsSL https://ollama.com/install.s…