Networking 为什么TCP/IP头的大小必须是32位的倍数?

Networking 为什么TCP/IP头的大小必须是32位的倍数?,networking,tcp,network-programming,ip,Networking,Tcp,Network Programming,Ip,我已经搜索过了,但大多数书只是说有填充使标题成为32位的倍数。为什么它必须是32位的倍数 原因是 我将从一个类比开始——想象一个有1000个文件抽屉的巨大文件室。房间由100个独立的橱柜组成,每个橱柜有10个抽屉。每个抽屉可以放一张纸,你的秘书(处理抽屉中的数据)一次可以处理10张数据 尽管处理的数据量相同,但与“12号文件柜中的5-10号文件柜和13号文件柜中的1-5号文件柜”相比,告诉秘书“83号文件柜”更简单、更有效 这与CPU大致相同。CPU(秘书)通常不会一次处理一个字节(抽屉)。取而

我已经搜索过了,但大多数书只是说有填充使标题成为32位的倍数。为什么它必须是32位的倍数

原因是

我将从一个类比开始——想象一个有1000个文件抽屉的巨大文件室。房间由100个独立的橱柜组成,每个橱柜有10个抽屉。每个抽屉可以放一张纸,你的秘书(处理抽屉中的数据)一次可以处理10张数据

尽管处理的数据量相同,但与“12号文件柜中的5-10号文件柜和13号文件柜中的1-5号文件柜”相比,告诉秘书“83号文件柜”更简单、更有效

这与CPU大致相同。CPU(秘书)通常不会一次处理一个字节(抽屉)。取而代之的是,它们处理(多个抽屉),长度可达512位(64字节),因为一次处理一个完整的字通常比处理较小的数据块效率更高。现代CPU的典型字长为32或64位,64位CPU仅在最近10年左右才开始普及


由于CPU可以在一次操作中读取整个内存行(文件柜),因此访问地址为100-109的十个抽屉比访问地址为105-114的十个抽屉花费的时间更少,因为前者位于两个不同的机柜中,因此需要两次单独的内存访问。因此,访问地址以10的倍数开头的任何10个连续抽屉都会更快。对于CPU来说,这意味着更快地访问32位或64位的倍数地址。

我认为此链接可能会帮助您:这样有效负载将从32位边界开始,通过硬件可以更有效地从该边界进行复制。