2009年9月4日

Big, Little Endian && Network Btye Order

Endian一詞源自於格列佛遊記,小人國為水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開而爭論,爭論的雙方分別被稱為Big-endians和Little-endians。

1980年,Danny Cohen在其著名的論文"On Holy Wars and a Plea for Peace"中為平息一場關於位元組該以什麼樣的順序傳送的爭論而引用了該詞。


何謂Big Endian?

首先得先知道電腦儲存資料的方向是由記憶體的低位址到高位址。以下內容均假設資料大小為8 bytes

記憶體
----地址遞增方向--->
口 口 口 口 口 口 口 口

如果是從資料的最高位數字開始存,則為Big Edian

何謂Little Endian?
如果資料是從其最低位數字開始儲存則為Little Endian。

那標題所說得Network Byte Order是什麼呢?Network Byte Order就是網路傳輸時資料儲存的順序。Network Byte Order為Big Endian。

IPv4 && IPv6

IPv4的IP address有32bits, IPv6的則有128bits

為了閱讀方便,我們把IPv4的address以8bits為一組,分割成四個十進位數字
而IPv6則是以16bits為一組,分割成8個十六進位數字
例如:
2001:0db8:c9d2:0012:0000:0000:0000:0051
2001:db8:c9d2:12::51 (這兩個address都是同一個)
因為IPv6的address常有一堆0,所以可以省略