网络数据传输过程

先验知识:OSI模型

OSI网络模型实际上是参考模型,在实际中并不使用,在网络出现问题的时候,可以从一个宏观的整体去分析和解决问题,而且搭建网络的时候并不需要划分为7层,当今互联网广泛使用的是TCP/IP网络模型(原本只有4层),随着人们不断实践后发现,划分为5层会更符合实际。

image-20240120141543587

网络传输的流程

image-20240119173111092

image-20240121003011819

1. 应用层

  • 正:应用程序发起连接,比如”我们要浏览某个网页“,我们就会对该网页发起请求;
  • 反:将段解封为报文,报文是数据在应用层中的名字;

例子:客户端要发送数据,也就是报文。

image-20240121000243263

2. 传输层

  • 正:将报文封装为段,封装时会加上端口号;
  • 反:将包解封为段,段是传输层中数据的名字;
  • 传输层管理两个节点之间的数据传输,负责可靠传输(TCP)和不可靠传输(UDP),还有一个新的叫QUIC;

例子:报文来到传输层,加上源端口号和目标端口号,封装成段。

image-20240121000223610

3.网络层

  • 正:将段封装为包,封装时会加上ip地址;
  • 反:将帧解封为包,包是网络层中数据的名字;

例子:段来到网络层,加上源IP和目标IP封装成包;

image-20240121004809448

4. 数据链路层

  • 正:将包封装为帧,在封装的时候会加上MAC地址;

  • 反:在数据链路层中,比特会被封装成帧,帧是这一层表示数据的名字;

    image-20240120155254218

    例子:数据来到数据链路层之后,理论上根据目标MAC地址可以将包和源MAC地址和目标MAC地址封装成帧。但是存在的问题是目标IP地址和源IP地址并不是在同一个网络下的,要发送到其他的网络,就需要经过默认网关,由于客户端主机并不知道默认网关的MAC地址,没有办法封装成帧,这个时候可以用ARP协议进行广播,找到网关IP对应的MAC地址。具体步骤如下:

    1. 首先,客户端将自己的MAC地址封装成帧,利用ARP协议广播出去,默认网关收到广播出去的帧之后,查看帧,可以看到客户端的MAC地址,再解封发现包里面的IP地址,然后将IP和MAC关联为一台主机;image-20240121001402501

    2. 然后默认网关将自己的IP地址放入包中,再结合自己的MAC地址封装成帧,然后将其原路返回客户端,这样客户端就知道默认网关的MAC地址了;

      image-20240121002006804

5. 物理层

  • 正:将帧封装为比特;

  • 反:比特;

  • 我们要发送出去的数据在计算机里只不过是无数的0和1(比特),物理层要把这些比特用不同的媒介传输出去,这些媒介可以是电缆、光或者其他形式的电磁波来表示和传输信号;

  • 数据从网络接口出去之后,会经过不同的网络拓扑(网络拓扑是指网络中设备如计算机、路由器、交换机之间物理或逻辑连接的布局结构,描述了设备之间的关系以及他们如何相互连接,是设计和管理计算机网络的基础),

例子:帧到了物理层封装成比特流,发送出去。

  • 然后会经过默认网关,解封为帧发现是发送给自己的,再解封为包查看目标IP地址是在另一个网络中的,然后进行路由转发,最终到达目的网络;

  • 如果目标网关知道目标IP地址和MAC地址是哪台主机,封装成帧就可以直接发送了,如果不知道的话也可以用ARP协议来广播一下获取。

  • 服务器在收到比特流之后按上面的过程倒序进行解封,就可以得到相应的请求报文。

  • 然后以同样的方式给客户端发送回应。

参考:https://www.bilibili.com/video/BV1EU4y1v7ju/?spm_id_from=333.788&vd_source=bad9fad47786fe7e9f54f99cc00b91e9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js实现一个lazyman

“lazyman”通常被用来形容那些喜欢延迟处理或懒散的人,也就是那种不会立刻采取行动的人。 从设计模式的角度来说,有时也可能会用到“懒汉式”的概念,这通常指的是在需要的时候才进行初始化,比如Java中的单例模式。 此外&#x…

最短代码实现随机打乱数组各个元素的顺序

//最短代码实现随机打乱数组各个元素的顺序 randomSortArr(arr []) {return [...Array(arr.length)].map((v, i) > arr.splice(Math.round(Math.random() * (arr.length - 1)), 1)[0]); },

Unity 建造者模式(实例详解)

文章目录 说明实例1:构建游戏角色实例2:构建游戏场景实例3:构建UI界面 说明 在Unity中,建造者模式(Builder Pattern)是一种创建型设计模式,它通过分离对象构建过程的复杂性,允许您以…

【cucumber】CucumberOptions详解

CucumberOptions注解&#xff1a;相当于Cucumber的初始化配置 Maven依赖包 <!-- 用户验收测试框架 io.cucumber.junit.CucumberOptions --><dependency><groupId>io.cucumber</groupId><artifactId>cucumber-junit</artifactId><vers…

第一节 K8S的基础概念

第一节 K8S的基础概念 Node 可以理解为一个物理机或者虚拟机 ,K8S中的一个节点 ,每个节点包含Pod 所需的服务, 这些节点 是由 Control Plane 来管理, 节点的名称 用来标识Node 对象,名称必须是唯一的. Node上有三个组件分别是 kubelet ,kube-proxy,container-runtime . kubel…

Linux命令-ab命令(Apache服务器的性能测试工具 )

Apache服务器的性能测试工具 ab命令 是一个测试你 Apache http 服务器的工具&#xff0c;你可以通过这个工具&#xff0c;指定一个单位时间内向 apache 发出的请求数量来看看你的 Apache 和机器配合的性能如何。 语法 []内容为ab命令后跟的语法&#xff0c;eg&#xff1a;ab …

MySQL索引优化:深入理解索引下推原理与实践

随着MySQL的不断发展和升级&#xff0c;每个版本都为数据库性能和查询优化带来了新的特性。在MySQL 5.6中&#xff0c;引入了一个重要的优化特性——索引下推&#xff08;Index Condition Pushdown&#xff0c;简称ICP&#xff09;。ICP能够在某些查询场景下显著提高查询性能&a…

小程序学习-20

建议每次构建npm之前都先删除miniprogram_npm

HJ7 取近似值【C语言】

【华为机试题 HJ7】取近似值 描述输入描述:输出描述:示例1示例2参考代码1参考代码2参考代码3描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。 数据范围:保证输入的数字在 32 位浮点数范…

【Java】小白友好的java IO操作学习笔记

慢就是快&#xff0c;让知识先沉淀一会。 目录 流 数据流 文件流 文件复制 缓冲流 字符流 序列化 流 在 Java 中&#xff0c;流是一种用于处理输入和输出的数据序列的抽象概念。Java 提供了丰富的流类和接口&#xff0c;用于处理不同类型的数据源和数据目标。 Java 中…

Windows11家庭版上安装Hyper-V并导入虚拟机的方法

大纲 安装启用Hyper-V下载并安装启用 导入虚拟机代码地址 一般我们新买的电脑默认自带的是Windows家庭版。这个版本是没有Hyper-V的。如果安装自带Hyper-V的版本&#xff0c;则需要另外购买。但是我们还是有办法在Windows11的家庭版上安装和启用Hyper-V的。 安装启用Hyper-V …

前端模板字符串的使用

目录 1.说明 2.示例 3.总结 1.说明 模板字符串是用反引号&#xff08;&#xff09;分隔的字面量&#xff0c;允许多行字符串&#xff0c;带有嵌入表达式的字符串插值和一种带标签的模板的特殊结构。 是增强版的字符串&#xff0c;在进行字符串拼接时&#xff0c;可以拼接固…

如何理解伪标签中的置信度

伪标签中常常有置信度这一说法&#xff0c;通过置信度&#xff0c;我们可以筛选出质量高的伪标签&#xff08;直观来说是像素&#xff09;&#xff0c;那比如说预测结果为一个2256256的概率图&#xff0c;那针对一个像素的两个通道值&#xff0c;怎样才算质量高或者低呢&#x…

11 python快速上手

函数进阶 函数进阶1.参数的补充1.1 参数内存地址相关【面试题】1.2 函数的返回值是内存地址1.3 参数的默认值【面试题】1.4 动态参数 2. 函数和函数名2.1 函数做元素2.2 函数名赋值2.3 函数名做参数和返回值 3.返回值和print4. 作用域4.1 函数为作用域4.2 全局和局部4.3 global…

一种计数算法

前言 常见的一个问题: 给定一个整形数组, 统计其中有多少唯一的元素. 常见的思路有哪些呢? 元素去重并统计, 利用哈希表进行去重计数.数组排序后统计 以上空间复杂度均与元素数量关联, 如果允许损失精度, 是否可以使用较低的空间占用来统计呢? 利用布隆过滤器是一种的一…

SHELL编程-Linux自动化运维基础(变量与条件控制语法)

SHELL编程-Linux自动化运维基础 变量使用 定义与使用 r123localhost:~$ first_varaaa r123localhost:~$ echo $first_var aaa r123localhost:~$ second_var123 r123localhost:~$ echo $second_var 123 r123localhost:~$ third"bbb ccc" r123localhost:~$ echo $th…

在CentOS 7 中配置NFS服务器

目录 1、克隆两个虚拟机 2、安装 NFS 服务 3、NFS 服务使用 1、克隆两个虚拟机 nfs-servernfs-client&#xff08;修改ip地址&#xff09;[rootxnode1 ~]# cd /etc/sysconfig/network-scripts/[rootxnode1 network-scripts]# vi ifcfg-eno16777736 #修改内容如下 BOOTPROT…

【Oracle】ORA-32017和ORA-00384错误处理

文章目录 【Oracle】ORA-32017和ORA-00384错误处理问题描述问题原因和解决测试验证 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 收集Oracle数据库内存相关的信息 【Oracle】ORA-32017和ORA-00384错误…

Linux 常见性能指标 -- 磁盘

本系列记录操作系统常见性能指标&#xff0c;写这个主要是记录也是回顾&#xff0c;笔记很长&#xff0c;拆分了几个部分&#xff0c;本篇记录 磁盘 的性能指标 常见概念 响应时间 简单描述&#xff1a;I/O 请求从发出到收到响应的间隔时间 是衡量磁盘性能的关键指标&#x…

【QT+QGIS跨平台编译】之二:【zlib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、zlib介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、zlib介绍 zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&#xff09;压缩和解压函数。zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&am…