網路位元組序具體知識介紹
最近有網友想了解下網路位元組序的知識,所以小編就整理了相關資料分享給大家,具體內容如下.希望大家參考參考!!!
首先小編要給大家科普下什麼是網路位元組序?
網路位元組序轉化為主機位元組序時,一定要注意是否需要轉換。網路位元組序是確定的。網路位元組順序是TCP/IP中規定好的一種資料表示格式,它與具體的CPU型別、作業系統等無關,從而可以保證資料在不同主機之間傳輸時能夠被正確解釋。網路位元組順序採用big endian排序方式。
轉換函式
為了進行轉換 bsd socket提供了轉換的函式 有下面四個
htons把unsigned short型別從主機序轉換到網路序
htonl 把unsigned long型別從主機序轉換到網路序
ntohs 把unsigned short型別從網路序轉換到主機序
ntohl 把unsigned long型別從網路序轉換到主機序
在使用little endian的系統中 這些函式會把位元組序進行轉換
在使用big endian型別的系統中 這些函式會定義成空巨集
同樣 在網路程式開發時 或是跨平臺開發時 也應該注意保證只用一種位元組序 不然兩方的解釋不一樣就會產生bug.
注意事項
1、網路與主機位元組轉換函式:htons ntohs htonl ntohl ***s 就是short l是long h是host n是network***
2、不同的CPU上執行不同的作業系統,位元組序也是不同的,參見下表。
處理器 作業系統 位元組排序
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian
網路位元組序
網路上傳輸的資料都是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它將這個位元組作為高位位元組還是低位位元組處理,是一個比較有意義的問題;
UDP/TCP/IP協議規定:把接收到的第一個位元組當作高位位元組看待,這就要求傳送端傳送的第一個位元組是高位位元組;而在傳送端傳送資料時,傳送的第一個位元組是該數值在記憶體中的起始地址處對應的那個位元組,也就是說,該數值在記憶體中的起始地址處對應的那個位元組就是要傳送的第一個高位位元組***即:高位位元組存放在低地址處***;
由此可見,多位元組數值在傳送之前,在記憶體中因該是以大端法存放的; 所以說,網路位元組序是大端位元組序; 比如,我們經過網路傳送整型數值0x12345678時,在80X86平臺中,它是以小端發存放的,在傳送之前需要使用系統提供的位元組序轉換函式htonl******將其轉換成大端法存放的數值;如下圖2所示:
那麼在進行網路通訊時是否需要進行位元組序轉換?
相同位元組序的平臺在進行網路通訊時可以不進行位元組序轉換,但是跨平臺進行網路資料通訊時必須進行位元組序轉換。
原因如下:網路協議規定接收到得第一個位元組是高位元組,存放到低地址,所以傳送時會首先去低地址取資料的高位元組。小端模式的多位元組資料在存放時,低地址存放的是低位元組,而被髮送方網路協議函式傳送時會首先去低地址取資料***想要取高位元組,真正取得是低位元組***,接收方網路協議函式接收時會將接收到的第一個位元組存放到低地址***想要接收高位元組,真正接收的是低位元組***,所以最後雙方都正確的收發了資料。而相同平臺進行通訊時,如果雙方都進行轉換最後雖然能夠正確收發資料,但是所做的轉換是沒有意義的,造成資源的浪費。而不同平臺進行通訊時必須進行轉換,不轉換會造成錯誤的收發資料,位元組序轉換函式會根據當前平臺的儲存模式做出相應正確的轉換,如果當前平臺是大端,則直接返回不進行轉換,如果當前平臺是小端,會將接收到得網路位元組序進行轉換。
- 網路位元組序具體知識介紹
- 兒童攝影室內作品
- 如何開啟不太安全的網址讓電腦不中毒
- 航模基礎知識_航模常用術語
- 酒店文員工作總結範文
- 寶劍出鞘歇後語
- 經典甜蜜浪漫愛情語錄_情感語錄
- 勞務外包合同範本
- 周國平論成功
- 小學英語素質報告書學生評語
- 春夏秋冬的經典古詩
- 英國留學簽證常見問題解答
- 恰到好處的拐彎抹角
- 進口成人羊奶粉哪個牌子好
- 小學生應該瞭解的勵志詩句
- 音樂聽課學習心得體會精選_培訓心得
- 湖北省適合種植什麼水果最好
- 女生的快速美白的方法
- 小學生一年級古詩詞手抄報的素材
- 高中生物細胞器知識點總結
- 康熙字典五行屬金的字
- 康熙字典五行屬木的字
- 康熙字典五行屬水的字
- 康熙字典五行屬火的字
- 康熙字典五行屬土的字