为什么TCP头部没有数据长度信息而UDP有

为什么TCP头部没有数据长度信息而UDP有

 

先让我们看看IP,TCP,UDP的头部结构

1. IPv4 头部

ipv4_header

2. TCP和UDP头部
TCP_UDP_headers

可以看到IP的头部包换数据的长度,TCP的头部不包含数据长度,UDP的头部则包含。

从信息冗余的角度来看,UDP的长度信息是不需要的。

因为IPv4的头部已经包含了数据的长度信息,这里的数据如果当前的通讯协议是UDP,那么这个长度就包含了UDP的头部和UDP的数据,因为UDP的头部长度固定为8字节,那么这样就很容易的算出UDP的数据的长度了。

根据 《TCP/IP Illustrated Volume 1》,这个信息也是冗余的。这是Stevens关于这个问题的描述,关于Stevens是谁,为什么要引用他说的话,是因为他写了

TCP/IP Illustrated的1,2,3卷,而这本书可以说是解析TCP/IP协议的圣经。

那又是什么原因致使UDP的头部包含了这个冗余信息呢?

Stevens在卷2中提到很有可能是为了校验和校验,确切的说是32对齐,因为如