TCP段和TCP数据包有什么区别?


16

TCP段不是TCP数据包的一部分吗?

这是我读到的:

段是通过TCP切成可传输大小并用TCP标头包装的一段应用程序数据

TCP标头本身不是由段组成吗?

Answers:


21

我们说的TCP segment是协议数据单元,它由一个TCP报头和一个来自(上层)应用层的应用程序数据段(数据包)组成。传输层数据通常命名为segment,网络层数据单元通常命名为,datagram但是当我们使用UDP作为传输层协议时,我们不说UDP segment,而是说UDP datagram。我认为这是因为我们不对UDP数据单元进行分段(使用TCP时在传输层进行分段)。

数据封装和TCP / IP协议栈


所有这些说明都适用于IETF维护的TCP / IP模型。
2013年

8

原始的TCP RFC在使用术语“段”方面有点模糊。

在某些情况下,术语“段”仅指正在传输的应用程序数据流的当前段,其中不包括TCP标头。例如,TCP“最大段大小”(MSS)是此消息中应用程序数据块的最大大小,不计算TCP头。

但是在其他情况下,术语“段”包括整个TCP消息,包括TCP标头。实际上,在至少一种情况下,规范提到了没有应用程序数据的TCP段(例如普通Acks)。

单个完整的IP消息就是一个“数据报”。

原始IP RFC将链路层消息称为“数据包”。IP数据报可以分为“碎片”,以适应小数据包网络上数据包大小的限制。

IEEE 802.3 /以太网链路层将单个连续的物理层传输称为“数据包”。数据包的MAC数据链路部分称为“帧”。帧以目标MAC地址开始,以帧检查序列结束。帧中可能包含IP数据报(或其片段)的部分称为“ MAC客户端数据字段”。

因此,从技术上讲,没有“ TCP数据包”或“ IP数据包”之类的东西。数据包是IP之下各层的术语。TCP具有“段”,而IP具有“数据报”。


2

TCP标头(也称为“段标头”)和有效载荷或数据或“段数据”构成了大小可变的TCP段。


2

TCP段称为数据报。通常,段或数据报是数据包。当数据报或数据包由网络层处理时,它将IP标头添加到数据中,并成为IP数据包。

传输层将数据分段为较小的单元,称为段,数据报或所谓的数据包。但是我们通常将它们称为细分。


2

tcp段只是一个概念,它与ip碎片整理有所不同

当您发送大于ip mtu的数据时,将其放入一个ip数据包中,但是ip层随后发现ip数据包太长而无法传输,因此它将大数据包分成几部分,每部分都具有相同的标识符,但具有不同的偏移量和数据长度。接收方负责收集所有片段,在接收到所有片段之后,它将把所有片段重新组装成一个完整的ip数据包,并将其推送到上层协议层。

但是tcp层有不同的行为。当您发送足够大的数据时,tcp层不会将数据放入一个tcp数据包中,然后将其拆分成几部分(但ip确实如此),它将一部分原始数据检索到一个tcp数据包中,然后将tcp数据包到ip层,tcp数据包的长度由mss确定,稍后它将剩余的数据的另一部分检索到另一个tcp数据包中,并重复该过程,直到所有数据都被传输为止。

如果tcp不使用mss,那太可怕了。假设您发送的数据大于mss,它将仅放入一个tcp数据包中(由于未使用mss而不会将数据拆分成小块),tcp数据包大于ip mtu,因此ip会将tcp拆分包成碎片。如果丢失任何一块,浪费时间和带宽,tcp数据包将重新传输

ps:tcp_mss = ip_mtu-tcp_header


1

标头不是由段组成的。标头始终具有相同的大小,并且必须完整。否则,该数据包将无法解码。

您所说的“段”是整个“数据包”,随后将其与其他数据包组合成TCP流。看到:

传输控制协议从数据流中接收数据,将其“分段”成块,并添加一个TCP标头以创建一个TCP段。


1

TCP从应用程序层接收数据,然后将其“切”成几个数据段。带有添加的TCP标头的原始数据。此标头的一部分是序列号,TCP协议在接收端使用该序列号以正确的顺序放置所有接收到的段(减去标头)并重新组合原始数据,然后将其传输到应用程序层。

因此,回答您的问题;“ TCP数据包”一词实际上并不存在。它称为“段”,它由标题和数据段组成。标头本身由几个“字段”组成,其中除其他外还包含序列号,校验和以及源端口和目标端口号。


1

当您通过TCP连接发送数据时,您发送的数据量可能超过了单个数据包中连接所允许的最大字节大小。在两个TCP端点(客户端和服务器)之间的连接时,“协商最大数量”(也称为MSS)(1)。OSI 4级协议TCP负责分散/聚集。这意味着您的数据流被分成较小的部分(称为段),并分别通过网络发送。另一方面,TCP层负责按照正确的顺序重新收集数据包,以像重新发送数据流一样重新构造数据流。没有什么可以告诉您分段将以与离开目的地相同的顺序到达目的地。这也是为什么对数据包进行编号的原因。更多,数据包被接收方一一确认(2),但有时可能会丢失数据包。然后,没有ACK将从分组的目的地返回到发射器。然后,发射器应重新发送它(这也是TCP的角色)。有时会正确接收到数据包,但发射器未收到确认(再次丢失数据包)。在这种情况下,发送方将重新发送它,但是接收方看到它已经收到了它(这是一个Dup数据包)并消除了它,但将确认重新发送给发送方。

为了提高吞吐量,发射器可以连续发送多个数据包,而不必等待上一个ack发送下一个数据包。它也是TCP协议的一部分,称为滑动窗口。发送的等待确认的数据包数量是有限的。

(1)实际上,根本没有协商,每个端点都告诉他能够处理的最大大小。此值不包括20个字节的IP标头,也不包括20个字节的TCP标头。(2)单个ACK也可以确认多个数据包。

请记住,数据报是在IP网络上或使用无连接协议(如UDP)发送的封装数据。数据包是面向TCP的面向连接协议的封装数据。段是在TCP上发送的数据流的一部分。请参阅W.Richard Stevens的 “ TCP / IP图解”,对所有这些内容都有更好的解释。


0

TCP段是一个数据包。段只是两台计算机之间TCP连接流的一部分。数据报是UDP术语中的“数据包”。


0

IP数据包由附加了数据的IP标头组成。数据是一个TCP标头和一段应用程序数据,称为TCP段。TCP段通常称为TCP数据包。


0

诸如此类的“通用”术语是协议数据单元或PDU。

LAYER # - OSI NAME     - COMMON PROTOCOL OR USE - PDU NAME
-------   ------------   ----------------------   --------------------------
Layer 1 - Physical     - Transceiver            - bits, or a physical signal
Layer 2 - Datalink     - Ethernet               - frame
Layer 3 - Network      - IP                     - packet
Layer 4 - Transport    - TCP                    - segment
Layer 5 - Session      - SIP                    - data, request, or response
Layer 6 - Presentation - Encryption/compression - data, request, or response
Layer 7 - Application  - HTTP                   - data, request, or response

第四层及以上的特定协议会使事情变得模糊(例如,到目前为止,我还不知道任何纯粹是会话协议的东西,也没有通用的“演示”协议这样的东西)但在许多软件/通讯堆栈中,它绝对是几乎独立的层)。

同样,如前所述,这些PDU中的每个PDU都有一个与有效载荷或数据不同的头。标头包含有关数据的信息,并可能包含另一端用于校验的校验和。


上层不是使用工作TPDU吗?请参阅books.google.de/books?id=daqV_KzkoSIC&pg=PA147
Janus Troelsen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.