当前位置: 首页 > news >正文

前端人之网络通信概述

前端人之网络通信概述

  • 介绍
    • 网络七层模型
      • 物理层
      • 链路层
      • 网络层
      • 传输层
      • 应用层

介绍

互联网的核心技术就是一系列协议,总称“互联网协议”,对电脑如何连接和组网作出详细的规定,理解了这些协议就理解了互联网的原理。

网络七层模型

互联网完成数据传输需要经过七层模型,每一层都是为了完成一种功能,为了实现这些功能,就需要大家遵守共同的规则,这个共同的规则就叫做“协议”。下面介绍每一层的功能,主要就是介绍每一层的主要协议。
在这里插入图片描述

物理层

“物理层”就是把两个电脑连接起来的物理手段(用电缆、光缆、双绞线、无线电波等方式),主要规定了一些电气特性,作用是负责传输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依赖&#xff0c;在其中添加如下代码&#xff0c; <dependency><groupId>org.springframework.boot</groupId>&l…...

网络学习第四篇

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

【资料】网络安全风险评估报告,风险管理报告,网络安全风险管理计划,网络安全网络安全能力验证报(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&#xff0c;添加几个函数 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 标签需要被一个父元素包裹&#xff1f; JSX 虽然看起来很像 HTML&#xff0c;但在底层其实被转化为了 JavaScript 对象&#xff0c;你不能在一个函数中返回多个对象&#xff0c;除非用一个数组把他们包装起来。这就是为什么多个 JSX 标签必须要用一个父元素或者…...

记录日志中logback和log4j2不能共存的问题

本文章记录设置两个日志时候&#xff0c;控制台直接报错 标黄处就是错误原因&#xff1a;1. SLF4J(W)&#xff1a;类路径包含多个SLF4J提供程序。 SLF4J(W)&#xff1a;找到提供程序[org.apache.logging.slf4j. net]。 SLF4J(W)&#xff1a;找到提供程序[ch.qos.log .classi…...

第5章: 图像变换与仿射操作

图像变换和仿射操作是图像处理中常用的技术&#xff0c;通过旋转、缩放、平移、剪裁等操作&#xff0c;可以实现多种视觉效果以及数据增强。 1.1 图像旋转 1.1.1 基础旋转操作 使用 rotate() 方法可以对图像进行旋转操作&#xff0c;指定旋转的角度&#xff08;以度为单位&am…...

【计算机网络】【网络层】【习题】

计算机网络-传输层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程&#xff0c;表&#xff08;a&#xff09;是路由表 R1 初始的路由表&#xff0c;表&#xff08;b&#xff09;是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表&#xff08;c&#xff09;。…...

Scala的不可变Map常用操作

//类型&#xff1a;不可变&#xff0c;可变 //操作&#xff1a;添加元素&#xff0c;删除元素&#xff0c;查询元素&#xff0c;删除元素&#xff0c;遍历 object map {def main(args: Array[String]): Unit {//不可变Mapval map1 Map("鄂"->"湖北省"…...

nginx配置负载均衡详解

在现代的 web 应用中&#xff0c;负载均衡是确保高可用性、可扩展性和稳定性的关键技术之一。Nginx 是一个非常流行的反向代理服务器和负载均衡器&#xff0c;它支持多种负载均衡策略&#xff0c;能够帮助将客户端的请求分发到多个后端服务器&#xff0c;以提高系统的整体性能和…...

传奇996_19——龙岭总结

功能&#xff1a; 切割 切割属性&#xff1a; 即人物属性&#xff0c;可以设置临时属性或者永久属性&#xff0c;龙岭使用的是临时属性&#xff0c;所谓临时就是存在有效期&#xff0c;龙岭设置的有效期是123456789秒&#xff0c;即1428.89802天。 龙岭写法&#xff08;倒叙…...

el-table 行列文字悬浮超出屏幕宽度不换行的问题

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

鸿蒙HarmonyOS 网络请求获取数据Http

注意的是;要为接口返回值指定类型 &#xff0c;以及定义接口数据类型 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技巧之跨服务器数据查询&#xff1a;高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中 基础篇已经描述&#xff1a;借用微软的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…...

【分布式】万字图文解析——深入七大分布式事务解决方案

分布式事务 分布式事务是指跨多个独立服务或系统的事务管理&#xff0c;以确保这些服务中的数据变更要么全部成功&#xff0c;要么全部回滚&#xff0c;从而保证数据的一致性。在微服务架构和分布式系统中&#xff0c;由于业务逻辑往往会跨多个服务&#xff0c;传统的单体事务…...

水墨江南模型效果对比:不同参数下的笔触与渲染风格

水墨江南模型效果对比&#xff1a;不同参数下的笔触与渲染风格 最近在尝试用AI生成水墨画&#xff0c;发现一个挺有意思的现象&#xff1a;同一个“水墨江南”模型&#xff0c;用不同的参数设置&#xff0c;画出来的效果天差地别。有时候是寥寥几笔的写意小品&#xff0c;有时…...

Vue 3.4+ 实验性/新特性深度实战(2026版)

一、背景&#xff1a;从“稳定”到“极致体验”截至 2026 年&#xff0c;Vue 3.4 与 3.5 已全面普及&#xff0c;但许多能​​显著降低心智负担​​的特性&#xff08;如 defineModel&#xff09;在早期被标记为“实验性”&#xff0c;或仅在 3.5 才完全稳定。如果你还在写“Pr…...

深入S32K3XX以太网内部:用逻辑分析仪抓取MII时序,图解数据收发全过程

深入S32K3XX以太网内部&#xff1a;用逻辑分析仪抓取MII时序&#xff0c;图解数据收发全过程 在嵌入式系统开发中&#xff0c;以太网通信的底层实现往往像一个黑盒子——我们配置好寄存器&#xff0c;数据就神奇地传输了。但对于真正追求技术深度的开发者来说&#xff0c;理解信…...

Maven Versions Plugin 使用指南

以下是对你提供内容的补充和整理&#xff0c;形成一篇关于 Maven Versions Plugin 使用指南的文章&#xff1a;Maven Versions Plugin 使用指南 Maven Versions Plugin 是一套用于管理项目版本、依赖版本和父版本的工具集合。它可以帮助你高效地更新项目版本号、检查依赖更新、…...

OLED多级菜单移植与设计实战

1. 低成本嵌入式项目的OLED多级菜单设计 第一次接触OLED多级菜单是在一个智能温控器的DIY项目里。当时为了给设备做个简单的交互界面&#xff0c;我试过各种方案&#xff0c;最后发现0.96寸的OLED屏配上多级菜单是最经济实惠的选择。这种组合特别适合预算有限但又需要基本人机交…...

Scarab:重构空洞骑士模组管理体验的技术实践

Scarab&#xff1a;重构空洞骑士模组管理体验的技术实践 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 问题溯源&#xff1a;模组管理的隐性成本与技术瓶颈 量化手动管理的效…...

百川2-13B模型实战:Python爬虫数据的智能分析与摘要生成

百川2-13B模型实战&#xff1a;Python爬虫数据的智能分析与摘要生成 每天&#xff0c;互联网上都会产生海量的文本信息&#xff0c;新闻、论坛帖子、社交媒体动态……对于市场分析师、舆情监控人员或者内容运营者来说&#xff0c;如何从这些信息海洋中快速提炼出有价值的内容&…...

揭秘Windows热键失踪案:Hotkey Detective侦探手册

揭秘Windows热键失踪案&#xff1a;Hotkey Detective侦探手册 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾在Windows系统中按下熟悉的…...

判断一个链表是否是环形链表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…...

UniApp跨平台开发入门:用现有Vue代码快速生成小程序/App(2023最新版)

UniApp跨平台开发实战&#xff1a;2023年Vue代码高效迁移指南 移动互联网时代&#xff0c;开发者常面临一个核心挑战&#xff1a;如何用最小成本将Web应用扩展到移动端。如果你手头已有成熟的Vue项目&#xff0c;UniApp可能是最经济的跨平台解决方案——它允许你复用80%以上的现…...