数据传输过程

本文涉及的产品
数据传输服务 DTS,同步至DuckDB 3个月
简介: 数据传输过程

2 数据传输过程

       了解网络中常用的分层模型后,现在来学习一下数据在各层之间是如何传输的。

2.1数据封装与解封装过程(一)

       下面我们将以TCP/IP五层结构为基础来学习数据在网络中传输的“真相”。由于这个过程比较

抽象,我们可以类比给远在美国的朋友邮寄圣诞节礼物的过程。

       如图所示,当给朋友写一封信时,一定会遵照一个约定俗成的信件格式去写信。例如,在

开头写对收信人的称呼,接下来是问候语“你好”等,中间是信的内容,最后落款写自己的姓名,

日期等。那么,这个书信格式及通信采用的语言实际上就是和朋友之间的协议,只有遵照这个协议。

       写好了信,要将信装在信封中。在信封上,要书写收信人的地址和姓名等,再将信交给邮局。邮局根据收信人的目的地址,将信件再次封装成大的包裹,通讨运输部门发往目的城市,运输部门会将信件的包裹送达目的地的邮局。目的地的邮局会将信件送达收信人手中,在这个寄信的例子中,一封信的传输需要经过三个层次。首先发信和收信的双方是这个过程中的最高层,位于下层的邮局和运输部门都是为了最高层之间的通信在服务,寄信人与收信人之间要有一个约定,这个协议保证收信人能读懂寄信人的信件,两地的邮局和运输部门之间也有约定,如包裹的大小、地址的书写方式,运输到站的时间等。

       邮局是寄信人和收信人的下一层,为上一层提供服务,邮局为寄信人提供服务时,邮筒就是两个层之间的接口。

1.数据封装过程

       正如前一节所讲内容,在计算机网络中层次的划分要比上述的例子更细致,每一层实现的功能也更为复杂。为了能够更明确地说明此过程,我们将以两台主机的通信为实例进行分析讲解,如图所示。

1)应用层传输过程

       在应用层,数据被“翻译”为网络世界使用的语言--二进制编码数据,大家可以试想一下人们需要通过计算机传输数据的形式千变万化,各式各样,有字母,数字,汉字,图片,声音等,这些信息对于单一通过弱电流传输的计算机来说太过于“复杂”,因此这些人类方便识别的信息被应用层通过各种特殊的编码过程转换成二进制数据,这就是上面所描述的“翻译”过程,也是应用层在网络数据传输过程中最为核心的贡献,

2)传输层传输过程

       在传输层,上层数据被分割成小的数据段,并为每个分段后的数据封装TCP报文头部。应用层将人们需要传输的信息转换成计算机能够识别的二进制数据后,这些数据往往都是海量的。例如,一张高清晰的图片转换成二进制数据可能会有几百万位甚至几千万位,如此庞大的数据一次性传输的话,一旦网络出现问题而导致数据出错就要重新传输,数据量讨大会加大出错的概率,最终可能会导致网络资源耗尽。因此,将数据先分割成小段再逐段传输,一日出现数据传输错误只需重传这一小段数据即可。

       在TCP头部有一个关键的字段信息--端口号,它用干标识上层的协议或应用程序,确保上层应 用数据的正常通信。计算机是可以多进程并发运行的,如图26中的例子,左边的计算机在通过 QO发送信息的同时也可以通过E浏览器浏览右边主机的Web页面,对于右边的主机就必须弄清楚左边主机发送的数据要对哪个应用程序实施通信。但是对于传输层而言,它是不可能看懂应用层传输具体数据的内容的,因此只能借助一种标识来确定接收到的数据对应的应用程序,这种标识就是端口号。

3)网络层传输过程

       在网络层,上层数据被封装上新的报文头部--P头部。值得注意的是,这里所说的上层数据包括TCP头部,也就是说,这里的上层是指传输层。对干网络层而言,它是看不懂TCP报文头部中内容的,在它看来,无论是应用层的应用数据,还是TCP 头部信息都属于上层数据,在IP头部中有一个关键的字段信息-P地址,它是由一组32位的二进制数组成的,用于标识网络的逻辑地址。回想刚才寄信的例子,我们在信封上填写对方的详细地址和本地的详细地址,以保证收件人能够顺利收到信件,在网络层的传输讨程与其很类似,在P头部中包含目标P地址和源P地址,在网络传输讨程中的一些中间设备,如路电器,会根据目标P地址来逻辑寻址,找到正确的路径将数据转发到目的端。如果中间的路由设备发现目标的IP地址根本是不可能到达的,它将会把该消息传回发送端主机,因此在网络层需要同时封装目标IP和源IP。

4)数据链路层传输过程

       在数据链路层,上层数据被封装一个MAC头部,其内部有一个关键的字段信息-MAC地址,它由一组48位的二进制数组成,在目前阶段,我们先把它理解为固化在硬件设备中的物理地址,具

有全球唯一性。例如,之前讲解的网卡就有属于自己的唯一的MAC地址,和P头部类似,在MAC

头部也同时封装着目标MAC地址和源MAC地址。其实,二层封装还涉及尾部的封装,考虑大家目

前的学习层次,不再详述,后续会讲解相关内容。

5)物理层传输过程

       无论在之前哪一层封装的报文头部还是上层数据信息都是由二进制数组成的,在物理层,将这些二进制数字组成的比特流转换成电信号在网络中传输。

2.数据解封装过程

       数据被封装完毕通过网络传输到接收方后,将进入数据的解封装过程,这将是封装过程的一个逆过程,如图所示。

       在物理层,首先将电信号转换成二进制数据,并将数据送至数据链路层,在数据链路层,将查看目标MAC地址,判断其是否与自己的MAC地址吻合,并据此完成后续处理,如果数据报文的目标MAC地址就是自己的MAC 地址,数据的MAC 头部将被“拆掉”,并将剩余的数据送至上一层;

如果目标MAC地址不是自己的MAC地址,对于终端设备来说,它将会丢弃数据,在网络层与在数

据链路层类似,目标P地址将被核实是否与自己的P地址相同,从而确定是否送至上一层,到了传

输层,首先要根据TCP头部判断数据段送往哪个应用层协议或应用程序,然后将之前被分组的数据

段重组,再送往应用层;在应用层,这些二进制数据将经历复杂的解码过程,以还原发送者所传输

的原始信息。

3.相关数据传输的一些基本概念

1) PDU

       对于OSI参考模型而言,每一层都是通过PDU(Protocol Data Unit,协议数据单元)来进行通信

的;而对于TCP/IP五层结构,也可以沿用这个概念,PDU是指同层之间传递的数据单位。例TCP/IP

五层结构体系中,上层数据被封装TCP头部后,这个单元称为段(Segment);数据段向下传到网络

层,被封装IP头部后,这个单元称为包(Packet);数据包继续向下传送到达数据链路层,被封装MAC头部后,这个单元称为帧(Frame);最后帧传送到物理层,帧数据变成比特(Bits)流;比特流通过

物理介质传送出去,如图所示。

2)常见硬件设备与五层模型的对应关系

       常见的设备属干哪一层并没有严格的定义或是官方的RFC文档说明,但是了解网络设备属干哪一层对于后续的网络硬件课程学习具有很好的指导意义。

       设备属于哪一层要看这个设备主要工作在哪一层,一般来说,常用的个人计算机和服务器都属于应用层设备,因为计算机包含所有各层的功能;路由器属于网络层设备,因为路由器的主要功能是网络层的逻辑寻址:传统的交换机属于数据链路层设备(这里之所以说传统,是因为如今三层,

四层的交换机已经非常普遍了),因为交换机的主要功能是基于 MAC 地址的二层数据帧交换;网卡

一般意义上定义在物理层,虽然目前有些高端的网卡甚至涵盖防火墙的功能,但其最主要 最基本

的功能仍是物理层通信,还有就是硬件防火墙,理论上讲,它应该属于传输层设备,因为它主要基于传输层端口号来过滤上层应用数据的传输,但是需求永远是网络行业发展的原动力,如今的防

火墙更注重整体解决方案的实现,对于病毒,木马,垃圾邮件的过滤已经成为防火墙的附属功能,

而且已经在企业中广泛应用,因此,很多人愿意将防火墙归属于应用层,表为网络各层典型的硬件设备。

未完待续

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
人工智能 监控 中间件
魔搭开源版GPTS来啦!轻松搭建个人超级智能体!
Openai DEV day上推出了GPT Stores, 允许用户通过聊天、直接配置的方式进行GPT的定制
|
Java 编译器 C语言
Python速成篇(基础语法)上
Python速成篇(基础语法)上
|
Oracle Java 应用服务中间件
Linux下安装jdk和Tomcat
Linux下安装jdk和Tomcat
381 1
|
4月前
|
NoSQL 数据可视化 数据管理
常用的redis迁移工具有哪些
yunedit-redis:是一个完整的可视化工具,支持redis的数据管理和数据迁移。redis-dump: 也是做得比较早的工具,使用命令行导出数据。是命令行导出比较好的工具。redis-shake:通过命令行安装,这不是一个直接的导出工具,它是一个api工具。redis-cli:redis自带的工具,这个工具的导入导出的命令比较简陋。
|
数据可视化 JavaScript 前端开发
低代码可视化Uniapp点击事件-代码生成器
低代码可视化Uniapp点击事件-代码生成器
387 0
低代码可视化Uniapp点击事件-代码生成器
|
12月前
|
消息中间件 安全 NoSQL
布谷直播系统源码开发实战:从架构设计到性能优化
作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。
|
数据采集 传感器 数据管理
读数据质量管理:数据可靠性与数据质量问题解决之道04收集与清洗
【11月更文挑战第8天】本文介绍了数据收集的重要性和挑战,以及数据收集的方法和工具。数据收集是数据质量管理的基础,能够确保数据的完整性和准确性。然而,数据来源的多样性和数据丢失等问题也带来了挑战。文中还详细描述了内部系统、外部数据和传感器数据的收集方法,以及数据清洗的目标和流程,包括数据审查、问题数据处理和数据验证等步骤。
394 2
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
715 0
|
供应链 算法 数据挖掘
一文看懂:销售数据分析怎么做?
今天跟大家分享数据分析里最高频的一个工作:销售分析。不管是实打实挣钱的公司,还是指望上市圈钱的公司,销售业绩都是领导们最看重的指标。 很多人从事数据分析工作,也是从基础的“销售统计专员”做起的。今天就简单分享下,销售分析该如何做。
1260 0
一文看懂:销售数据分析怎么做?
|
机器学习/深度学习
YOLOv8改进 | DAttention (DAT)注意力机制实现极限涨点
YOLOv8改进 | DAttention (DAT)注意力机制实现极限涨点
619 0