Featured image of post 数据包和帧

数据包和帧

关于数据包和帧的介绍

数据包和帧

什么是数据包和帧

数据包和帧是小块数据,当它们组合在一起时,会形成较大的信息或消息。但是,它们在 OSI 模型中是两个不同的东西。帧位于第 2 层 - 数据链路层,这意味着没有 IP 地址等信息。将此视为将信封放入信封中并将其寄走。第一个信封将是您邮寄的数据包,但一旦打开,其中的信封仍然存在并包含数据(这是一个帧)。

这个过程称为封装,我们在 3 号房间中讨论过:OSI 模型 。在这个阶段,可以安全地假设当我们谈论任何 IP 地址时,我们谈论的是数据包。当封装信息被剥离时,我们谈论的是框架本身。

数据包是在联网设备之间传输数据的一种有效方式,例如任务 1 中介绍的设备。由于这些数据是小块交换的,因此与一次发送大消息相比,整个网络中出现瓶颈的可能性更小。

例如,从网站加载图像时,此图像不会作为一个整体发送到您的计算机,而是在您的计算机上重建的小块。以下图为例来说明这个过程。猫咪的照片被分成三个包,到达计算机后被重建,形成最终的图像。

image-20250324092004403

数据包具有不同的结构,具体取决于要发送的数据包的类型。正如我们接下来将要讨论的那样,网络充满了标准和协议,它们充当了一组规则,用于定义如何在设备上处理数据包。互联网上连接了数十亿台设备,如果没有标准化,事情可能会很快崩溃。

让我们继续我们的 Internet 协议示例。使用此协议的数据包将具有一组标头,其中包含通过网络发送的数据的附加信息。

一些值得注意的标头包括:

Header 页眉 Description 描述
Time to Live 此字段为数据包设置一个到期计时器,如果它从未设法到达主机或逃逸,则不会阻塞您的网络!
Checksum 此字段为 TCP/IP 等协议提供完整性检查。如果更改了任何数据,此值将与预期值不同,因此会损坏。
Source Address 发送 数据包的设备的 IP 地址,以便数据知道要返回到何处。
Destination Address 数据包发送到的设备 IP 地址,以便数据知道下一步要传输到何处。

TCP/IP 三次握手

TCP (或 简称 Transmission Control Protocol)是网络中使用的另一种规则。

到目前为止,该协议与我们之前在本模块的 3 号房间中讨论的 OSI 模型非常相似。TCP/IP 协议由四层组成,可以说只是 OSI 模型的概括版本。这些层是:

  • Application 应用
  • Transport 运输
  • Internet 互联网
  • Network Interface 网络接口

与 OSI 模型的工作方式非常相似,当数据(或数据包)遍历 TCP 模型时,信息会添加到 TCP 模型的每一层。您可能还记得,这个过程被称为 encapsulation - 这个过程的反面是 decapsulation。

TCP 的一个定义特征是它是 基于连接的 ,这意味着 TCP 必须在发送数据之前在客户端和充当服务器的 设备之间建立连接 。

因此,TCP 保证发送的任何数据都将在另一端接收。这个过程被称为 三次握手,我们稍后会讨论。 下表比较了 TCP 的优缺点:

TCP 的优点 TCP 的缺点
保证数据的完整性。 需要在两个设备之间建立可靠的连接。如果未收到一小块数据,则无法使用整个数据块,必须重新发送。
能够同步两个设备,以防止彼此以错误的顺序被数据淹没。 慢速连接可能会使另一台设备成为瓶颈,因为该连接将始终保留在另一台设备上。
执行更多的流程以实现可靠性 TCP 比 UDP 慢得多,因为使用此协议的设备必须完成更多的工作 (计算)。

TCP 数据包包含从封装添加的称为报头的信息的各个部分。让我们解释下表中的一些关键标头:

Header 页眉 Description 描述
Source Port 源端口 此值是发送方打开的用于发送 TCP 数据包的端口。此值是随机选择的(从当时尚未使用的 0-65535 端口中)。
Destination Port 目标端口 此值是应用程序或服务在远程主机(接收数据的主机)上运行的端口号;例如,在端口 80 上运行的 Web 服务器。与源端口不同,此值不是随机选择的。
Source IP 源 IP 这是发送数据包的设备的 IP 地址。
Destination IP 目标 IP 这是数据包的目标设备的 IP 地址。
Sequence Number 序列号 当连接发生时,传输的第一条数据被赋予一个随机数。我们将在后面更深入地解释这一点。
Acknowledgement Number 鸣谢编号 为一条数据指定序列号后,下一条数据的编号将具有序列号 + 1。我们还将进一步更深入地解释这一点。
Checksum 校验和 此值提供 TCP 完整性。在记住输出的地方进行数学计算。当接收设备执行数学计算时,如果输出与发送的内容不同,则数据必须损坏。
Data 数据 此标头是存储数据(即正在传输的文件的字节)的位置。
Flag 旗 此标头确定任一设备在握手过程中应如何处理数据包。特定的标志将决定特定的行为,这就是我们将在下面解释的内容。

接下来,我们将继续讨论三方握手 - 该术语用于在两个设备之间建立连接的过程。 三方握手使用一些特殊消息进行通信 - 下表突出显示了主要消息:

步骤 消息 描述
1 SYN SYN 消息是客户端在握手期间发送的初始数据包。此数据包用于启动连接并将两个设备同步在一起(我们稍后将进一步解释)。
2 SYN/ACK 此数据包由接收设备(服务器)发送,以确认来自客户端的同步尝试。
3 ACK The acknowledgement packet can be used by either the client or server to acknowledge that a series of messages/packets have been successfully received. 客户端或服务器可以使用确认数据包来确认已成功接收一系列消息/数据包。
4 DATA 建立连接后,数据(例如文件的字节)将通过 “DATA” 消息发送。
5 FIN 此数据包用于在连接完成后干净(正确) 关闭连接。
# RST 此数据包会突然结束所有通信。这是最后的手段,表明在此过程中存在一些问题。例如,如果服务或应用程序无法正常工作,或者系统存在资源不足等故障。

下图显示了 Alice 和 Bob 之间的正常 Three-way 握手过程。在现实生活中,这将是在两个设备之间。

image-20250324092315229

任何发送的数据都会被赋予一个随机数字序列,并使用此数字序列并以 1 为增量进行重建。两台计算机必须就相同的编号规则达成一致,才能以正确的顺序发送数据。此顺序分三个步骤达成一致:

  1. SYN - 客户端:这是我的初始序列号 (ISN),用于 SYNchronise (0)
  2. SYN/ACK - 服务器:这是我用 (5,000) 记录 SYN 的初始序列号 (ISN),我现在确认您的初始编号序列 (0)
  3. ACK - 客户端:我确认您的初始序列号 (ISN) 为 (5,000),下面是我的 ISN+1 (0 + 1) 的一些数据
Device 初始编号序列 (ISN) 最终编号序列
客户端 (发件人) 0 0 + 1 = 1
客户端 (发件人) 1 1 + 1 = 2
客户端 (发件人) 2 2 + 1 = 3

TCP 协议关闭连接:

让我们快速解释一下 TCP 关闭连接背后的过程。首先, 一旦设备确定另一台设备已成功接收所有数据,TCP 将关闭连接。

由于 TCP 会在设备上保留系统资源,因此最佳做法是尽快关闭 TCP 连接。

要启动关闭 TCP 连接,设备将向另一台设备发送 “FIN” 数据包。当然,使用 TCP 时,另一台设备也必须确认此数据包。

让我们像以前一样使用 Alice 和 Bob 来演示这个过程。

image-20250324092456294

在图中,我们可以看到 Alice 向 Bob 发送了一个 “FIN” 数据包。因为 Bob 收到了这个,所以他会让 Alice 知道他收到了这个,并且他还想关闭连接(使用 FIN)。Alice 已经清楚地听到了 Bob 的声音,并会让 Bob 知道她承认了这一点。

UDP/IP 协议

User Datagram Protocol (UDP) 是另一种用于在设备之间传输数据的协议。

与其兄弟 TCP 不同,UDP 是一种 无 状态协议,不需要两个设备之间持续连接即可发送数据。例如,不会发生 Three-way hand shake,两个设备之间也没有任何同步。

回想一下 3 号房间中对这两个协议所做的一些比较:“OSI 模型”。也就是说,UDP 用于应用程序可以容忍数据丢失的情况(例如视频流或语音聊天)或不稳定的连接不是最终结果的情况。下表比较了 UDP 的优缺点:

UDP 的优势 UDP 的缺点
UDP 比 TCP 快得多。 UDP 不关心数据是否被接收。
UDP 让应用程序(用户软件)决定是否可以控制数据包的发送速度。 从这个意义上说,它对软件开发人员来说是相当灵活的。
UDP 不会像 TCP 那样在设备上保留连续连接。 这意味着不稳定的连接会给用户带来糟糕的体验。

如前所述,在两个设备之间建立连接时不会发生任何过程。这意味着不考虑是否接收数据,也没有像 TCP 提供的保护措施,例如数据完整性。

UDP 数据包比 TCP 数据包简单得多,并且标头更少。但是,这两种协议共享一些标准标头,下表中对此进行了注释:

Header 页眉 描述
Time to Live (TTL) 生存时间 (TTL) 此字段为数据包设置到期计时器,因此如果数据包从未成功到达主机或逃逸,它不会阻塞您的网络!
Source Address 源地址 发送数据包的设备的 IP 地址,以便数据知道要返回到何处。
Destination Address 目标地址 数据包发送到的设备 IP 地址,以便数据知道下一步要传输到何处。
Source Port 源端口 此值是发送方打开的端口,用于发送 UDP 数据包。此值是随机选择的(从当时尚未使用的 0-65535 端口中)。
Destination Port 目标端口 此值是应用程序或服务在远程主机(接收数据的主机)上运行的端口号;例如,在端口 80 上运行的 Web 服务器。与源端口不同,此值不是随机选择的。
Data 数据 此标头是存储数据(即正在传输的文件的字节)的位置。

接下来,我们将继续讨论通过 UDP 进行连接的过程与 TCP 等过程有何不同。 我们应该记住 UDP 是无状态的。连接期间不会发送确认。

下图显示了 Alice 和 Bob 之间的正常 UDP 连接。在现实生活中,这将是在两个设备之间。

image-20250324092646004

端口

也许正如他们的名字一样,端口是可以交换数据的重要点。想想港口和港口。希望停靠港口的船舶必须前往与船上的尺寸和设施相适应的港口。当船只排队时,它将连接到港口的港口 。例如,邮轮不能停靠在为渔船建造的港口,反之亦然。

这些端口强制规定了什么可以停放以及停在哪里——如果不兼容,它就不能停在这里。网络设备在相互通信时也使用端口来执行严格的规则。建立连接后(从 OSI 模型的房间调用),设备发送或接收的任何数据都将通过这些端口发送。在计算中,端口是介于 0 和 65535 (65,535) 之间的 数值 。

由于端口的范围可以在 0 到 65535 之间的任何位置,因此很快就会忘记哪个应用程序正在使用哪个端口。繁忙的港口一片混乱!值得庆幸的是,我们将应用程序、软件和行为与一组标准规则相关联。例如,通过强制通过端口 80 发送任何 Web 浏览器数据,软件开发人员可以设计一个 Web 浏览器(如 Google Chrome 或 Firefox)来以相同的方式解释数据。

这意味着所有 Web 浏览器现在都共享一个通用规则:数据通过端口 80 发送。浏览器的外观、感觉和易用性取决于设计师或用户的决定。

虽然 Web 数据的标准规则是 端口 80,但已为其他一些协议分配了标准规则。介于 0 和 1024 (1,024) 之间的 任何端口都称为公共端口。 让我们在下面探索一些其他协议:

Protocol 协议 端口号 描述
File Transfer Protocol (FTP) 21 此协议由基于客户端-服务器模型构建的文件共享应用程序使用,这意味着您可以从中心位置下载文件。
Secure Shell (SSH) 22 该协议用于通过基于文本的界面安全地登录系统以进行管理。
HyperText Transfer Protocol (HTTP) 80 该协议为万维网 (WWW) 提供支持!您的浏览器使用它来下载网页的文本、图像和视频。
HyperText Transfer Protocol Secure (HTTPS) 443 该协议的作用与上述完全相同;但是,安全地使用加密。
Server Message Block (SMB) 445 此协议类似于文件传输协议 (FTP);但是,除了文件之外,SMB 还允许您共享打印机等设备。
Remote Desktop Protocol (RDP) 3389 此协议是一种使用可视化桌面界面登录系统的安全方法(与 SSH 协议的基于文本的限制相反)。

我们只简要介绍了网络安全中更常见的协议。有关更多信息,您可以找到列出的 1024 个常用端口的表

这里值得注意的是,这些协议只遵循标准。即,您可以在标准端口以外的其他端口(在 8080 而不是 80 标准端口上运行 Web 服务器)上管理与这些协议交互的应用程序。但请注意,应用程序将假定遵循标准,因此您必须提供冒号 (:) 以及端口号。

使用 Hugo 构建
主题 StackJimmy 设计