Answers:
我们说的TCP segment
是协议数据单元,它由一个TCP报头和一个来自(上层)应用层的应用程序数据段(数据包)组成。传输层数据通常命名为segment
,网络层数据单元通常命名为,datagram
但是当我们使用UDP作为传输层协议时,我们不说UDP segment
,而是说UDP datagram
。我认为这是因为我们不对UDP数据单元进行分段(使用TCP时在传输层进行分段)。
原始的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具有“数据报”。
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
当您通过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图解”,对所有这些内容都有更好的解释。
诸如此类的“通用”术语是协议数据单元或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都有一个与有效载荷或数据不同的头。标头包含有关数据的信息,并可能包含另一端用于校验的校验和。