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

时间:2015-03-02 03:18:24

标签: networking tcp network-programming ip

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

1 个答案:

答案 0 :(得分:2)

原因是memory alignment

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

告诉秘书"流程柜#83"更简单,更有效率与机柜12中的过程抽屉5-10和机柜13中的抽屉1-5相比,#34;虽然正在处理的数据量相同。

与CPU大致相同。 CPU(秘书)通常不能一次在一个字节(抽屉)上工作。相反,它们可以在words(多个抽屉)上工作,最长可达512位(64字节),因为一次处理整个字通常比处理较小的数据块效率高得多。现代CPU的典型字长为32或64位,64位CPU仅在过去10年左右才开始普及。

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