前端人之网络通信概述
前端人之网络通信概述
- 介绍
- 网络七层模型
- 物理层
- 链路层
- 网络层
- 传输层
- 应用层
介绍
互联网的核心技术就是一系列协议,总称“互联网协议”,对电脑如何连接和组网作出详细的规定,理解了这些协议就理解了互联网的原理。
网络七层模型
互联网完成数据传输需要经过七层模型,每一层都是为了完成一种功能,为了实现这些功能,就需要大家遵守共同的规则,这个共同的规则就叫做“协议”。下面介绍每一层的功能,主要就是介绍每一层的主要协议。
物理层
“物理层”就是把两个电脑连接起来的物理手段(用电缆、光缆、双绞线、无线电波等方式),主要规定了一些电气特性,作用是负责传输0和1的电信号。
链路层
单纯的0和1是没有任何意义的,必须规定解读方式。比如:多少个电信号为一组?每个信号位有何意义?这就是链路层的功能,确定了0和1的分组方式。
早期不同厂商对电信号的分组方式都不同,后来逐渐的一种叫以太网的协议占据了主导地位,它规定一组信号构成一个数据包,叫做“帧(Frame)”,每一帧分成两个部分,标头(Head)和数据(Data):
- Head:包含数据包的一些说明项,比如发送者、接收者、数据类型等。固定长度为18字节。
- Data:数据包的具体内容,最短为46字节,最长为1500字节。
因此,一个帧最长为1518字节,如果数据很长,就必须分割成多个帧发送。
以太网规定,进入网络的所有设备,都必须具有“网卡”接口,数据包必须从一块网卡传送到另一块网卡,网卡的地址就是数据包的发送和接收地址,这个地址就是MAC地址。每块网卡出厂时都会有一个全球独一无二的MAC地址,长度为48个二进制位,通常用12个十六进制数表示,比如:00-B0-D0-86-BB-F7
。在数据包 Head 中有了这个MAC地址,就可以定位网卡和数据包的路径了。
一块网卡如何去寻找另一块网卡的MAC地址呢?以及如何将数据准确发送到接收方呢?
以太网采用一种很原始的方:向本网络内所有计算机发送,让每台计算机自己判断是否为接收方,判断 Head 的接收方MAC地址与自身MAC地址是否相同,是就接收否就丢弃,这种方式就叫做广播。有了数据包的定义,网卡的MAC地址,广播的发送方式,链路层就可以在多台计算机之间传送数据了。
网络层
原理上,已知接收方的MAC地址其实应该就可以精准的将数据直接发送过去,广播的方式不仅效率低,而且局限在发送者和接收者都在同一个局域网内(这种设计是合理的,否则互联网上每一台计算机都会收到所有包)。因此需要找到一种方法,能够区分哪些MAC地址属于同一个子网络,如果是就采用广播方式发送,否则就采用路由方式发送。MAC地址显然做不到这一点,因为不同厂商出产的网卡他们的MAC地址只与厂商有关,与所处网络无关。
这就导致了网络层的诞生,它的作用是引进一套新的地址,,使得我们能够区分不同的计算机是否属于同一个子网络,这套地址就叫做网络地址,简称网址。于是,网络层出现以后,每台计算机有了两种地址:MAC地址和网络地址(两种地址之间没有任何联系)。
规定网络地址的协议就叫做IP协议,它所定义的地址被称为IP地址,由32个二进制位组成。IP协议的作用有两个:一是为每台计算机分配IP地址,另一个是确定哪些地址在同一个子网络中。通过IP地址就能找到对应的子网络,通过MAC地址对子网络里的计算机进行广播发送,将数据发送出去。
传输层
有了MAC地址和IP地址,就可以在互联网上的任意两台计算机建立通信。接下来的问题是,同一台主机上有很多程序都需要接收网络数据(比如同时聊天和网购),当一个数据包从互联网上发来的时候如何知道这个数据包是来自哪个程序呢?
也就是说还需要一个参数,表示这个数据包到底供那个程序(进程)使用,这个参数就叫做端口,它其实是每一个使用网卡的程序的编号,每个数据包都发到主机的特定端口,所有不同的程序就能取到自己所需要的数据,应用程序会随机选用一个端口。
因此,传输层的功能就是建立端口到端口的通信,相比之下网络层是建立主机到主机的通信。
现在,必须在数据包中加入端口信息,这就需要新的协议,最简单的实现就叫做UDP协议,也是由标头和数据两部分组成,Head 主要定义发出端口和接收端口,Data 包含具体内容。整个UDP数据包放入IP数据包的 Data 部分,IP数据包又是放在以太网数据包中,所以整个以太网数据包现在是这样了:
由于UDP协议没有办法知道对方是否接收到了数据,没办法保证数据传输的完整性和一致性,是不可靠的。因此出现了TCP协议,是一种面向连接的,可靠的基于字节流的传输层通信协议,保证了数据的可靠性。
不是说TCP协议可靠就在任何情况下都使用这种协议。还是需要看具体场景,例如:在视频直播,语言通信等其实可以采用UDP协议,因为它们不会因为数据的丢失而导致需要重新连接(TCP协议一旦数据发送失败会重新发送),顶多也就是卡顿一下,这是可以接受的。因此,UDP协议和TCP协议都有它们各自适用的场景。
应用层
由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则无法解读。应用程序收到传输层的数据,接下来就是要对数据进行解读,规定应用程序的数据格式。
举例来说,TCP协议可以为各种应用程序传递数据,比如:Email、www、FTP等,那么就必须有不同协议规定这些应用程序的数据格式,这些应用协议就构成了应用层。
这是最高的一层,直接面向用户(主要是开发人员),它的数据就放在TCP数据包的Data部分,因此现在的以太网的数据包就变成了下面这样:
相关文章:

前端人之网络通信概述
前端人之网络通信概述 介绍网络七层模型物理层链路层网络层传输层应用层 介绍 互联网的核心技术就是一系列协议,总称“互联网协议”,对电脑如何连接和组网作出详细的规定,理解了这些协议就理解了互联网的原理。 网络七层模型 互联网完成数…...

Python从0到100(七十二):Python OpenCV-OpenCV实现手势音量控制(文末送书)
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

【云原生开发】K8S多集群管理系统成果展示
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
spring boot项目打成war包部署
1.修改pom.xml 在 pom.xml 里设置 <packaging>war</packaging>2.移除嵌入式tomcat插件 在 pom.xml 里找到spring-boot-starter-web依赖,在其中添加如下代码, <dependency><groupId>org.springframework.boot</groupId>&l…...

网络学习第四篇
引言: 我们在第三篇的时候出现了错误,我们要就行排错,那么我们要知道一下怎么配置静态路由实现ping通,这样子我们才知道下一跳到底是什么,为什么这样子做。 实验目的 理解和掌握静态路由的基本概念和配置方法。 实…...

【资料】网络安全风险评估报告,风险管理报告,网络安全风险管理计划,网络安全网络安全能力验证报(Word原件)
一、概述 1.1工作方法 1.2评估依据 1.3评估范围 1.4评估方法 1.5基本信息 二、资产分析 2.1 信息资产识别概述 2.2 信息资产识别 三、评估说明 3.1无线网络安全检查项目评估 3.2无线网络与系统安全评估 3.3 ip管理与补丁管理 3.4防火墙 四、威胁细类分析 4.1威胁…...

Django基础用法+Demo演示
Django快速上手 参考: Django快速上手 再写几个页面 编辑demo1/urls.py, 添加URL和视图函数映射 urlpatterns [path(index/, views.index),path(user/list/, views.user_list),path(user/add/, views.user_add), ]编辑app01/views.py,添加几个函数 from djang…...

【webrtc】 RTP 中的 MID(Media Stream Identifier)
RTP 中的 MID(Media Stream Identifier) RID及其与MID的区别 cname与mid的对比【webrtc】CNAME 是rtprtcp中的Canonical Name(规范化名称) 同样都是RTP头部扩展: 基于mediasoup的最新的代码,学习,发现mid在创建RtpSendStream时是必须传递的参数: 例如 D:\XTRANS\soup\…...
React 中 为什么多个 JSX 标签需要被一个父元素包裹?
为什么多个 JSX 标签需要被一个父元素包裹? JSX 虽然看起来很像 HTML,但在底层其实被转化为了 JavaScript 对象,你不能在一个函数中返回多个对象,除非用一个数组把他们包装起来。这就是为什么多个 JSX 标签必须要用一个父元素或者…...

记录日志中logback和log4j2不能共存的问题
本文章记录设置两个日志时候,控制台直接报错 标黄处就是错误原因:1. SLF4J(W):类路径包含多个SLF4J提供程序。 SLF4J(W):找到提供程序[org.apache.logging.slf4j. net]。 SLF4J(W):找到提供程序[ch.qos.log .classi…...
第5章: 图像变换与仿射操作
图像变换和仿射操作是图像处理中常用的技术,通过旋转、缩放、平移、剪裁等操作,可以实现多种视觉效果以及数据增强。 1.1 图像旋转 1.1.1 基础旋转操作 使用 rotate() 方法可以对图像进行旋转操作,指定旋转的角度(以度为单位&am…...

【计算机网络】【网络层】【习题】
计算机网络-传输层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程,表(a)是路由表 R1 初始的路由表,表(b)是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表(c)。…...
Scala的不可变Map常用操作
//类型:不可变,可变 //操作:添加元素,删除元素,查询元素,删除元素,遍历 object map {def main(args: Array[String]): Unit {//不可变Mapval map1 Map("鄂"->"湖北省"…...
nginx配置负载均衡详解
在现代的 web 应用中,负载均衡是确保高可用性、可扩展性和稳定性的关键技术之一。Nginx 是一个非常流行的反向代理服务器和负载均衡器,它支持多种负载均衡策略,能够帮助将客户端的请求分发到多个后端服务器,以提高系统的整体性能和…...
传奇996_19——龙岭总结
功能: 切割 切割属性: 即人物属性,可以设置临时属性或者永久属性,龙岭使用的是临时属性,所谓临时就是存在有效期,龙岭设置的有效期是123456789秒,即1428.89802天。 龙岭写法(倒叙…...

el-table 行列文字悬浮超出屏幕宽度不换行的问题
修改前的效果 修改后的效果 ui框架 element-plus 在网上找了很多例子都没找到合适的 然后这个东西鼠标挪走就不显示 控制台也不好调试 看了一下El-table的源码 他这个悬浮文字用的el-prpper 包着的 所以直接改 .el-table .el-propper 设置为max-width:1000px 就可以了 吐槽一…...

鸿蒙HarmonyOS 网络请求获取数据Http
注意的是;要为接口返回值指定类型 ,以及定义接口数据类型 index.ets import { http } from kit.NetworkKit;interface createAtType {date: number,}interface dataListType {createAt: createAtType;imgUrl: }Component export default struct TabBar {State dat…...

MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中
MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的…...

JavaScript逆向爬虫教程-------基础篇之JavaScript密码学以及CryptoJS各种常用算法的实现
目录 一、密码学介绍 1.1 为什么要学密码学?1.2 密码学里面学哪一些 二、字符编码三、位运算四、Hex 编码与 Base64 编码 4.1 Hex 编码4.2 Base64 编码 五、消息摘要算法 5.1 简介5.2 JS中的MD5、SHA、HMAC、SM3 六、对称加密算法 6.1 介绍6.2 加密模式和填充方式6.3 CryptoJ…...

【分布式】万字图文解析——深入七大分布式事务解决方案
分布式事务 分布式事务是指跨多个独立服务或系统的事务管理,以确保这些服务中的数据变更要么全部成功,要么全部回滚,从而保证数据的一致性。在微服务架构和分布式系统中,由于业务逻辑往往会跨多个服务,传统的单体事务…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...