天天看點

IPv4協定及VLSM可變長子網劃分和CIDR無類域間路由

網際網路世界一切通信都将IP化。IT行業無論你用哪種語音(C++,Java,PHP等),無論你偏軟體或偏硬體,最大公約數之一可能就有IP。國家在搞三網融合,即Internet,電話網,有線電視網将全用IP資料包傳輸資料。可以說IP是網絡的基石。本篇是我對IP協定包括VLSM和CIDR的了解。

IP的責任簡單地說就是将資料從源傳送到目的地。IP協定被封裝在TCPIP 5層協定中的網絡層上,具體格式如下:(以下是我個人對IP標頭的了解,權威的請查閱wikipedia或RFC791,另文中出現的IP均指IPv4)

IPv4協定及VLSM可變長子網劃分和CIDR無類域間路由

1.版本(4位):

4或6,表示IPv4還是IPv6

2.首部長度(4位):

指明IP標頭部長度(不包含資料)。如沒有可選項長度是20 byte。可選項最大40 byte,是以IP標頭部最大長度是60 byte

3.優先級與服務類型(8位)(直接RFC791上截圖了):

IPv4協定及VLSM可變長子網劃分和CIDR無類域間路由

4.總長度(16位):

IP包的長度,總長度 - 首部長度 = 資料長度

5.辨別符(16位),标志(3位),段偏移量(13位):

三個結合在一起使用,用于資料分包。比如A->B->C,A的MTU是1500,B的MTU是1000,那B收到A的包轉發給C時就要分包:第一個包1000,第二個包500。

辨別符(16位):分包後,每個包上标記相同的值,以便區分哪些包原本是同一個包拆開來的。

标志(3位):第一位固定是0。第二位DF(Don't Fragment)為1時不切片,這樣B收到MTU1500的包就不能分包,無法轉發給C隻能直接丢棄。第三位MF(More Fragments)為1時表示後面還有切片。

段偏移量(13位)用于分包後合并時确定依次順序。

6.TTL(8位):

TTL本是想用做統計時間的,後來變為跳數,最大255,一般為64,每過一個路由器減1,到達目的IP前如果減到0,路由器就将該包丢棄,再通過ICMP回傳time exceeded資訊,這樣可以避免無限環路。

7.協定号(8位):

用于區分上層(傳輸層)資料。例如ICMP是1,TCP是6,UDP是17,EIGRP是88,OSPF是89

8.首部校驗和(16位):

校驗一下除資料部分外的標頭資訊以防被篡改。因為TTL值每經過一個路由器都會減1發生變化,是以每經過一個路由器都要重新校驗,這很讨厭,是以IPv6裡就沒有校驗和了。

9.源位址(32位),目标位址(32位):

(顧名思義)

10.可選項:

有4個選項:松散源路由選擇,嚴格源路由選擇,記錄路由,時間戳

松散/嚴格源路由選擇:用于控制沿途路徑。比如A->B1->C也可以A->B2->C,具體走哪條你可以将B1或B2的位址寫到這裡。差別是:嚴格裡必須規定沿途每個路由器,而松散可以隻給出沿途必須經過的一些“要點”

記錄路由:記錄沿途的IP位址

時間戳:沒啥用,路由器轉發時可以打個時間,但除非所有路由器的時間精确同步,否則沒什麼用

11.資料:

(顧名思義,裡面包含了上一層傳輸層的TCP/UDP頭部)

上面IP協定裡,源位址和目标位址就是家喻戶曉的IP位址。

IP位址格式是由網絡号和主機号(D類E類除外)合并而成,用點分10進制表示,共32位。分為ABCDE 5類IP位址:

IPv4協定及VLSM可變長子網劃分和CIDR無類域間路由

A類位址:

前8位為網絡号(首位固定0,後7位是網絡位址),後24位是主機号。

A類位址範圍:1.0.0.0 ~127.255.255.255 掩碼:255.0.0.0(掩碼的作用是區分網絡号和主機号)

網段中主機位全0的是該網段位址,主機位全1的是該網段的廣播位址。是以平時可用于單點傳播的A類IP位址範圍:1.0.0.1 ~127.255.255.254

B類位址:

前16位為網絡号(前2位固定10,後6位是網絡位址),後16位是主機号。

B類位址範圍:128.0.0.0 ~191.255.255.255 掩碼:255.255.0.0

網段中主機位全0的是該網段位址,主機位全1的是該網段的廣播位址。是以平時可用于單點傳播的B類IP位址範圍:128.0.0.1 ~191.255.255.254

C類位址:

前24位為網絡号(前3位固定110,後5位是網絡位址),後8位是主機号。

B類位址範圍:192.0.0.0 ~223.255.255.255 掩碼:255.255.255.0

網段中主機位全0的是該網段位址,主機位全1的是該網段的廣播位址。是以平時可用于單點傳播的B類IP位址範圍:192.0.0.1 ~223.255.255.254

D類位址:

用于多點傳播,已經沒有網絡号和主機号了,前4位固定1110,後28位用于多點傳播位址

D類位址範圍:224.0.0.0 ~ 239.255.255.255

E類位址:

用于科研。。。太高端一般接觸不到。同樣已經沒有網絡号和主機号了

D類位址範圍:240.0.0.0~ 255.255.255.255

有一些用于特殊用途的IP位址:

0.0.0.0:未指定IP

127.0.0.1:本地loopback測試位址

255.255.255.255:本地廣播位址

還有一些私有IP位址:

A類位址中:10.0.0.0~ 10.255.255.255(即10網段)

B類位址中:172.16.0.0~172.31.255.255(即172的後半網段)

C類位址中:192.168.0.0~192.168.255.255(即192.168網段)

私有IP位址無法在公網上被使用,但可以在本地被使用。可以用NAT将本地使用的私有IP位址轉換成公有IP位址來通路公網,以達到節約IP位址的目的。如企業内部不必每台主機都配一個公網IP,大家盡可使用私有IP位址,并共用多個公網IP來上網。

平時常用ABC 3類IP位址,以A類IP位址為例,隻有126個網絡,但每個網絡都有巨量的主機2^24=16777216。如果一個公司隻需要100台主機,那配置設定給該公司一個A類IP網段的話,将造成大量的IP位址浪費。是以通常隻配置設定一個C類位址,C類位址的主機号是8位,可供2^8-2=254台主機用(-2的原因上面說過了,主機号全0是該網段位址,全1是該網段廣播位址),雖然夠用,但該公司隻需求100台主機,仍舊造成IP位址浪費。是以需要VLSM(可變長子網路遮罩)子網劃分來更合理地配置設定IP位址。

VLSM子網劃分的規則:

子網數= 2^子網位數(子網位數 = 掩碼 - 主類網絡号,例如某B類IP的掩碼是27,則子網位數為27-16=11,是以子網數為2^11=2048)

主機數= 2^主機号-2(-2的原因上面說過了,主機位全0為網絡位址,全1為廣播位址)

塊大小=2^八位組内主機号(例如192.168.10.0 掩碼:255.255.255.192。C類IP主機号是第四個8位組,現在掩碼是192=11000000,意思是問第四個8位組借了前2位作為網絡号,是以第四個8位組内主機号是8-2=6位,塊大小為2^6=64)。得出塊大小後,用塊大小數字累加就能得到網絡号。

一個C類IP位址子網劃分的例子:

例如192.168.10.0 掩碼:255.255.255.192 (這種寫法很麻煩,192=11000000,即第四個8位組前2位是網絡号,總共網絡号是26位,可簡寫為192.168.10.0/26)

子網數為2^2=4,主機數為2^6-2=62,塊大小為2^6=64(每個8位組來計算,發生在第三個8位組)。4個子網分别為:

192.168.10.0/26 (單點傳播IP範圍:192.168.10.1 ~ 192.168.10.62)

192.168.10.64/26 (單點傳播IP範圍:192.168.10.65 ~ 192.168.10.126)

192.168.10.128/26 (單點傳播IP範圍:192.168.10.129 ~ 192.168.10.190)

192.168.10.192/26 (單點傳播IP範圍:192.168.10.193 ~ 192.168.10.254)

一個B類IP位址子網劃分的例子:

172.16.0.0/18

子網數為2^2=4,主機數為2^14-2=16382,塊大小為2^6=64(每個8位組來計算,發生在第三個8位組)。4個子網分别為:

172.16.0.0/18 (單點傳播IP範圍:172.16.0.1 ~ 172.16.63.254)

172.16.64.0/18 (單點傳播IP範圍:172.16.64.1 ~ 172.16.127.254)

172.16.128.0/18 (單點傳播IP範圍:172.16.128.1 ~ 172.16.191.254)

172.16.192.0/18 (單點傳播IP範圍:172.16.192.1 ~ 172.16.255.254)

一個B類IP位址子網劃分的例子2:

172.16.0.0/27

子網數為2^11=2048,主機數為2^5-2=30,塊大小為2^5=32(每個8位組來計算,發生在第四個8位組)。2048個子網分别為:

172.16.X.0/27

172.16.X.32/27

172.16.X.64/27

172.16.X.96/27

172.16.X.128/27

172.16.X.160/27

172.16.X.192/27

172.16.X.224/27 (第三位可以從0變化到255)

上面這樣子網劃分,比ABC主類位址能更合理配置設定IP。下面再介紹一種更能節省IP位址的子網劃分方法:

例如172.16.0.0/16,要劃分成2個200台主機,3個2台主機,3個24台主機,該怎麼劃分子網呢?遵從的原則是從大到小:

1.先算200台主機:2^n-2 >= 200,n為8,即主機号為8,網絡号為24

172.16.0.0/24變化發生在第3個8位組,因為第3個8位組全是網絡位,是以塊大小為2^0=1,子網:

172.16.0.0/24 (可以任選2個供200台主機用,例如選前2個。供200台主機用)

172.16.1.0/24 (供200台主機用)

172.16.2.0/24 (未配置設定)

......

172.16.255.0/24

2.算24個主機:2^n-2 >= 24,n為5,即主機位為5,網絡位為27

在172.16.2.0/24基礎上劃分子網:172.16.2.0/27變化發生在第4個8位組,塊大小為2^5=32:

172.16.2.0/27 (可以任選3個供24台主機用,例如選擇前3個。供24台主機用)

172.16.2.32/27 (供24台主機用)

172.16.2.64/27 (供24台主機用)

172.16.2.128/27 (未配置設定)

.....

172.16.2.224/27

3.最後算2個主機:2^n-2 >= 2,n為2,即主機位為2,網絡位為30

在172.16.2.128/27基礎上劃分子網:172.16.2.0/30變化發生在第4個8位組,塊大小為2^2=4:

172.16.2.128/30 (這3個供2台主機用)

172.16.2.132/30

172.16.2.136/30

通過上面若幹VLSM的例子可用看出,VLSM是從右向左問主機号借用網絡号,那CIDR就是網絡号向左偏移,相當于主機數擴大了。更官方點說:

繼續閱讀