传输层会把由应用层来的数据分段,进行TCP或UDP的封装,以便数据在网络上传输。
TCP协议分段的大小由实际的TCP软件决定,既可以把几次写入的少量数据合并在一个TCP段中,也可以将一次写入的大量数据分割成几个部分,并封装在几个TCP分段中。
TCP分段的大小有两个决定条件:一是IP的负载能力,TCP段的大小(包括TCP段头)不能超过65535字节,二是网络的最大传输单元(MTU),实际环境中,MTU一般最大是几千字节,根据网络连接介质(简单说就是各种规格的网络连线)类型的不同,MTU的大小也不同。
在这两个条件中,其实最重要的还是MTU的大小,毕竟数据要通过网络连接介质进行传输,MTU实际上决定了TCP段的大小的上限。
在TCP分段中,实际的数据可以有也可以没有,也就是说,只发送一个段头也可以通过网络传递到目的端,TCP实体会将它视为一个普通的TCP段进行传输。
实际互联网络环境非常复杂,一个数据包在传输过程中可能会经过几个不同的网络。
如果在经过前几个网络时,该数据包可以顺利地通过(没有被分解),在到达某一个网络时,由于该数据包的MTU大于该网络所规定的MTU上限,它就会被处于网络边界的路由器自动拆解,形成几个适合在该网络中传送的新MTU。
这些新MTU包含更多的IP包头和TCP段头(这些头是原IP包头和TCP段头的复制品)。
在原有基础上这些操作无形中增加了经过网络的数据量(比原来更多的IP包头和TCP段头),同时也增加了系统的总开销。