应用层实体(例如client或server process)间交换的PDU成为应用数据(application data),其中在TCP应用进程之间交换的是没有长度限制的单个双向字节流,在UDP应用进程之间交换的是其长度不超过UDP发送buffer大小的单个记录record,在SCTP(stream control transmission protocal)应用进程之间见换的是没有总长度限制的单个或多个双向记录流。传输层实体(例如对应某个port的传输层协议代码的一次运行)间见换的PDU成为消息message,其中TCP的PDU称为分节segment。消息(或分节)的长度是有限的。
在TCP传输层中,发送端TCP把来自应用进程的字节流数据(即由应用进程通过一次次输出操作写出到发送端TCP socket中的数据)按顺序经过分割后封装在各个字节中传送给接收端tcp,其中每个字节所封装的数据既可能是发送端应用进程单次输出操作的结果,也可能是连续数次输出操作的记过,而且单个分节既可能对应完整的这些输出结果,也可能对应部分的输出结果,具体取决于可在连接建立阶段由对端通告的最大分节大小(maximum segment size,MSS)以及外出借口的最大传输单元(maximum transimission unit,MTU)或外出路径的路径MTU(如果网络层具有路径MTU发现功能,如IPv6)。分节除了用于承载应用数据外,也用于建立连接(SYN分节)、终止连接(FIN分节)、夭折连接(RST分节)、确认数据接收(ACK分节)、推送待发数据(PSH分节)和携带紧急数据指针(URG分节),而且这些功能(包括承载数据)可以灵活组合。UDP传输层相当简单,发送端UDP就把来自应用进程的单个记录整个封装在UDP消息中传送给接收端UDP。
SCTP引入了称为块(chunk)的数据单元,ACTP消息就由一个公共头部加上一个或多个块构成:公共头部类似UDP消息的头部,仅仅给出源宿端口号和整个SCTP消息的校验和;块则既可以承载数据(成为DATA块),也可以承载控制信息(计有SACK块,INIT,INIT ACK,COOKIE ECHO,COOKIE ACK,SHUTDOWN,SHUTDOWNACK,SHUTDOWNCOMPLETE,ABORT,ERROR,HEARTBEAT和HEARTBEAT ACK,总称为控制块)。发送端SCTP把来自应用进程的(一个或多个)记录流数据按照流内顺序和记录边界封装在各个DATA块中,并DATA块头部记上各自的流ID。一个记录通常对应一个DATA块;对于过长的记录,发送端SCTP既可以像UDP那样拒绝发送,也可以把它们拆分到多个DATA块中以便发送,接收端SCTP收取后把它们组合成单个记录上传。作为传输层PDU的SCTP消息既可以只单个块(DATA块和控制块),也可以在接口MTU的限制下包含多个块(称为块的捆绑,控制块在前,DATA块在后),不过INIT,INITACK和SHUTDOWNCOMPLETE块不能跟任何其他块捆绑。SCTP收发两端均独立处理捆绑在同一个消息中的各个块,鉴于此,我们可以直接把块作为传输层PDU看待。
网络层实体间交换的PDU称为IP数据报(IP datagram),其长度有限:IPv4数据报最大65535字节,IPv6数据报最大65575字节。发送端IP把来自传输层的消息(或TCP分节)整个封装在IP头部和所承载的传输层数据(即网络交换的PDU称为桢frame)其长度取决于具体的接口。IP数据报由IP头部和所承载的传输层数据(即网络层的SDU)构成。过长的IP数据报无法封装在单个帧中,需要先对其SDU进行分片(fragmentation),再把分成的各个片段冠以新的IP头部封装到多个帧中。在一个IP数据报从source到destination的传送过程中,分片操作既可能发生在source,也可能发生在途中,而其逆操作即重组(reassembly)一般只发生在destination端;SCTP为了传送过长的记录采取了类似的分片和重组措施。
TCP/IP协议族为了提高效率会尽可能避免IP的分片/重组操作;TCP根据MSS和MTU限定每个分节的大小以及SCTP根据MTU分片重组过长记录都是这个目的(SCTP的块捆绑则是为了在避免IP分片/重组操作的前提下提高块传输效率);另外,IPv6禁止途中的分片操作(基于其路径MTU发现功能),IPv4也尽量避免这种操作。不论是否分片,由IP作为链路层的SDU传入链路层,并由链路层封装在帧中的数据称为分组(packet,俗称包)。可见一个分组既可能是一个完整的IP 数据报,也可能是某个IP数据报的SDU的一个片段被冠以新的IP头部后的结果。MSS是应用层TCP与传输层之间的接口属性,MTU则是网络层和链路层之间的接口属性。