2021-03-31 网络协议中, 段、包和帧之间的区别

“段”、“包”、“数据报”、“框架”等术语在不同的书籍和文章中被大量使用和重复使用,以传达不同的含义,现在已经变得完全令人困惑。特别是在介绍了网络通信的分层结构之后。

一个很好的方法来解决这个问题,就是把它们称为“PDU(协议数据单元)”。无论您谈论的是网络层、传输层还是物理层,术语PDU都是通用的,适用于所有领域。

当然,不同的层在数据之上添加不同的字段,但它们仍然可以被称为pdu。也就是说,根据OSI参考分层架构,下面是被广泛接受的。

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

网络通信实际上是以信息为导向的。就应用程序而言,需求可能是向网络上的另一台机器发送文件。或者从远程服务器下载特定的文件。但是您不能在一条消息中发送文件。你必须把它分成不同的部分,然后发送出去。虽然可以编程应用程序来做到这一点,但这将是程序员的大量开销。然后应用程序应该有关于哪些块被发送,哪些块被确认,哪些块有待发送,哪些块需要重新发送等等的逻辑。此外,您还必须为应用程序将创建的每个块提供特定的大小。这基本上是应用程序编程中比较繁琐的工作。

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

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

TCP段是怎样的?

TCP段可以同时做多项事情。我们知道这样一个事实,即由应用程序提供的字节流数据被分割成称为段的不同块,并分别交付给接收方。一个单段携带数据与另一个段的确认。TCP段由不同的字段组成,这些字段具有不同的含义。

这意味着每个段中有相当多的空间用于传递不同的函数和控件(称为头)。数据块由这些头包装。一般来说,每个段都有一个专用的20字节的段,仅用于头。

要快速查看一个片段,最好的程序是tcpdump。您可以在一个终端上启动命令sudo tcpdump -vvv -n主机www.example.com,并在另一个终端上执行命令curl http://www.example.com

您应该能够看到如下所示的消息流(在您启动tcpdump命令的第一个终端中)(它还应该向您显示HTTP协议消息/和web页面响应,我已经将输出缩减到最低限度)

192.168.40.27.59365 > 93.184.216.34.80: Flags [S], cksum 0x6331(正确),seq 1889608132, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1304554704 ecr 0,sackOK,eol],长度0

93.184.216.34.80 > 192.168.40.27.59365: Flags [S.], cksum 0xdaa9(正确),seq 3872433988, ack 1889608133, win 65535, options [mss 1460,sackOK,TS val 3936428224 ecr 1304554704,nop,wscale 9],长度0

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

源端口(59365以上);

目的端口(80以上)

标志(在TCP中有一长串标志,它们表达不同的含义。因为它们都需要特别注意,所以我不会一一讨论,而且我们讨论的主题不是tcp头。)

校验和(可以用来验证段的完整性)

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

序列号(有助于在接收端识别不同的片段)

选项(其他一些重要的设置,传达不同的含义。有很多这样的东西。正如前面所提到的,我们将从本文的标题出发,不再深入其细节)

 

现在让我们继续讨论本文中的下一个主题,即数据包。段(包括数据块及其头)然后从传输层向下传递到下一个称为网络层的层。这就是IP地址的作用所在。我认为在这三种(段、包和帧)中,包是在不同地方正确使用的。由于信息包是具有IP地址的网络层中的离散消息,所以它们有时被称为“IP信息包”。

与在段中表达不同含义的字段类似,包也有自己的字段(头)。所以一个数据包就是里面的一个段。包在段的顶部广告它自己的字段。

在网络层中创建包时,在段之上添加的重要字段如下所述。

源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(正确),seq 1889608132, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1304554704 ecr 0,sackOK,eol],长度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)

SegmentPacketFrame
PDU at Transport layer is called as segmentsPDU at network layer is called as Packet
PDU at data link layer is called as Frame
Port numbers are part of Segments
IP addresses are part of a Packet 

Mac addresses are part of Frames

 

Source: Difference Between Segments, Packets and Frames (slashroot.in)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值