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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 在发送数据包的过程中,不同层次的网络协议扮演着不同的角色。数据包在经过多层封装后,通过网络设备和路由器进行转发,并最终到达目标设备。在每个层次中,都会进行相应的处理和解封装,以确保数据包能够正确传输和被接收端处理。整个过程涉及到了物理层、数据链路层、网络层、传输层和应用层等多个层次的协议和设备。尽管在简化的示例中,发送数据包的过程相对简单,但实际情况中会更加复杂,需要通过路由表选择最佳路径来保证数据包的快速、高效传输。整个过程展示了网络分层结构的重要性和协同工作的复杂性。

发送数据包

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

就像下面的示意图所展示的那样,在部署在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接口根据客户端的随机端口号发送给客户端应用程序,即浏览器。这样,浏览器就能够显示一个绚丽多彩的页面了。

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

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

总结

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

相关文章
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
143 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
7月前
时标网络图绘制步骤
时标网络图绘制步骤
时标网络图绘制步骤
|
7月前
双代号网络图绘制步骤
双代号网络图绘制步骤
双代号网络图绘制步骤
|
7月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】Linux 追踪数据包在网络中的路径 traceroute命令 使用指南
【Shell 命令集合 网络通讯 】Linux 追踪数据包在网络中的路径 traceroute命令 使用指南
197 0
|
19天前
|
域名解析 运维 网络协议
网络诊断指南:网络故障排查步骤与技巧
网络诊断指南:网络故障排查步骤与技巧
75 7
|
1月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
29天前
|
数据采集 Java API
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。
|
2月前
|
网络协议 网络架构
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
53 0
|
7月前
|
安全 测试技术 网络架构
【专栏】编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。
【4月更文挑战第28天】本文介绍了编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。通过实际案例分析,展示了如何成功完成割接,确保业务连续性和稳定性。遵循这些步骤,可提高割接成功率,为公司的网络性能和安全提供保障。
731 0
|
4月前
|
SQL 安全 网络安全
网络安全漏洞与加密技术:提升安全意识的关键步骤
【8月更文挑战第31天】在数字时代的浪潮中,网络安全已成为保护个人信息和企业资产的前沿防线。本文将深入探讨网络安全的重要性,分析常见的安全漏洞,介绍加密技术如何加固这道防线,并强调提升个人和组织的安全意识的必要性。通过实例和代码演示,我们将一窥网络防御的艺术,旨在启发读者构建更安全的网络环境。