段,数据包和帧之间的差异

时间:2020-03-21 11:43:24  来源:igfitidea点击:

术语“段”,“包”,“数据报”,“帧”等在不同的书籍和文章中使用和重复使用以传达不同的含义,以至于现在变得完全令人困惑。
特别是在引入了不同层次的网络通信架构之后。

解决这个问题的一种好方法是将其称为“ PDU(协议数据单元)”。
不论我们是在谈论网络层,传输层还是物理层,PDU都是通用的,适用于所有情况。

当然,不同的层会在数据之上添加不同的字段,但它们仍可以称为PDU。
话虽如此,根据OSI参考分层体系结构,以下内容已被广泛接受。

传输层的PDU称为“段”,网络层的PDU称为“包”,数据链路层的PDU称为“帧”。

网络通信实际上是面向消息的。
就应用程序而言,要求可能是将文件发送到网络上的另一台计算机。
或者从远程服务器下载特定文件。
但是我们不能在一条消息中发送文件。
我们基本上必须将其切成不同的块,然后将其发送出去。
尽管可以对应用程序进行编程以实现此目的,但对于程序员而言,这将是很多开销。
然后,应用程序应该具有关于发送,确认和剩下的要发送的块,需要重发哪些块的逻辑,等等。
然后,我们还必须为应用程序将要创建的每个块提供特定的大小。
因此,基本上在应用程序编程上比较繁琐。

如果应用程序可以提交数据流而不用担心其他软件的块的大小和数量,而不是由应用程序进行所有的切片,分块和创建块(这是可能的)。
这正是TCP的能力。
因此,基本上,应用程序将向TCP发送字节流(完全不用担心大小和数据块。
它只不过是以字节为单位的数据流),而TCP将负责将其切片并以离散的消息形式发送。

因此,应用程序向TCP提供字节流,TCP负责将其创建为离散的消息。
这些在传输层(TCP出现其中)的离散消息称为“段”。

TCP段的外观如何?

TCP段可以同时执行多项操作。
我们知道以下事实:应用程序提供的字节流数据被切成不同的块(称为段),并分别传递给接收器。
一个单一的段携带数据以及另一段的确认。
TCP段由具有不同含义的不同字段组成。

这意味着每个段中都有大量空间用于传达不同的功能和控件(称为标题)。
数据块由这些标头包装。
通常,每个段都有一个专用的20字节部分,仅用于标头。

为了快速查看一个段,可用的最佳程序是tcpdump。
在一个终端上,我们可以启动命令sudo tcpdump -vvv -n host www.example.com,在另一终端上执行命令curl http://www.example.com

我们应该能够看到如下所示的消息流(在第一个终端中触发了tcpdump命令)(它还应该向我们显示HTTP协议消息/和网页响应,我已经整理了输出到最低限度)

192.168.40.27.59365 > 93.184.216.34.80: Flags [S], cksum 0x6331 (correct), seq 1889608132, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1304554704 ecr 0,sackOK,eol], length 0
93.184.216.34.80 > 192.168.40.27.59365: Flags [S.], cksum 0xdaa9 (correct), seq 3872433988, ack 1889608133, win 65535, options [mss 1460,sackOK,TS val 3936428224 ecr 1304554704,nop,wscale 9], length 0

上面两行显示了段标题。
所有TCP段都将具有相似的标头。
它将包含以下组件。

  • 源端口(59365以上)
  • 目的端口(80以上)
  • 标志(TCP中有很多标志,它们传达不同的含义。由于它们都需要特别注意,因此我将不逐一介绍这些含义,我们讨论的主题不是tcp标头。)
  • 校验和(可以用来验证段的完整性)

阅读:TCP段校验和如何工作?

  • 序列号(有助于识别接收器端的不同段)
  • 选项(其他一些重要的设置,它们传达了不同的含义。其中有很多。如前所述,我们将不涉及它的详细信息,因为我们将从本文的标题转移开来)

现在,让我们继续本文的下一个主题,即数据包。
然后将网段(包括数据块及其标题)从传输层向下传递到称为网络层的下一层。
这是IP地址介入的地方。
我认为在这三种(段,数据包和帧)中,数据包通常是在不同地方正确使用的东西。
由于数据包是具有IP地址的网络层中的离散消息,因此有时将它们称为“ IP数据包”。

与在段中传达不同含义的字段相似,数据包也有其自己的字段(标头)。
因此,数据包不过是内部的一个网段而已。
Packet在细分市场的顶部AD自己的字段。

下面提到在网络层中创建数据包时在段顶部添加的重要字段。

  • 源IP地址
  • 目的IP地址
  • TTL
  • 鉴别
16:45:57.867336 IP (tos 0x0, ttl 64, id 57113, offset 0, flags [DF], proto TCP (6), length 64)
    192.168.40.27.59365 > 93.184.216.34.80: Flags [S], cksum 0x6331 (correct), seq 1889608132, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1304554704 ecr 0,sackOK,eol], length 0
16:45:58.072306 IP (tos 0x28, ttl 54, id 0, offset 0, flags [DF], proto TCP (6), length 60)

上面显示的tcpdump输出与先前显示的完全相同。
在上一个中,我实际上有意删除了第一行和最后一行。
这是为了避免在我们讨论细分时产生混乱。

我们在第一行中看到的组件是数据包标头的一部分(以及第二行中显示的ip地址)。
此控件和功能信息(标题)至少消耗20个字节。

现在,将位于“数据包”内部的“段”向下传递到称为数据链路层的下一层。
数据链路层将在数据包的顶部添加自己的控制和功能字段(称为标头),以形成称为“帧”的内容。

什么是帧?

帧是用于表示参考模型中最低级别之一的协议数据单元(PDU)的名称。
它是数据链路层的PDU。
两台计算机或者两个网络设备之间的任何通信都始终使用MAC地址进行。
MAC地址不过是与网络接口卡关联的物理地址。

如果要将邮件传递到网络上的另一台计算机,它将首先搜索目标的物理地址。
实际上,有一种称为ARP的功能,可以将IP地址转换为物理地址。
ARP(地址解析协议)是网络中的核心组件之一。

每个具有联网功能的操作系统都具有称为ARP的功能。
它负责维护IP地址和相应的MAC地址(物理地址)之间的映射。

如果在表中找不到目标IP地址的映射,则通常发生的情况是将其转发到网关。
网关将在自己的系统中再次搜索ARP表,如果目的地被发现,它将把消息传递到正确的目的地物理地址。
如果找不到网关,网关将再次将其转发到下一个网关。
完成从网关到下一个网关的数据包转发,直到到达最终目的地。

推荐读物:地址解析协议如何工作?

与分段和数据包类似,帧还添加了自己的标头(控制帧的内容)。
关于帧,最重要的要了解的是它的标头。
帧(或者有效负载)内部的数据不过是来自网络层的IP数据包。

  • 来源Mac地址
  • 目标Mac地址
  • 数据(有效负载-它只是网络层给定的网络数据包)
  • 长度(数据的总长度-通常为1500个字节。)
  • 校验码(CRC)
数据包
传输层的PDU称为段网络层的PDU称为数据包数据链路层的PDU称为帧
端口号是段的一部分IP地址是数据包的一部分 MAC地址是帧的一部分