TCP/IP網絡編程之字節序和網絡字節序


一、概要

本篇文章主要講解基於.net中tcp/ip網絡通信編程中的網絡字節序。在自我進步的過程中記錄這些內容,方便自己記憶的同時也希望可以幫助到大家。技術的進步源自於分享和不斷的自我突破。

技術交流QQ群:580749909  歡迎交流有問必答,文章尾有個人的微信公眾號有興趣的小伙伴多多關注。

二、簡介

在此之前我們需要了解清楚幾個概念。

CPU架構:人們常說的x86 x64是一種架構,但是他有32位的和64位的。32位的叫x86 ,后來出現基於它的64位版,就叫x64。

操作系統位數 :64位的系統是基於64位處理器而來的,所以64位的系統能在64位的處理器上運行,但是不能在32的處理器上運行!

而因為64位處理器是基於32位的X86而來,所以向后兼容,支持32位的系統!

情況如下:

64位處理器(X64):64位系統,32位系統

32位處理器(X86):32位系統。64位處理器也能跑16位系統。

只不過進了長模式之后,不再兼容16位指令了而已。開機之后如果沒進長模式,還是可以跑16位指令的。

什么是字節序和網絡字節序?

網絡字節序 是TCP/IP中規定好的一種數據表示格式,跟CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。

主機字節序,即字節在電腦中存放時的序列與輸入(輸出)時的序列是先到的在前還是后到的在前。

 只要是Intel或AMD的x86/x64架構就一定是小端主機字節序。

 

三、主要內容

為什么會有“字節序”的概念,因為有不同架構的CPU所以每種CPU的保存數據方式均不同。

CPU向內存保存數據的方式有兩種,相對應解析方式也有2種:

大端序(Big Endian):高位字節存放到低位地址。

小端序(Little Endian):高位字節存放到高位地址。

整數中0x12345678, 0x12是最高位字節,0x78是最低位字節。因此大端程序中先保存最高位字節0x12(最高位字節0x12存放到低位地址)

先保存的是最低位字節0x78。從以上分析可以看出,每種CPU的數據保存方式不同。因此代表CPU 數據保存數據方式的主機字節序在不同CPU中,也各不相同。

大端序系統傳輸數據0x1234時為考慮字節序問題,直接以0x12、0x34的順序發送。結果接收端以小端方式保存數據,因此小端序接收的數據編程了0x3412。

這樣傳輸小端序系統不是沒法用了嗎?這時候就約定統一處理方式,統一按照大端序來處理就行了。怎么處理呢.net中有專門的函數來處理這個問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM