摘要:在計算機網絡中,IP地址是TCP/IP協議的核心,同時也是教學中的重點難點問題。很多人對子網劃分一直存在某些誤區,而且要花費大量的時間在十進制和二進制的轉換上。這里將為大家介紹IP地址的發展過程,以幫助大家更好地理解IP地址;同時也為大家介紹一種利用十進制進行子網規劃的方法,希望能為有需要之人提供參考和借鑒。
關鍵詞:IP地址;子網掩碼;子網規劃;“與差”運算;十進制
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)17-21391-04
1 引言
TCP/IP通訊協議起源干上世紀七十年代中葉美國軍方的ARPA網絡。其發展應用至八十年代初,開始風靡全球,現已成為了事實上的國際互聯網絡通訊協議標準。IP地址是TCP/IP協議的核心,同時也是教學中的重點難點問題。目前市面上一些相關方面的專著對IP地址及子網劃分的介紹都比較簡略,對于初學者來講,這無疑阻礙了他們進一步深入了解和認識IP地址以及子網劃分方法。而且某些專著上面關于IP子網規劃時劃分子網數為,這與實際應用當中不太相符;而另外有一些專著上面卻是,可為什么會有兩種不同的標準,這讓初學者頗感困惑,因而產生了對IP地址及子網規劃的錯誤認識。
另一方面,即便初學者沒有認識上的誤區,對于子網規劃時大量的十進制數和二進制數的轉換也頗感頭痛。
本文主要針對上述問題,以IP地址的發展過程為基礎,以大量實例的分析來向讀者介紹IP地址,以求幫助讀者走出IP地址理解的誤區;另外,筆者經過長期的網絡課程教學經驗總結,提出一套以十進制數來劃分子網的方法,希望能為有需要之人提供參考和借鑒。
2 IP地址編址的發展過程
2.1 早期IP地址
自從1969年美國國防部授權ARPANET進行互聯網的試驗,就宣告了互聯網的誕生,IP地址也隨之啟用。開始時,由于主機數量很少,IP地址主要用于區分不同主機,人們對IP地址的使用相當自由。但隨著主機的增多,這種現象的很多弊端也顯露出來,如路由表過大、IP地址管理混亂等。隨著許多分類協議逐步被推出,這種現象也在逐漸改觀,這階段使用的IP地址可稱為早期IP地址。
2.2 分類的IP 地址
為了解決IP地址存在的上述問題,使IP地址能夠適應不同網絡規模的需求,在1981年就通過了相應的標準協議,這個標準將IP地址進行了分類。每一類地址都由兩個固定長度的字段組成,其中一個字段是網絡號 net-id,它標志主機(或路由器)所連接到的網絡,而另一個字段則是主機號 host-id,它標志該主機(或路由器)。1982年,IPv4標準的確定,將IP地址擴展為32位二進制的格式。
兩級的 IPv4地址可以記為:
IP 地址 ::= { <網絡號>, <主機號>}
根據網絡號和主機號所占位數的不同,以及第一字節前幾位的不同,將IPv4的地址分為A、B、C、D、E五類,如圖1。
在五類地址中,實際上只有A、B、C三類是用以分配給主機使用的,另外,主機號為全0或全1的地址分別表示網絡地址和廣播地址,也是不作分配的。分類IP地址雖然比早期的IP地址有了很大的進步,但這種分類IP地址仍然存在以下問題:
1)IP 地址空間的利用率有時很低。
2)給每一個物理網絡分配一個網絡號會使路由表變得太大因而使網絡性能變壞。
3)兩級的 IP 地址不夠靈活。
2.3 三級子網編址
針對兩級IP地址的缺陷,1985年專家們提出了三級分類方案. 即拿出原本用于主機位的若干位做子網位, 即一個IP地址包括三部分:net—id,subnet—id和host—id,這種做法叫劃分子網(subnetting) 。劃分子網的標準便成為因特網的正式標準協議。三級IP地址結構定義為:
IP地址 ::= {<網絡號>, <子網號>, <主機號>}
為了識別IP地址的網絡號、子網號、主機號,引入了子網掩碼的概念。子網掩碼也由32位二進制數組成,其中網絡號和子網號為全“1”,主機號為全“0”。用子網掩碼判斷IP地址所屬的網絡地址的方法是用IP地址與相應的子網掩碼進行“AND”運算。為了描述這個問題,下面將用示例進行說明:
【示例1】:有一個C類IP地址為192.9.200.15,其默認的子網掩碼為255.255.255.0。則它的網絡號可按如下步驟得到:
1)將IP地址192.9.200.15和子網掩碼255.255.255.0轉換為二進制;
2)將兩個二進制數邏輯與(AND)運算后,結果即為網絡地址;
結果為192.9.200.0,即網絡地址為192.9.200.0。
由于劃分子網是向主機號部分借高位來進行的,因此在進行子網號計算時,我們也要按照二進制高位的權重計算。例如一個C類地址借3位劃分子網,則三位子網位表示的子網號如表1所示:
表1 借3位劃分子網的子網號
根據子網劃分標準RFC950中,不能使用二進制全0或全1作為子網標識,如上表子網號為0和224的將不能使用。因此,劃分子網數時利用公式:子網數=2n-2(n為借的位數)來計算,而計算各主機數則用公式:主機數=2m-2 (m為主機位的位數)。
劃分子網雖然在一定程度上解決了早期的分類IP地址利用率低的問題,但是由于在劃分子網時為全0和全1的子網號不能用,以及每個子網的子網地址及廣播地址也不能分配等問題,劃分子網實際上仍然存在地址流失的問題。另外,對于像B類地址的分配,很少公司能夠具有容納65534臺主機的規模,無論如何劃分子網也無法對B類地址充分利用。
2.4 無分類編址(CIDR)
為了解決三級IP地址存在的問題,1987 年提出的RFC 1009標準就指明了在一個劃分子網的網絡中可同時使用幾個不同的子網掩碼。使用變長子網掩碼 VLSM (Variable Length Subnet Mask)可進一步提高IP地址資源的利用率。CIDR 消除了傳統的 A 類、B 類和 C 類地址以及劃分子網的概念,因而可以更加有效地分配 IPv4 的地址空間。CIDR使用各種長度的“網絡前綴”(network-prefix)來代替分類地址中的網絡號和子網號。IP 地址從三級編址又回到了兩級編址,其格式定義為:
IP地址::= {<網絡前綴>, <主機號>}
CIDR使用“斜線記法”(slash notation又稱為CIDR記法)來表示一個IP地址構成,即在IP地址后面加上一個斜線“/ ”,然后寫上網絡前綴所占的比特數(這個數值對應于三級編址中子網掩碼中比特 1 的個數)。CIDR 將網絡前綴都相同的連續的 IP 地址組成“CIDR地址塊”。為了說明“地址塊”的概念,下面我們看一個例子:
【示例2】:試計算一個地址塊128.14.32.0/20的最小地址和最大地址。
由于采用了20位的網絡前綴,所以主機號用12位二進制表示。因此,這個地址塊可以用表2來表示:
其中,上表中方框內相同的部分即為網絡前綴;主機號由于不能為全0或全1,所以最小可用IP地址就為“10000000 00001110 00100000 00000001”即128.14.32.1,最大可用IP地址即為“10000000 00001110 00101111 11111110”即128.14.47.254。
值得一提的是,RFC1812標準提出以前,子網號是不能為0或1的,并且至少要有兩位長。但在一個CIDR領域,子網號就是網絡前綴的一種延伸。如果沒有前綴,那么子網號也就不存在了。從CIDR觀點來看,這種對子網號的限制是沒有意義的,可以安全地忽略。因此,在CDIR領域進行子網劃分時,計算子網數時就要用以下公式: (n為借的位數);而主機數的計算和三級IP地址計算主機數相同。
3 傳統的劃分子網方法
為了更具體說明問題,下面利用一個實例來說明劃分子網的方法(非CIDR領域):
【示例3】:如果需要將一個C類網絡193.71.56.0劃分4個可用子網,每個子網要求20臺主機。請寫出各子網地址、可用IP地址范圍、廣播地址。
步驟1:確定要向主機借的位數:
利用公式:2n-2≥sub(其中n和sub分別表示借的位數和子網數)求出n值。本例中,求出n≥3,即至少借3位才能滿足劃分為4個子網的要求。
步驟2:確定子網的主機數需要位數:
利用公式: 2p-n-2≥host(其中,p表示二級IP地址中主機位的位數,n和host分別表示借的位數和每個子網的主機數),本例中,p=8,host=20,求得n≤3,即最少要保留5位主機位才能滿足每個子網20臺主機的要求。因此,由上述兩個步驟可以確定借3位作為子網號。
步驟3:確定子網掩碼:
本例子網掩碼為:11111111.11111111.11111111.11100000,即為255.255.255.224。
步驟4:制定表格寫出網絡地址、可用IP地址范圍、廣播地址
按照表1介紹的方法,借3位劃分的子網號分別為:000,001,010,011,100,101,110,111,其中000和111不可用。則第一個可用子網為001,即193.71.56.32。依此類推,193.71.56.64、193.71.56.96、193.71.56.128、193.71.56.160、193.71.56.192也是子網地址。接下來以第一個可用子網為例求可用IP地址范圍及廣播地址,如圖2所示。
則第一個可用子網的可用IP地址范圍: 193.71.56.33~193.71.56.62,廣播地址為:193.71.56.63。同理可求得其他各子網的網絡地址、可用IP地址范圍、廣播地址,將所求繪制成表格,如表3所示:
4 十進制快速劃分子網方法
若使用【示例3】中步驟4的方法求得各子網的網絡地址、可用IP地址范圍、廣播地址,也就是利用二進制的轉換來計算,其工作量是顯而易見的。下面,筆者將介紹一種快捷的方法通過十進制數運算來實現。為了描述方便,以下論點都將以B、C類IP地址為對象,而A類地址大家可由此論文自我推導。
我們注意到,一個子網的網絡地址、可用IP地址范圍及廣播地址存在以下關系:
最小可用IP地址=網絡地址+1(1)
最大可用IP地址=廣播地址-1(2)
廣播地址=下一個子網網絡地址-1(3)
下面,我們來看看子網掩碼和網絡地址存在的關系:
【定義】:若將一個未劃分子網之前的二級廣播地址B和劃分子網之后的子網掩碼M作以下運算:B的網絡號和M的對應位作“AND”運算,而B的主機號和M的對應位作減法運算,這里姑且將該方法稱為“與差”運算,符號記為“-”。(4)
例如【示例3】中,由步驟3求得子網掩碼為255.255.255.224,則將193.71.56.255和該子網掩碼進行與差運算:
若用 ,將其轉換成二進制運算:
與差運算的結果為:192.71.56.31,而該地址剛好是第一個子網的廣播地址,而該子網號由于為全0是不作分配的。實際上,當熟練應用與差運算之后,根本沒有必要再轉換成二進制運算,直接就可以用十進制數計算得到。
根據(3)、(4)式,易得:
第一個可用子網=(B -M)+1(B-M定義見(4))(5)
此例中,求得:
(192.71.56.255\"-\"255.255.255.224)+1=192.71.56.32
所以,由(3)、(4)、(5)可知,
第一個可用子網ID=256-子網掩碼最后一個不為255的字節值(7)
如【示例3】中,第一個可用子網ID=256-224=32。
另外,我們觀察到【示例3】中步驟4所列表格中,所有子網的網絡地址都是32的整數倍,這是為什么呢?其實道理非常簡單,二進制數還有以下規律:
an2n+x+an-12n-1+x+…a22x+1+a12x=k2x (8)
(其中,n和k都為整數,a1 …an 為0或1,且至少有一值為1)
如:11100000(十進制數為224)是00100000(十進制數為32)的7倍,01000000(十進制數為64)是00100000的2倍等。因此,由(8)可知,
子網的網絡ID=k*第一個可用子網ID(k=0, 1, 2, 3…i)(9)
其中,k*第一個可用子網ID≤2h-1-(h為未借位前的主機位數,n為借的位數,j為借位后主機位的第j+1位的權重,h, n, j均為已知。其實,不等式的右邊即為最大的子網ID)。 (10)
例如一個C類網絡192.168.1.0的子網掩碼為255.255.255.192,則根據(7)、(9)、(10),各子網的網絡分別為:0、64、128、192。此時,(9)式中k的值分別對應于0、1、2、3,為什么k=4不行呢?因為 (細心的讀者將會留意到,該值就是借位之后的子網掩碼中最后一個不為255的字節十進制數)。
對于B類地址,若借位出現跨字節的情況,則
例如一個B類網絡172.16.0.0的子網掩碼為255.255.255.192,則根據(7)、(9)、(10)、(11),其子網ID分別為:0.0,0.64,0.128,0.192,1.0,1.64…255.0,255.64,255.128,255.192。
5 利用十進制快速劃分子網方法示例
下面,我們將用上面介紹的十進制快速劃分子網的方法來解決【示例3】的問題:
步驟1,2,3同【示例3】。
步驟4中,首先我們根據(7)求得第一個可用子網ID為:256-224=32;
再根據(9)、(10)可知各子網ID分別為0,32,64,96,128,160,192,224,填入表格相應欄中;
又由(3)式可知各子網的廣播地址分別為:31,63,95,127,159,191,223,255,填入表格相應欄中;
再由(1)、(2)便可求得各子網的可用IP地址范圍,填入表格相應欄中。
最后,去掉子網號為0和224的以外,其余6個子網都為可用子網。
6 總結
IP地址的發展過程見證了IP地址規劃方法的演變,本文的撰寫希望能夠幫助讀者走出對IP地址認識的誤區。同時,筆者所介紹的十進制快速子網規劃法如若能夠熟練掌握,在IP子網規劃問題上,將為讀者節省大量數制轉換的時間,甚至可以利用口算就能進行子網規劃。
參考文獻:
[1] 林生.計算機網絡與因特網[M].機械工業出版社,2005.
[2] 吳功宜.計算機網絡[M].北京:清華大學出版社,2003.
[3] 謝瓊,夏宇.IP地址資源不足的解決方法[J].貴州工業大學學報:自然科學版,2001.
[4] 張成霞,趙培元.通過實驗透析子網掩碼的作用[J].濰坊教育學院學報,2005(4).
[5] RFC文檔[EB/OL].http://www.rfc.net,2004-09.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文