数据包的奇妙旅程:揭秘网络传输的7个关键步骤

数据包,奇妙,旅程,揭秘,网络,传输,关键步骤 · 浏览次数 : 201

小编点评

**数据包传输过程中的层级封装和解封装** 发送数据包是一个复杂的过程,涉及多个层次的封装和解封装。 **第一层:网络层** * 数据包通过交换机层发送到交换机。 * 交换机根据目标MAC地址寻找相应的端口,然后转发数据包。 **第二层:路由器层** * 当路由器接收到数据包后,它会解析数据包的MAC头,并查看是否与自己的MAC地址匹配。 * 如果匹配成功,路由器就会将数据包交给IP层进行处理。 **第三层:IP层** * IP层根据数据包的IP头中的信息,在路由表中查找下一跳的信息,以确定应该从哪个网络接口发出去。 * 在数据包到达目标设备之前,IP层还会进行地址转换,将目标IP地址转换为网络IP地址。 **第四层:TCP层** * TCP层根据TCP头部中的序列号等信息验证数据包的有效性,并将数据包缓存起来,等待应用层读取。 * 在应用层中,我们需要解析HTTP头和正文,这是由应用层来处理的。 **第五层:应用层** * 在应用程序中,我们通过Socket监听特定端口,当读取数据时,操作系统内核会根据TCP头部中的端口号,将数据包发送给相应的应用程序进行处理。

正文

发送数据包

我们前面已经了解到为什么网络需要分层,每一层都有自己的职责。在发送数据包的过程中,这些层扮演着不同的角色。它们的主要任务是将数据包进行层层封装后发送,并在接收端逐层解封装。

就像下面的示意图所展示的那样,在部署在Linux服务器B上的服务端Nginx和Tomcat通过Socket监听着80和8080端口。这时,内核的数据结构(包括七层网络协议等)就会记录下这些信息。当有数据包发送到这两个端口时,内核就会将这些数据包转发给相应的进程。

在Linux服务器A上的客户端,如果打开一个Edge并连接到Nginx,同样通过Socket连接,客户端会被分配一个随机端口12345。同理,如果打开一个Chrome并连接到Tomcat,同样通过Socket连接,客户端会被分配一个随机端口12346。这些客户端的端口都是随机分配的,因为作为客户端,你只需要与其他人的服务器建立连接,而不需要一个固定的端口供所有人访问,因为你不是服务器本身。

image

在客户端上,当需要发送数据包时,通常会将请求封装成一个HTTP协议,并通过调用socket发送到内核。然后在传输层(即TCP层),会创建用于维护连接、序列号和拥堵控制的数据结构。在封装好的HTTP包的外层,还会再封装一个刚包装好的TCP头,然后继续传输到网络IP层。

在网络IP层,需要将目标IP和本机IP等信息封装在TCP包的外层,即在IP头中。随后,数据包会继续发送到数据链路层(即MAC层),这时需要将本机的MAC地址和目标MAC地址封装在IP包的外层,即在MAC头中。最后,数据包会被发送到硬件网卡,准备发送出去。需要注意的是目标主机的IP地址是用来确定数据包的目的地(也就是真实的目标服务器IP),而目标主机的MAC地址是用来确定数据包在局域网中的具体物理地址(可以认为是网关的MAC地址,并不是目标服务器MAC地址)。

终于发送的数据包准备好了,现在我们来详细讲述一下数据包在传输过程中发生的一些不为人知的事情。

当数据包到达交换机层,也被称为二层设备或MAC设备,因为它主要处理MAC层的操作。交换机不会改变数据包的MAC地址,而是会寻找目标MAC地址。就像图上标识的那样,交换机会检查数据包中的目标MAC地址,并根据自己的MAC地址表找到相应的端口,然后将数据包转发给对应的端口。如果交换机找不到目标MAC地址的对应端口,它会采取一种特殊的方式来解决问题,就像是在大声喊叫一样。交换机会发送一个广播帧,向所有连接的设备询问“这是谁的MAC地址?”这样,如果目标设备在网络上,它就会回复交换机,并告诉它自己的MAC地址。交换机将收到的回复信息更新到自己的MAC地址表中,以便将来能够更快地找到目标设备。如果交换机还是找不到目标MAC地址,那你看看是不是断网了吧,你可能已经脱离了互联网。

当路由器接收到数据包后,它会开始解析数据包的MAC头,并查看是否与自己的MAC地址匹配。如果匹配成功,路由器就会将数据包交给IP层进行处理。在IP层,路由器会根据数据包的IP头中的信息,在路由表中查找下一跳的信息,以确定应该从哪个网络接口发出去。在这个例子中,根据路由表的信息,数据包将会从右边的网络接口发出去。我们通常将路由器称为三层设备,因为它主要处理到第三层(即网络层)。实际上,路由器在转发数据包时会修改数据包的源MAC地址和目标MAC地址。

当从路由器右侧的网口发送出去的数据包到达网络2的交换机时,它将经历一次二层处理,并被转发到交换机右侧的网口。

最终,数据包将被转发到Linux服务器B。服务器B会检查数据包的目标MAC地址是否与自身匹配,如果匹配,则将MAC头部取下,并将数据包交给上一层。接下来,在IP层,服务器B会检查数据包的目标IP地址是否与自己匹配,如果匹配,则将IP头部取下,并将数据包交给上一层。在TCP层,服务器B会根据TCP头部中的序列号等信息验证数据包的有效性,并将数据包缓存起来,等待应用层读取。

应用层通过Socket监听特定端口,当读取数据时,操作系统内核会根据TCP头部中的端口号,将数据包发送给相应的应用程序进行处理。这样应用程序就可以读取并处理网络包了。

在应用层中,我们需要解析HTTP头和正文,这是由应用层来处理的。应用框架(如Tomcat等)通常会帮助我们解析和处理数据包(粘包问题等),因此我们不需要过多考虑网络层面的细节。通过解析,应用层能够得知客户端的请求,例如购买商品或请求网页。一旦应用层处理完HTTP请求,结果会被封装为HTTP网络包,通过Socket接口发送给内核。

接下来,内核会对数据包进行多层封装,从物理网口发送出去,经过网络2的交换机和Linux路由器,最终到达网络1。在网络1上,数据包经过网络1的交换机,再次经过Linux服务器A的层层解封装,然后通过Socket接口根据客户端的随机端口号发送给客户端应用程序,即浏览器。这样,浏览器就能够显示一个绚丽多彩的页面了。

需要注意的是,这个示例比较简单,所以返回请求的路径与发送路径相同。但在实际情况中,返回请求的路径不一定是原路返回,而是再次经过上述的网络处理逻辑。这是因为网络中的路由器会根据路由表选择最佳路径,以确保数据包能够快速、高效地到达目标设备。

即使在这个相对简单的网络环境中,发送数据包的过程也是非常复杂的。

总结

发送数据包是一个复杂的过程,涉及到多个层次的封装和解封装。不同层次的协议和设备在这个过程中扮演着不同的角色,确保数据包能够快速、高效地到达目标设备。在发送数据包的过程中,数据包会经过多个网络设备和路由器,每一步都需要进行相关的处理和解析。发送数据包的过程需要考虑到各个层次的处理和协议的兼容性,以确保数据包能够正确地到达目标设备,并被相应的应用程序处理。这个过程中涉及到的细节非常复杂,需要各个层次的协议和设备之间的配合和交互,才能实现数据的传输和交换。

与数据包的奇妙旅程:揭秘网络传输的7个关键步骤相似的内容:

数据包的奇妙旅程:揭秘网络传输的7个关键步骤

在发送数据包的过程中,不同层次的网络协议扮演着不同的角色。数据包在经过多层封装后,通过网络设备和路由器进行转发,并最终到达目标设备。在每个层次中,都会进行相应的处理和解封装,以确保数据包能够正确传输和被接收端处理。整个过程涉及到了物理层、数据链路层、网络层、传输层和应用层等多个层次的协议和设备。尽管在简化的示例中,发送数据包的过程相对简单,但实际情况中会更加复杂,需要通过路由表选择最佳路径来保证数据包的快速、高效传输。整个过程展示了网络分层结构的重要性和协同工作的复杂性。

零代码零硬件玩转华为云IoT,基于设备联动实时监控设备

本文分享自华为云社区《一键守护,实时洞察:华为云IoT设备联动,智能感知设备状态变化,精准触发告警通知【零代码零硬件玩转华为云IoT】》,作者:周周的奇妙编程。 前言 在前面我们已经体验过了设备接入、设备控制和数据长效存储三个方面的内容。(踏云而行:五步带你运用设备模拟器接入华为云IoT物联网平台,

MongoDB安全加固,防止数据库攻击删除勒索威胁

前言: 今天发现前段时间自己搭建的一个系统的MongoDB数据找不到了,觉得很奇妙,然后登上MongoDB数据库发现多了一个名为READ__ME_TO_RECOVER_YOUR_DATA的数据库,里面还有一个README的集合里面包含了下面描述的勒索信息。没错我的MongoDB数据库被攻击了,不过还

TCP协议的秘密武器:流量控制与拥塞控制

本文将深入探讨TCP协议的关键机制,包括流量控制和拥塞控制,以解密其在网络数据传输中的作用。通过了解TCP协议的工作原理,我们可以更好地理解网络通信的稳定性和可靠性,为我们的网络体验提供更安全、高效的保障。无论您是网络爱好者、技术从业者还是普通用户,本文将为您揭开TCP协议的神秘面纱,带您进入网络传输的奇妙世界。

IP协议:连接你我,掌握互联网的关键

IP协议作为互联网的基石,扮演着连接世界各个角落的重要角色。本文将带您深入了解IP协议的作用和位置,以及IP地址的重要性。无论您是对技术感兴趣的读者还是想了解互联网运作原理的人,本文都将为您揭开IP协议的神秘面纱,让您更好地理解数字世界的奇妙之处。

monaco-editor 的 Language Services

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:修能 这是一段平平无奇的 SQL 语法 SELECT id, sum(name) FROM student GROUP BY id ORDER BY id;

Mysql数据库部分管理命令极简学习总结

背景 今天遇到一个得很奇怪的问题. Mysql一个运行时间很长的select阻塞了对select里面左连接表做create index 操作的SQL 当时感觉不应该, 一直以为读锁不会与独占更新锁互斥. 经过与公司数据库大牛沟通, 得出结论如下: 在mysql做ddl语句的时候一定要特别小心 sel

配置式表单渲染器的实现

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。。 本文作者:奇铭(掘金) 需求背景 前段时间,离线计算产品接到改造数据同步表单的需求。 一方面,数据同步模块的代码可读性和可维护性比较差,相对应的,在数据同步模块开发新

AI 0基础学习,数学名词解析

AI学习过程中,常见的名词解析 ### 中位数 将数据从小到大排序,奇数列,取中间值,偶数列,中间两个值的平均,可做为销售指标 ### 众数 一组数据中,数值出现最多的那个。反映哪款产品,销量最好 ### 平均数 比赛中,去掉最高、最低分,然后以平均数做为选手的最终得分 ### 损失函数(loss

奇葩需求记录 各个系统取数据联表展示

首先,我刚进公司没多长时间,然后介绍一下背景,这边是个工厂,上了很多个系统搞信息化,这边是有自己的研发团队的(C#),还做了一套系统出来搞生产管理。为了实现信息化呢,这边叫了很多个外包团队开发很多个系统,有些系统语言也不一样(java,C#,我甚至看到了jsp,不过也有springcloud),数据