网络数据传输过程

先验知识: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux驱动】休眠与唤醒 | POLL机制 | 异步通知 | 阻塞与非阻塞 | 软件定时器

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! 目录 🏓休眠与唤醒🏸内核函数🏸驱动框架及编程 🏓…

《WebKit 技术内幕》学习之五(1): HTML解释器和DOM 模型

第五章 HTML 解释器和 DOM 模型 1.DOM 模型 1.1 DOM标准 DOM (Document Object Model)的全称是文档对象模型,它可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。这里的文档可以是 HTML 文档、XML 文档或者 XHTML 文档。D…

java数组ArrayList(存对象)

1、dade文件 package model;public class dade {private int id;private String name;public dade() {}public dade(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {…

透明拼接屏代工:专业制造与质量保证

透明拼接屏代工是指专业的代工厂家根据客户的需求,为其生产透明拼接屏产品。随着透明拼接屏市场的不断扩大,越来越多的企业选择通过代工方式快速进入市场。尼伽小编将深入探讨透明拼接屏代工的优势、选择合适的代工厂家以及质量保证等方面的内容。 一、透…

枚举算法(穷举法)(暴力法)

1.什么是枚举 枚举是指在一定范围内将所有情况一一列举,再通过条件判断得到自己想要的答案; 2.枚举核心 3.使用枚举的基本步骤 4.例题 4.1.我国古代数学家张丘建在他的《算经》一书中提出了著名的“百钱买百鸡”问题:鸡翁一值钱五;鸡母一值钱三;鸡雏三…

数组A[m+n]中存放了两个线性表(a1,a2,.....am)和(b1,b2.....bn),将数组中的两个线性表的位置互换,要求空间复杂度为1

要求空间复杂度为O(1),那么不可以借助辅助数组来完成此操作 算法思路:可先将此数组逆置变成bn,......b1,am,....,a1,然后分别逆转两个线性表的数据元素 算法实现 1、定义一个函数,该函数的功能是可以对一个数组的任意连续的部分进…

【Web前端开发基础】CSS的结构伪类选择器、伪元素、浮动

CSS的浮动 目录 CSS的浮动一、学习目标二、文章内容2.1 结构伪类选择器2.2 伪元素2.3 标准流2.4 浮动2.5 清除浮动2.6 拓展(BFC) 三、综合案例3.1 小米模块案例3.2 网页导航案例 一、学习目标 能够使用结构伪类选择器在HTML中选元素能够说出标准流元素的…

03-常用编程概念

上一篇:02-编程猜谜游戏 本章介绍几乎所有编程语言中都会出现的概念,以及它们在 Rust 中的工作原理。许多编程语言的核心都有许多共同点。本章介绍的概念都不是 Rust 独有的,但我们会在 Rust 的上下文中讨论这些概念,并解释使用这…

Java封装字符串的类和异常

1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供了各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的&#xf…

深入剖析 Git 对象底层原理

一、引言 在我们日常使用 Git 时,通常的操作是: 在写完一段代码后,执行 git add命令,将这段代码添加到暂存区中然后再执行 git commit和 git push 命令,将 本地 Git 版本库中的提交同步到服务器中的版本库中 Git 在…

10分钟快速上手LLM大模型Python前端开发(三)之显示模块(二)

【计划昵称全网统一,代码随想随记,知乎无法立即修改,,】 微信公众号:leetcode_algos_life,代码随想随记 小红书:412408155 CSDN:https://blog.csdn.net/woai8339?typeblog &#xf…

服务器管理平台(5)- 数据展示

数据展示 Grafana导入MySQL数据源进行定制化数据展示,包括品牌分类饼图,详细数据列表等LayUI为开源前端框架,对系统概览、登录日志等信息,划分不同页面使用表格展示详细数据 1、Grafana 对品牌、CPU型号、内存等数据使用饼图展示…

力扣hot100 分割等和子集 变形01背包 滚动数组优化

Problem: 416. 分割等和子集 文章目录 思路💖 01背包复杂度Code 💖 滚动数组优化复杂度Code 思路 👨‍🏫 参考地址 💖 01背包 复杂度 时间复杂度: O ( n m ) O(nm) O(nm): m m m为数组元素和的一半 空…

支付宝:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则…

【Android】TypedArray的使用

介绍 看电池电量组件BatteryMeterView的时候看到的。 Array是个数组,所有TypedArray也是个容器,基本是用于自定义View里面的(至少我目前见过的全部都在自定义View里面)。 使用 1.自定义View public class RoundSeekbarView e…

vivado 预设文件、IP设置(_P)、用户参数、以太网时钟处理、GT位置限制、当前可识别板的IP列表

了解预设文件 预设文件有助于在特定配置中自定义IP核心。PS7、axi_emc和当linear_flash或DDR3_SDRAM 界面是在Vivado IP集成商的Board选项卡中选择的。预设文件使用XML格式。preset_file是为特定的Board文件定义的&#xff0c;可以是用于将预设应用于多个IP。 <ip_presets…

模拟器单窗口ip有问题?试试关闭IPV6来解决

目前应该不止雷电9有这个问题了&#xff0c;最早是看到无忧群里在说有这个问题&#xff0c;后面发现很多其他的ip软件也有同样的问题&#xff0c;很多人都遇到&#xff0c;所以做个图文教程在这里&#xff0c;没出问题的也可以设置一下&#xff0c;目前ipv6也还没普及&#xff…

数据库(银行数据库表构建)

题目&#xff1a; 通过所提供的E-R图和数据库模型图完成库表的创建&#xff0c;并插入适量的数据.要求必须使用SQL命令进行构建。 表1 UserInfo **建表** CREATE TABLE USERINFO (customerID INT AUTO_INCREMENT COMMENT 客户编号,customerName CHAR(50) CHARACTER SET utf8mb…

Unity -简单键鼠事件和虚拟轴

简单键鼠事件 — “Test_03” KeyTest 键鼠事件每帧都要监听&#xff0c;要放在Update()中处理 public class KeyTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){// 【鼠标点击事件…