通过TCP发送时的数据结构填充

时间:2012-08-29 17:30:00

标签: sockets networking

我注意到FastCGI协议定义了一个7字节的记录(通信中使用的数据结构)标头,带有1字节填充。其他结构也在必要时填充。想知道这一个字节是否发生了变化,我计时了1000000个7字节和8字节缓冲区的顺序发送和接收,并且发现......没什么特别的。几次执行提供的数据如此可变,甚至不值得平均。 (testing code

如果我必须通过TCP发送7字节数据是否值得添加一个字节,所以我的发送和读取操作8字节缓冲区?来自哪里以及如何知道哪种填充是合适的?如果socket是Unix文件套接字或INET套接字,它会有所不同吗?如果发件人和收件人在同一台主机上,它会有所不同吗?

2 个答案:

答案 0 :(得分:1)

不,填充与网络无关。

通常会看到以这种方式定义的结构,以便它们在4字节边界(或64位OS上的8字节)上对齐。请点击此处了解更多信息:

http://en.wikipedia.org/wiki/Data_structure_alignment

答案 1 :(得分:1)

这可以追溯到不同架构的alignment requirements,这里的主要目的是最大限度地减少必须在严格对齐平台上进行的数据复制,并利用商用PC硬件上更快的执行速度。这就是为什么像IP和TCP这样的大多数低级协议在32或64位边界上对齐的标头中都有整数。

相关问题