当前位置: 首页 > 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;传统的单体事务…...

apache2配置多站点

环境 ubuntu 14.04 apache2 Server version: Apache/2.4.7 (Ubuntu) Server built: Apr 3 2019 18:04:25 步骤 修改/etc/apache2/sites-enabled/000-default.conf 增加VirtualHost段&#xff0c;指定不同的ServerName、DocumentRoot等参数 <VirtualHost *:80>…...

基于PyQt Python的深度学习图像处理界面开发(一)

Python标准库更多的适合处理后台任务&#xff0c;唯一的图形库tkinter使用起来很不方便&#xff0c;所以后来出现了针对Python图形界面开发的扩展库&#xff0c;例如PyQt。 在介绍PyQt之前&#xff0c;必须先简单介绍一下Qt。Qt是一个C可视化开发平台&#xff0c;是一个跨平台的…...

【Linux网络】Linux网络编程套接字,UDP与TCP

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux网络编程套接字 &#x1f4d2;1. 端口号&#x1f4dc;2. 初识TCP协议与UDP协议&#x1…...

Vue3 -- 强制统一包管理器工具【企业级项目配置保姆级教程6】

引言: 团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样,导致项目出现bug问题,因此包管理器工具需要统一管理!!所以就需要我们强制统一包管理器工具。 创建scripts目录和preinstall.js文件: 在根目录创建scritps/preinstal…...

Winform实现自制浏览器JavaScript注入

让我们一起走向未来 &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[1504566…...

【工具插件类教学】在 Unity 中使用 iTextSharp 实现 PDF 文件生成与导出

目录 一、准备工作 1. 安装 iTextSharp 2. 准备资源文件 二、创建 ExportPDFTool 脚本 1、初始化 PDF 文件,设置字体 2、添加标题、内容、表格和图片 三、使用工具类生成 PDF 四、源码地址 在 Unity 项目中,我们有时会需要生成带有文本、表格和图片的 PDF 文件,以便…...

javascript用来干嘛的?赋予网站灵魂的语言

javascript用来干嘛的&#xff1f;赋予网站灵魂的语言 在互联网世界中&#xff0c;你所浏览的每一个网页&#xff0c;背后都有一群默默工作的代码在支撑着。而其中&#xff0c;JavaScript就像是一位技艺精湛的魔术师&#xff0c;它赋予了网页生命力&#xff0c;让原本静态的页…...

Flutter Getx状态管理

在 Flutter 开发中&#xff0c;状态管理是一个非常重要的话题。随着应用变得更加复杂&#xff0c;状态管理的方式也变得越来越多。Flutter 提供了多种状态管理的解决方案&#xff0c;如 Provider、Riverpod、BLoC 等&#xff0c;而在这些选项中&#xff0c;GetX 作为一个轻量级…...

《成法》读书笔记

稻盛和夫的《成法》是一部关于个人和企业成功哲学的作品&#xff0c;结合了他在经营京瓷和KDDI&#xff0c;以及重建日航&#xff08;JAL&#xff09;过程中的经验和智慧。 以下是这本书的读书笔记&#xff0c;涵盖其核心思想和重要概念&#xff1a; 1. 以“心”为本 内容概…...

TensorFlow 2.0 环境配置

官方文档&#xff1a;CUDA Installation Guide for Windows 官方文档有坑&#xff0c;windows的安装指南直接复制了linux的指南内容&#xff1a;忽略这些离谱的信息即可。 可以从官方文档知悉&#xff0c;cuda依赖特定版本的C编译器。但是我懒得为了一个编译器就下载整个visua…...