网络协议(TCP/IP模型)
目录
网络初识
网络协议
协议分层
协议拆分
分层
协议分层的优势
1.封装效果
2.解耦合
TCP/IP五层模型
协议之间配合工作(详解)
网络初识
网络核心概念:
局域网:若干电脑连接在一起,通过路由器进行组网。
广域网:把很多很多局域网进一步相连,构成更复杂的网络体系。
路由器/交换机:组建网络的基础设备。
IP地址:区分主机。
交换机:区分主机上的不同程序。
网络协议
网络协议,是通信双方对于通信规则的约定,这个约定一定是得到双方认可的约定。进行网络通信的时候,一定需要通信协议的,即使两个用来通信的主机设备,不同的软件,不同的操作系统,不同的应用 程序,即使上述内容不同,通信也能够正确进行,进行网络通信 的时候,通信协议是非常关键的环节。
协议分层
协议拆分
网络通信是一个非常复杂的事情,这个过程中会涉及到非常多的细节问题,如果使用一个协议来约定上述所有的细节,这个协议就会非常庞大,非常复杂。此时就可以把一个功能复杂的协议拆分成多个功能更单一的协议。
一个复杂的方法,可以拆分为多个方法。
一个复杂的类,可以拆分成多个类。
一个复杂的文件,可以拆分成多个文件。
拆分是为了管理复杂程度,不让这个东西太复杂,让每个部分负责一个功能。
对协议进行拆分后,就要进行分类,此时就要进行分层的组织结构。
分层
协议分层,就是把很多协议按照功能分成不同的层级,每个层级都有对应的主线任务,上层协议会调用下层协议的功能,下层协议会给上层协议提供服务,但是不能越级调用。
协议分层的优势
1.封装效果
某一层协议,不需要知道其他协议的细节,降低学习成本。
例如两个人在打电话时,不需要知道电话通信的原理,只需要拨号通信即可。
2.解耦合
任意层次的协议都是可以灵活替换的。这就给整个网络体系的升级和迭代带来了很大的便利。
同样对于打电话的人来说,可以使用不同的语言协议来进行通话,对整个通话体系的功能来说没有变化,都是一样进行通信。
TCP/IP五层模型
现实世界采取的网络分层模型,目前接触到的网络大部分都是TCP/IP模型,4G/5G通信有着一套专门的模型协议。
五层协议
物理层:关注的是硬件上的相关约定,如网线,网口等物理设备的约定。
数据链路层:关注的是通信过程中两个相邻节点之间的通信。
网络层:关注的是通信中通信路径的规则,规划出的路径就决定了数据要经过那些节点,是“点到点的的传输”。
传输层:关注的是通信双方的“起点”和“终点”,是“端到端的传输”。
应用层:和具体的应用程序直接相关,比如传输的数据作用和意义是这一层关注的。

协议之间配合工作(详解)
协议的层和层之间,上层协议调用下层协议,下层协议给上层提供服务。
假设A给B发送消息,利用上面模型进行分析:
第一层——应用层:A通过聊天软件给B发送hello,点击发送,聊天软件里就会有一个应用层的网络协议,规定了传输数据的格式,聊天程序就会把上述要传递的内容组织成“应用层数据包”,并且是按照应用层协议来进行组织。
网络上传输的数据,本质上是二进制的字符串,更准确的来说是二进制的bit流,因此,要传输的发送人/接收人/消息时间/内容....就要组织到一个字符串中,组织的时候就需要按照一定的格式来组织。不同的协议数据组织的格式不同。
此时,,聊天软件把数据组织后(发送人/接收人/发送时间/发送正文):

这样组织后的数据包就是一个结构化的数据(包含很多属性和字段)。
结构化数据 -> 字符串/二进制字符串,称为序列化。
字符串/二进制字符串 -> 结构化数据,称为反序列化。
第二层——传输层:通过应用层协议得到的应用层数据包有了,应用层接下来就要把数据交给传输层,传输层提供了api(这种api称为socket api),让应用程序去调用,通过调用这样的api,就会把刚才应用层的数据交给传输层。
传输层拿到应用层数据包之后,就会对这个数据包进一步封装,构成传输层数据包。
传输层有两个典型的协议TCP和UDP,这里以UDP作为传输层协议。
此时使用UDP协议进行封装,会在数据上加上UDP的报头,报头中包含着UDP的相关属性(发送人和收件人的端口号),原来的数据包成为了UDP数据包的载荷:

传输层构建数据完成之后,会继续把数据包交给网络层,这个过程是传输层调用网络层提供的api,这个调用过程都是系统内核负责。
第三层——网络层:UDP数据包进入网络层后,会被网络层协议进行进一步封装。网络层协议最典型的是IP协议,同样的在数据包上加入IP报头(包含发送者的IP地址和收件人的IP地址),UDP数据包作为IP数据包的载荷。

数据封装完成,,进一步调用数据链路层的api,把上述IP数据包,交给数据链路层协议,同样由系统内核完成。
第四层——数据链路层:典型的协议:以太网。
拿到上面的IP数据包后对数据进行进一步的封装:

数据封装完成就进入到了网卡驱动中,然后进行发送。
第五层——物理层:以太网帧,本质上还是二进制数据,通过硬件设备把上述二进制数据转成光信号/电信号。电磁波才会进行真正的发射。
在上述层次中不断包装数据,不停的加数据报头的过程,称为“封装”。
上述数据并不是A发送后直接到达B,而是要先到达和A连接的交换机/路由器,经过一系列转发之后,最终到达B。当数据到达B之后,进行上述的”逆过程“。
对于接收方B:
第一层——物理层:收到一系列光信号,把信号转成二进制数据,交给数据链路层。
第二层——数据链路层:按照以太网协议,对数据进行解析(解析报头中的关键信息),解析出来的载荷数据交给网络层:

第三层——网络层:拿到IP数据包,按照IP协议格式进一步解析,解析出报头关键信息,取出载荷,进一步交给上层(传输层):

第四层——传输层:拿到UDP数据包,按照UDP格式进一步进行解析,解析出关键信息(要交给那个端口号对应的进程),解析出载荷数据,最后交给应用程序:

第五层——应用层:聊天软件拿到了数据包,按照自己的协议格式进行解析,拿到这里的结构化数据(反序列化),显示到界面上。
在A发送数据时,中间的路由器和交换机也会进行封装和复用,也是上述过程。
交换机封装分用到数据链路层,即可知道下一步如何转发(工作在数据链路层)。
路由器封装分用到网络层即可知道下一步如何转发(工作在网络层)。
相关文章:
网络协议(TCP/IP模型)
目录 网络初识 网络协议 协议分层 协议拆分 分层 协议分层的优势 1.封装效果 2.解耦合 TCP/IP五层模型 协议之间配合工作(详解) 网络初识 网络核心概念: 局域网:若干电脑连接在一起,通过路由器进行组网。 …...
python 清华pip镜像源报HTTP error 403
报错信息 ERROR: HTTP error 403 while getting https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/52/79/a64937a2185b91a96cc5406e3ea58120980c725543d047e112fb3084a972/fake_useragent-2.0.0-py3-none-any.whl (from https://mirrors.tuna.tsinghua.edu.cn/pypi/we…...
swift 屏幕录制
步骤 1:导入 ReplayKit import ReplayKit步骤 2:开始录屏 let screenRecorder RPScreenRecorder.shared() // 麦克风或系统音频 screenRecorder.isMicrophoneEnabled truefunc startRecording() {guard screenRecorder.isAvailable else {print(&quo…...
通过精密时间协议(PTP)对计算机网络中的多个设备进行时间同步
PTP 模块 - 使用教程 目录 PTP 模块 - 使用教程简介第 1 步:为主时钟创建一个 PTP 时钟实例第 2 步:添加 PTP 端口第 3 步:查询 PTP 时钟或 PTP 端口的状态第 4 步:清除 FAULTY 状态第 5 步:为 PTP 事件安装处理程序第…...
Docker 安装系列
Centos8 安装Docker Docker安装mysql8.0 Docker安装稳定版本nginx-1.26.2 Docker 安装最新版本 Jenkins Docker Redis Docker 安装 eclipse-mosquitto Docker mongo:5.0 Docker 安装 Redis的完全体版本RedisMod docker pull elasticsearch:8.0.0 docker 安装nacos v2.…...
使用springboot-3.4.1搭建一个netty服务并且WebSocket消息通知(适用于设备直连操作,以及回复操作)
引入最新版本 <!--websocket--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>启动类加入 //netty 协议服务端口启动 NettyTcpHandler.start()…...
4. 设计模式分类
4.1 创建型模式 这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。 序 号 类 型 业务场景 实现要点 1 工 厂 方 法 多种类型商品不同接口,统一发奖服 务搭建场景 定义一个创建对象的接口,让其子类自 己决定实例化哪一个工厂类,工厂模式 使其创建过程延迟…...
Hive分区值的插入
对于Hive分区表,在我们插入数据的时候需要指定对应的分区值,而这里就会涉及很多种情况。比如静态分区插入、动态分区插入、提供的分区值和分区字段类型不一致,或者提供的分区值是NULL的情况,下面我们依次来展现下不同情况下的表现…...
【多个图片合并成PDF】
因工作安排,小编最近参加了几场学术会议,被多名业界大佬的汇报所震撼。当然也不是白来的,好东西要留存下来回来分享给科室。因此,小编变成了幻灯片专职摄影师,参会的同时对着大牛的PPT就是一顿咔咔咔。回来后,面对手机里数百张照片却犯了难,就这样一张张发到群里么?还是…...
Flutter动画(三)内建显式动画Widget
常见的内建显式动画Widget: ListenableBuilder: AnimatedBuilder AnimatedWidget AlignTransition DecoratedBoxTransition DefaultTextStyleTransition PositionedTransition RelativePositionedTransition RotationTransition ScaleTransiti…...
本地运行打包好的dist
首先输入打包命令 每个人设置不一样 一般人 是npm run build如果不知道可以去package.json里去看。 打包好文件如下 命令行输入 :npm i -g http-server 进入到dist目录下输入 命令cmd 输入 http-server 成功...
什么是Layer Normalization?
一、概念 前面的文章中,我们介绍了Batch Normalization。BN的目的是使得每个batch的输入数据在每个维度上的均值为0、方差为1(batch内,数据维度A的所有数值均值为0、方差为1,维度B、C等以此类推),这是由于神…...
17. Threejs案例-Three.js创建多个立方体
17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…...
RK3568 Android14 打开蓝牙时默认同意
1、最近给一个项目做了一款基础功能的自动测试,在打开蓝牙时,有一个是否同意的提示框要去掉,即默认同意打开蓝牙。 2、路径: packages/apps/Settings/src/com/android/settings/bluetooth/RequestPermissionActivity.java// Sho…...
多模态视频大模型Aria在Docker部署
多模态视频大模型Aria在Docker部署 契机 ⚙ 闲逛HuggingFace的时候发现一个25.3B的多模态大模型,支持图片和视频。刚好我有H20的GPU所以部署来看看效果,因为我的宿主机是cuda-12.1所以为了防止环境污染采用docker部署,通过一系列的披荆斩棘…...
Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱
问题1:在全屏后 日期选择器的下拉框无法显示。 解决:在Ant-Design-Vue的文档中,很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…...
AMR移动机器人赋能制造业仓储自动化升级
在当今制造业的激烈竞争中,智能化、数字化已成为企业转型升级的关键路径。一家制造业巨头,凭借其庞大的生产体系和多个仓库资源,正以前所未有的决心和行动力,在制造业智能化浪潮中勇立潮头,开启了降本增效的新篇章。这…...
【PHP项目实战】活动报名系统
目录 项目介绍 开发语言 后端 前端 项目截图(部分) 首页 列表 详情 个人中心 后台管理 项目演示 项目介绍 本项目是一款基于手机浏览器的活动报名系统。它提供了一个方便快捷的活动报名解决方案,无需下载和安装任何APP,…...
【HarmonyOS】Component组件引入报错 does not meet UI component syntax.
【HarmonyOS】Component组件引入报错 一、问题背景 有时会碰到引入组件时,无法import引入组件,导致引入的组件报错。 或者提示does not meet UI component syntax. (不符合UI组件语法。) 如下图所示,在引入组件时&a…...
vue3项目最新eslint9+prettier+husky+stylelint+vscode配置
一、eslint9和prettier通用配置 安装必装插件 ESlint9.x pnpm add eslintlatest -DESlint配置 vue 规则 , typescript解析器 pnpm add eslint-plugin-vue typescript-eslint -DESlint配置 JavaScript 规则 pnpm add eslint/js -D配置所有全局变量 globals pnpm add globa…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
