2012-08-29 48 views
1

我注意到FastCGI協議定義了一個7字節的記錄(通信中使用的數據結構)標題和1字節的填充。其他結構也在必要時填充。想知道這個字節是否會改變任何東西,我定時發送和接收7個和8個字節緩衝區的1000000個連續的數據,並且發現......沒有什麼特別的。幾次執行提供的數據如此多變,甚至不值得平均。 (testing code在通過TCP發送時填充數據結構

如果我必須通過TCP發送7字節數據是值得它添加一個字節,所以我發送和讀取操作8字節緩衝區?來自哪裏以及如何知道填充是否合適?如果套接字是Unix文件套接字或INET套接字,它有什麼不同?如果發件人和收件人位於同一主機上,它會不同嗎?

回答

1

這又回到了不同的架構alignment requirements,這裏的主要目的是最大限度地減少都必須嚴格對齊平臺進行數據拷貝,並採取更快的執行速度的優勢在商品PC硬件上。這就是爲什麼像IP和TCP這樣的大多數底層協議在32位或64位邊界對齊的頭文件中都有整數。

+0

我知道數據結構對齊問題,但認爲高層次,獨立於平臺的網絡協議規範不會關心它們... –

+0

它會改變它是什麼類型的協議。例如,基於文本的HTTP並不在意。任何二進制文件通常都會執行 - 畢竟,最終所有內容都歸結爲物理機器上的位和字節。 –