簡體   English   中英

TCP / IP上網絡數據傳輸的終結性

[英]Endianess of network data transmissions over TCP/IP

從很久以前開始,我就一直試圖解決這個問題。 盡管對於某些具有指定字節序的VM的虛擬機並沒有真正的好處,但這並不能達到特定的效果。 我知道,就像99.9999%的使用套接字通過TCP / IP發送數據的人一樣,該協議為傳輸元素(如目標地址,端口等)指定了字節序。 我不知道的事情是是否要求有效載荷采用特定格式以防止不兼容

例如,假設我開發了一個不是表示層的協議,並且由於當今很少使用字節序設備的優勢,我決定將其設置為字節序少(例如,播放器的位置等已傳送)以小端順序排列)。 例如,用於游戲引擎的網絡模塊,其中延遲很重要,字節轉換會花費大量時間。 當然,地址,端口以及所有與協議相關的數據都必須在big endian中指定,這是強制性的,我說的是有效負載,僅此而已。

該協議是否可以在大型endian機器上開箱即用(當然,一旦收到傳輸,就翻譯所需內容)? 還是因為數據的順序不同而導致IP協議或此類協議的校驗和計算錯誤,並且如果不使用raw_sockets,程序員將無法控制它們?

由於整個解釋可能會產生誤導,請隨時提出澄清。

非常感謝你。

我不知道的事情是是否要求有效負載采用特定格式以防止不兼容。

它沒有,也沒有辦法告訴。 對於TCP來說,它只是一個字節流。 取決於應用協議來決定字節順序,並且由兩端的實現者來正確地實現它。 有使用big-endian的約定 ,但沒有強制性。

應用層協議規定了它們自己的字節序。 但是,按照慣例, 為了在平台之間保持一致性,應該以網絡字節順序(大端)發送多字節整數值,例如使用平台提供的hton...() (主機到網絡)和ntoh...() (網絡到主機)功能在代碼中的實現。 在小端系統上,它們將執行必要的字節交換。 在大型字節序系統上,它們是無操作的。 這些函數提供了一個抽象層,因此代碼不必為此擔心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM