网络通信概述
文章目录
- IP地址
- 端口号
- 协议
- 三要素
- 作用
- 五元组
- 协议分层
- OSI七层模型
- TCP/IP 五层模型
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
- 封装和分用
- 发送方 - 封装
- 中间转发
- 接收方 - 分用
一般认为计算机网络就是利用通信线路和通信设备将地理上分散的、具有独立功能的多个计算机系统按不同的形式连接起来,以功能完善的网络软件及通信协议实现资源共享和信息传递的系统。
- 通讯设备(具有自治功能的)
- 介质互联(双绞线、光纤…)
- 资源共享(目的)
IP地址
;网络通信的目的是资源共享,数据之间基于介质传输数据,那么这些传输数据的节点之间是如何判断信息的来源,和目的呢?
- 用于标识网络设备的网络地址
- 用4个字节32位二进制表示(一般写作点分十进制如127.0.0.1)
- 环回IP 127.0.0.1
环回IP:本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。是使用一个特殊的ip地址127.0.0.1来实现的
端口号
端口号可以标识主机中发送数据、接收数据的进程。例如mysql服务器默认绑定3306端口。
- 标识一个具体的应用程序(进程)
- 使用2个字节16位表示(0 ~ 65535)
- 0 号端口一般不使用,1 ~ 1023为知名端口号,不应占用
- 22 - ssh
- 80 - http
- 443 - https
- 23 - teIntent
协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。协议最终体现为在网络上传输的数据包的格式。
三要素
- 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
- 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
- 时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。
人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
作用
由于网络环境的复杂性,在进行网络通信时的状况比较复杂,所以在传输时就需要提前确定好如何传输,数据如何组织,如何发送数据,网络线路如何选择…
如果使用一个协议来约定和解决所有问题,会导致这个协议非常复杂,非常的庞大,因此在设计网络协议时,就对网络协议进行拆分,这样:
-
上层协议调用下层协议,不需要了解下层协议的实现细节(封装)
-
下层协议给上层协议提高支持
-
可以灵活的调整替换某层协议
有了这样的层次结构,就可以避免夸层次交互,降低了协议之间的耦合,提高了协议系统的可读性
五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
协议分层
网络通信是一个比较复杂的工作,如果靠一个协议来解决所有的问题,会导致这个协议非常庞大、复杂。
网络分层就可以让网络的体系结构更加清晰的呈现。上层协议调用下层协议,下层协议给上层协议提高支持。每个层次之间不需要明确层次结构,每个层次对外隐藏实现细节,对每个层次之间的协议也可以根据需要灵活调整。这样就降低了耦合。
由于理论和实践之间的差异,理论上网络有七层OSI七层模型 - 参考模型,而各大产商支持的普遍是TCP/IP五层协议。
OSI七层模型
TCP/IP 五层模型
在具体实践中,将OSI中的应用层、表示层、会话层合并为TCP/IP中的应用层。
应用层
通信双方通信数据的规范
通常是根据场景和需求,由程序员自主决定的
传输层
只关注通信的起点和终点 - 端口
网络层
网络传输路线如何规划 - IP地址
数据链路层
描相邻节点之间的如何 - MAC地址
物理层
描述了网络基础设施的规范和标准
封装和分用
我们通过一个例子来看网络中的封装和分用。比如我给对方发送一句”hello“,这句“hello”,对方是如何收到的。
发送方 - 封装
(我 微信号:111111):
1. 应用层:微信客户端按照应用层的协议将”hello“封装成应用层的数据报,然后交给传输层。假设微信的应用层的协议这样组织(发送方微信号,接收方微信号,时间,正文):
应用层就可以根据协议构造上述的应用层数据报,构造好后调用传输层API将这个数据报交给传输层。
- 传输层:传输层有很多协议,其中最主要的是TCP和UDP协议此处假设传输层协议为UDP,传输层收到应用层的数据报后,根据UDP协议构造UDP数据报。
UDP不会关心应用层的数据是什么,将其当做本层载荷进行封装。传输层封装完成后,进一步将UDP数据报交给网络层。
-
网络层:网络层最主要的协议是IP协议,此处网络层拿到UDP数据报后会将其封装成IP数据报:
同样的,IP层也不会关心UDP的内容,只会将其当做本层的载荷,进行封装。 -
数据链路层:使用以太网对上层协议(IP数据报)进行封装,加上以太网帧头和帧尾。
-
物理层:物理层根据物理层协议规范(网卡)将以太网数据报转换成01序列进一步转换成光/电信号进行发送
中间转发
中间情况:中间可能会经过路由器交换机的转发,先拆包,在封装,具体拆到那一层取决于是交换机还是路由器。
- 交换机将电信号转换成二进制数据送往交换机的数据链路层,因为交换机属于数据链路层的设备,所以它将可以查看数据帧头部的内容,但不会进行封装和解封装的过程。
- 当路由器收到数据后会拆掉数据链路层的 MAC 头部信息,将数据送达网络层,这样 IP 头部信息就“暴露”在最外面了。 路由器将检测数据包头部的目标 IP 地址信息,并根据该信息进行路由过程,智能地将数据报文转发到下一跳路由器上(重复过程)
接收方 - 分用
(对方 微信号:222222):
- 物理层:物理层(硬件设备网卡),收到光电信号,需要将信号转换成01序列,得到以太网数据报,进一步将以太网数据报交给数据链路层。
- 数据链路层:数据链路层得到以太网数据报后就会根据以太网协议进行解析,拿到以太网数据报的载荷,再将以太网数据报的载荷交给网络层IP协议处理。
- 网络层:网络层得到IP数据报,根据IP协议进行解析,去掉IP报头得到IP载荷,交给传输层处理:
- 传输层:传输层得到UDP数据报后,根据UDP协议进行解析,去掉UDP报头,得到UDP载荷,交给应用层。
- 应用层:应用层拿到后就可以根据应用层的协议进行解析,解析完毕后就可以拿到数据”hello“,进一步就收到了”hello“这条消息了。
发送方从应用层到物理层逐层封装,接收方从物理层到应用层逐层解析,每个层次之间相互独立,完成自己的功能,相互配合,完成了数据的传输。
总结:
- 封装:将数据从应用层开始,层层封装,最后通过网卡转换成光电信号进行传输
- 转发:中间会进过交换机和路由器进行转发
- 交换机:会解析出以太网数据帧(数据链路层),获取到帧头中的“mac地址”
- 重新封装,根据”mac地址”进行转发
- 路由器:解析出ip数据报(网络层),拿到”目的ip地址”
- 进一步规划处接下来的路线
- 将数据进行封装,进行转发
- 交换机:会解析出以太网数据帧(数据链路层),获取到帧头中的“mac地址”
- 分用:数据报到达目的主机后,根据各层协议,层次解析,最终拿到传输的数据
相关文章:

网络通信概述
文章目录 IP地址端口号协议三要素作用 五元组协议分层OSI七层模型TCP/IP 五层模型应用层传输层网络层数据链路层物理层 封装和分用发送方 - 封装中间转发接收方 - 分用 一般认为计算机网络就是利用通信线路和通信设备将地理上分散的、具有独立功能的多个计算机系统按不同的形式…...

<avue-crud/>,二级表头,children下字典项的dicUrl失效问题
目录 1.提出问题: 1.1 代码: 1.2 效果图:会发现处在children下的dicUrl失效了 2. 解决思路 3. 解决代码(你要的都在这,看这里) 1.提出问题: 在使用<avue-crud/>组件实现二级表头时&…...

FastApi接收不到Apifox发送的from-data字符串_解决方法
接收不到Apifox发送的from-data字符串_解决方法 问题描述解决方法弯路总结弯路描述纵观全局小结 问题描述 这里写了一个接口,功能是上传文件,接口参数是file文件和一个id字符串 gpt_router.post("/uploadfiles") async def create_upload_fi…...
Python高级数据结构——堆(Heap)
Python中的堆(Heap):高级数据结构解析 堆是一种基于树结构的数据结构,具有高效的插入和删除操作。在本文中,我们将深入讲解Python中的堆,包括堆的基本概念、类型、实现方式、应用场景以及使用代码示例演示…...

linux 讨论题合集(个人复习)
常规文件的权限是什么?如何分配或修改这些权限?文件夹(目录)的权限是什么?显示常规文件和文件夹的区别 讨论:①常规的文件权限有四种,r可读、w可写、x可执行、-没有权限;②可以使用c…...
浅析SD-WAN技术如何加强企业网络安全
在这个数字化时代,企业组网的安全性已经成为许多企业所面临的一个重要挑战。特别是随着云计算、移动办公等新型信息技术的普及,企业网络的规模和复杂度不断增加,网络攻击和数据泄露的威胁也日益增加。因此,企业需要采取更加有效的…...

测试相关-面试高频
测试面试相关 面试 测试的具体场景 功能测试 具体的测试工具Jmeter Postman selenium pytest 怎么看待测试的潜力与挑战 软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的…...

基于Java web的多功能游戏大厅系统的开发与实现
摘 要 目前,国内游戏市场上的网络游戏有许多种类,游戏在玩法上也越来越雷同,形式越来越单调。这种游戏性系统给玩家带来的成就感虽然是无穷的,但是也有随之而来的疲惫感,尤其是需要花费大量的时间和精力,这…...
【MySQL工具】my2sql-快速解析binlog
目录 安装 my2sql简介 用途 工具优势 限制 账号所需权限 参数解析 场景 场景1 回滚 场景2 生成正向SQL 场景3 DML与事务统计 场景4 解析本地 与binlog2sql性能对比 安装 安装比较简单 直接下载二进制命令即可使用 wget https://git…...
vueRouter常用属性
vueRouter常用属性 basemodehashhistoryhistory模式下可能会遇到的问题及解决方案 routesprops配置(最佳方案) scrollBehavior base 基本的路由请求的路径 如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 “/app/”,所有的请求都会在url之后加上/app/ new …...
Qt5.15.2的镜像网址
其它版本的qt把相应数字更换即可 已安装的QT怎么更新安装组件。离线版QT安装:已安装的QT怎么更新安装组件。离线版QT安装_哔哩哔哩_bilibili https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5152_wasm/https://mirrors.…...
Python隐藏特性:字符串驻留、常量折叠
下面是Python字符串的一些微妙的特性,绝对会让你大吃一惊。 案例一: a “some_string” id(a) 140420665652016 id(“some” “_” “string”) # 注意两个的id值是相同的. 140420665652016 案例二: a “wtf” b “wtf” a is b True …...
2-Python与设计模式--工厂类相关模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...

PGP 遇上比特币
重复使用 PGP 密钥作为比特币密钥 介绍 在数字安全领域,密码学在确保数据的完整性和真实性方面发挥着至关重要的作用。 一种广泛使用的加密技术是使用 Pretty Good Privacy (PGP1)。 PGP 为安全通信(例如电子邮件、文件传输和数据存储)提供加…...

项目demo —— GPT 聊天机器人
本文介绍我的开源项目 TelegramChatBot,这是一个基于 OpenAI GPT API 开发的 telegram 机器人,具有多模态交互能力,求 star!感谢大家!在 telegram jokerController_bot 立即体验!欢迎对 GPT 应用开发或对 t…...

Airtest进阶使用篇!提高脚本稳定性 + 批量运行脚本!
一、背景 今天彭于晏为大家分享Airtest进阶使用篇,主要包含两块的内容: 提高脚本稳定性批量运行脚本生成测试报告 二、提高脚本稳定性 1、添加全局配置: #全局设置 ST.FIND_TIMEOUT10 #设置隐式等待时长,默认识别图片时间是30秒,可改为…...

数据库系统概述之数据库优化
为什么需要进行优化? 数据库性能瓶颈 数据库服务器的性能受许多因素影响,包括硬件能力、系统规模、业务模型及架构、代码设计、数据库表设计、系统环境等。 因此,可以从几个方面进行数据库优化 喜欢点赞收藏,如有疑问ÿ…...
【error:Custom elements in iteration require ‘v-bind:key‘ directives】元素绑定:key
在vue3中使用v-for操作的时候,报error Custom elements in iteration require v-bind:key directives 当我想自定义绘制echarts图的代码: <el-row><div v-if"data.chartDataList.length > 0"><el-col :span"12&quo…...

TA-Lib学习研究笔记(二)——Overlap Studies下
TA-Lib学习研究笔记(二)——Overlap Studies下 (11)SAR - Parabolic SAR 抛物线指标 函数名:SAR 名称: 抛物线指标 简介:抛物线转向也称停损点转向,是利用抛物线方式,随…...

三.排序与分页
目录 一.排序数据二.分页 一.排序数据 1.排序规则 使用ORDER BY 子句排序 ASC(ascend)升序DESC(descend)降序 ORDER BY 子句在SELECT语句的结尾 2.单列排序 SELECT last_name, job_id, department_id, hire_date FROM e…...
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…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...