3.IP地址、結構體、數據排列
下面部分決定了,我們需要改變一下。
首先,我們不談代碼!首先我們談關於IP地址和端口。當然我們要談關於套接字API怎麼存儲和維護IP地址和其他數據。
3.1 IP地址,版本4和6
在一個過去的好日子當BenKenobi准備呼叫Obi Wan Kenobi,要通過IPv4的路由系統。格式如:192.0.2.111.
事實上,現在大部分Internet仍然在使用IPv4。
此處省略若干…
由於IPv4的地址限制,我們需要IPv6。(IPv4的地址是32bit的;而IPv6是128bit的)
IPv6格式如:2001:0db8:c9d2:aee5:73e3:934a:a5ae:9551.
IPv4轉換為IPv6,比如IPv4地址為192.0.2.33,那麼IPv6地址就是:::ffff:192.0.2.33
3.1.1. 掩碼
子網掩碼——屏蔽一個IP地址的網絡部分的“全1”比特模式。對於A類地址來說,默認的子網掩碼是255.0.0.0;對於B類地址來說默認的子網掩碼是255.255.0.0;對於C類地址來說默認的子網掩碼是255.255.255.0。利用子網掩碼可以把大的網絡劃分成子網,也可以把小的網路歸並成大的網絡。
互聯網是由許多小型網絡構成的,每個網絡上都有許多主機,這樣便構成了一個有層次的結構。IP地址在設計時就考慮到地址分配的層次特點,將每個IP地址都分割成網絡號和主機號兩部分,以便於IP地址的尋址操作。
IP地址的網絡號和主機號各是多少位呢?如果不指定,就不知道哪些位是網絡號、哪些是主機號,這就需要通過子網掩碼來實現。
子網掩碼的設定必須遵循一定的規則。與二進制IP地址相同,子網掩碼由1和0組成,且1和0分別連續。子網掩碼的長度也是32位,左邊是網絡位,用二進制數字“1”表示,1的數目等於網絡位的長度;右邊是主機位,用二進制數字“0”表示,0的數目等於主機位的長度。這樣做的目的是為了讓掩碼與ip地址做AND運算時用0遮住原主機數,而不改變原網絡段數字,而且很容易通過0的位數確定子網的主機數(2的主機位數次方-2,因為主機號全為1時表示該網絡廣播地址,全為0時表示該網絡的網絡號,這是兩個特殊地址)。只有通過子網掩碼,才能表明一台主機所在的子網與其他子網的關系,使網絡正常工作。
子網掩碼的術語是擴展的網絡前綴碼不是一個地址,但是可以確定一個網絡層地址哪一部分是網絡號,哪一部分是主機號,1 的部分代表網絡號,掩碼為0的部分代表主機號。子網掩碼的作用就是獲取主機 IP的網絡地址信息,用於區別主機通信不同情況,由此選擇不同路由。根據子網掩碼格式可以發現,子網掩碼有:0.0.0.0;255.0.0.0;255.255.0.0;255.255.255.0;255.255.255.255五種,其中A類地址的默認子網掩碼為255.0.0.0;B類地址的默認子網掩碼為255.255.0.0;C類地址的默認子網掩碼為:255.255.255.0。
3.1.2 端口
IP地址就像一條街上的酒店,而端口就像該酒店的房間號碼。
(Think of the IP address as the street address of ahotel, and the port number as the room number.)
摘自 xiaobin_HLJ80的專欄