面試官問:講講IP地址的分配原理
一、網絡模型介紹
在計算機網絡中有著名的OSI七層協議體系結構,概念清楚,理論完整,但是它既復雜又不實用。TCP/IP體系結構則不同,得到了廣泛的應用。最終結合OSI和TCP/IP的優點,采用了一種只有五層協議的體系結構,本文的講述的IP都是基于五層協議模型中的網絡層。
二、分類的IP地址
IP地址的表示方法
IP地址就是給英特網上的每個主機(路由器)的每個接口分配一個在全世界范圍內是唯一的32位的標識符。其組成第一個字段是網絡號,第二個字段是主機號。一個主機號在前面的網絡號所指明的網絡范圍內必須是唯一的,所以一個IP地址在整個網絡中都是唯一的。目前分為A、B、C、D、E 五類IP地址。
- 在A、B、C 三類地址中灰色的部分即為網絡號,網絡號的前三位是類別位,分別是0,10,110。也就是說我們可以憑借這個類別位置來判斷網絡類別。
- 32位的總長度,由于A、B、C 三類網絡號的長度的不同,導致A、B、C 類地址的主機號字段的字節數分別為3、2、1(一個字節8位)。
- D 類地址的網絡號為1110,用于多播(一對多通訊)。
- E 類地址的網絡號為1111,保留以后使用。
因此我們一般使用的就是ABC三類網絡地址,IP地址是32位的二進制代碼,為了提高可讀性,把32位的IP地址中的每8位用等效的十進制表示出來(點分十進制),于是我們日常生活中常見的IP地址就出現了。例如:IP地址,128.11.3.31,轉化為二進制為 100000000 00001011 00000011 00011111 ,可以看出類別位為 10,可以判斷為一個B類地址。
三、常用IP地址的指派范圍
1. 網絡號指派范圍
(1) A類地址網絡號占用一個字節,但是由于有一位是類別位,只有7位可供使用,但是由于規定,網絡字段全0是個保留字段表示本網絡,而127(01111111)是另外一個保留字段,作為本地軟件的環回測試。
我們常見的127.0.0.1表示本機,原因也是出自這里。
所以A類地址可以指派的網絡號個數為(27-2).
(2) B類網絡地址網絡號有兩個字節,前兩位為10已經固定,只剩下14位可用,由于這14位無論怎么取值都不會使得網絡號為全0或者全1,單實際上規定,規定B類最小網絡地址為128.1.0.0。
因此B類地址可指派的網絡號個數為(214-1).
(3) C類地址有3個字節的網絡字段號,前三位固定110,只有剩下21位可用,同樣C類地址可指派的最小網絡地址也是192.0.1.0。
因此C類地址可指派的網絡號個數為(221-1).
2. 主機號指派范圍
由于主機號有規定,全0的主機號代表IP地址是“本主機”所連接到的單個網絡地址(例,一主機地址為5.6.7.8,則該主機所在的網絡地址為5.0.0.0),而全1則表示“所有的”,即表示該網絡上的所有主機。
- A類地址的主機號是由三個字節,24位組成,所以每一個A類網絡中可分配的主機個數為(224-2).
- B類地址的主機號是由兩個字節,16位組成,所以每一個B類網絡中可分配的主機個數為(216-2).
- C類地址的主機號是由一個字節,8位組成,所以每一個C類網絡中可分配的主機個數為(28-2).
3. 總結IP指派范圍
綜上網絡號和主機號的指派描述可知,IP地址空間共有232個地址。
- 所有A類地址共有(27-2)∗∗(224-2)個,大約231,占50%;
- 所有B類地址共有(214-1)∗∗(216-2)個,大約230,占25%;
- 所有C類地址共有(221-1)∗∗(28-2)個,大約229,占12.5%;
- 所以可以這樣來表示一個A類IP地址 n.x.y.zn.x.y.z,若1≤n≤1261≤n≤126,0≤x,y,z≤2550≤x,y,z≤255,其中 x,y,zx,y,z不同時為0也不能同時為255.
- 所以可以這樣來表示一個B類IP地址 n.m.x.yn.m.x.y,若128≤n≤191128≤n≤191,0≤m≤2550≤m≤255,0≤x,y≤2550≤x,y≤255,其中 I. 當n=128n=128時,m≠0m≠0; II. x,yx,y不同時為0也不能同時為255;
- 所以可以這樣來表示一個C類IP地址 n.m.k.xn.m.k.x,若192≤n≤223192≤n≤223,0≤m,k≤2550≤m,k≤255,1≤x≤2541≤x≤254,其中 當n=192n=192時,k≠0k≠0.
4. IP地址和硬件地址
從層次角度來看,硬件地址是數據鏈路層和物理層使用的地址(常稱作MAC地址),而IP地址是網絡層和以上各層使用的地址,是一種邏輯地址。在網絡層我們進行數據報文從IP1傳輸到IP2,無論我們中間經過多少次轉發,從網絡層來看,源地址始終是IP1,目的地址始終是IP2。但是從數據鏈路層來看,顯然就不是這樣了,這些是物理地址,很有可能從源節點經過多次中間節點的物理地址的轉變才能到達目的節點。而IP地址和物理地址的之間的轉化則需要依靠兩個重要的協議ARP(地址解析協議),RARP(逆地址解析協議)。IP地址通過ARP轉化成物理地址,物理地址可以通過RARP轉化成相應的IP地址。
四、子網和超網
簡單的來說就是如何來管理一個IP地址下的多臺主機。
1. 子網
現在假設這樣一個場景,一個數據報起目的地址是145.13.3.10(在子網 145.13.3.0中),已經到達路由器R1(145.13.0.0),那么這個路由器怎么將它轉發到145.13.3.0呢?我們并不知道目的地址是否進行了子網的劃分。這就引出了子網掩碼的概念了,子網掩碼也是32位,由一串1和0組成,子網掩碼中的1對應于IP地址中的網絡號位置+子網網絡號位置,子網掩碼中的0對應與IP地址中現在的主機號位置。我們只要將IP地址和子網掩碼進行“與”運算,如果進行子網的劃分,就立刻得出要找的子網的網絡地址,如果沒有進行子網劃分(有默認的子網掩碼),則直接能夠得出該IP地址的網絡地址出來。
- A類地址的默認子網掩碼是255.0.0.0
- B類地址的默認子網掩碼是255.255.0.0
- C類地址的默認子網掩碼是255.255.255.0
2. 超網
無分類編址CIDR,使用變長的子網掩碼,可以進一步提高IP地址的資源利用率。有兩個特點:
- 第一,消除了傳統的ABC類地址及劃分子網的概念,CIRD把32位的IP地址劃分成為兩個部分,網絡前綴和剩下的部分,表示方法為,在IP地址后面加上“/”,然后寫上網絡前綴所占位數。
- 第二,把網絡前綴相同的IP地址組成一個CIDR地址塊,例如,IP地址 128.14.35.7/20 用二進制表示 100000000 00001110 00100011 00000111,所以我們很容易可以得出這塊地址中最小地址為128.14.32.0,即 100000000 00001110 00100000 00000000,最大地址為128.14.47.255,即 100000000 00001110 00101111 11111111.
為了更加方便進行路由選擇,CIDR使用32位的地址掩碼,1的個數就是網絡前綴的長度,如上面所舉例中的/20的地址塊的地址掩碼是 11111111 11111111 11110000 00000000因此可以看出,網絡前綴越短,其地址塊所包含的地址就越多,這樣可以根據實際情況更加有效的分配IPv4的地址空間。