【Linux網絡編程】IP地址介紹

什麼是 IP 地址
IP 地址(Internet Protocol Address)也稱爲網間地址、網際地址。IP地址是指互聯網協議地址(英語:Internet Protocol Address,又譯爲網際協議地址),是IP Address的縮寫。IP地址是IP協議提供的一種統一的地址格式,它爲互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異。

IP 地址是 TCP/IP 協議棧 裏的網絡層地址方案,IP地址是一種用來對網絡設備的邏輯標識。

舉個生活中的例子,如果我要寄一封信給湖北的朋友,就需要知道朋友的地址信息,比如:湖北省武漢市江夏區XX路XX號,我只要知道這個地址,並且在寫信的時候,在信封上目的地寫上這個地址就可以了。

如果放到一個網絡裏,一臺網絡設備要跟另外一臺網絡設備通信,就需要知道目的地的IP地址。

IP 地址的格式
TCP/IP中規定每個IP地址都是32bit,取值範圍也就是2的32次方,共“4294967296”個IP地址。

IP地址一共分成四段,每段8bit,如果換算成十進制,每段的取值範圍是從0~255

計算機一般都會將IP翻譯爲二進制,而我們個人用戶,對二進制並不敏感,而改成使用點分十進制來表示IP,一共分爲四段,用小數點隔開,每段的取值範圍共有256個,從0~255(爲2的8次方)

比如“192.168.1.1”、“202.100.98.3”,就是點分十進制的IP地址表示方法。

IP 地址分類
IP地址,一共分成了5類,範圍分別如下:

A 類 IP:從0.0.0.0 – 127.255.255.255,共有16777216個IP

B 類 IP:從128.0.0.0 – 191.255.255.255,共有65536個IP

C 類 IP:從192.0.0.0 – 223.255.255.255,共有256個IP

D 類 IP:從224.0.0.0 – 239.255.255.255

E 類 IP:從240.0.0.0 – 255.255.255.255

需要注意的是,其中:

A、B、C這三類IP地址,是給用戶使用的

D 類 IP 地址是組播協議使用

E類 IP 地址被保留起來,被留作科研機構使用,現在已經不用了,轉向IPv6

公有IP地址(公網IP)
組建一個企業級網絡,需要去向“電信運營商ISP”申請一個接入Internet的寬帶,同時ISP還會給我們分配一個或多個IP地址,這些IP地址可以供我們企業內部上網,這些ISP分配給我們的IP,就是公有IP。

公有地址(Public address,也可稱爲公網地址)由Internet NIC(Internet Network Information Center因特網信息中心)負責。這些IP地址分配給註冊並向Internet NIC提出申請的組織機構。通過它直接訪問因特網,它是廣域網範範內的。

公有IP地址的範圍:

A類的公有IP:

1.0.0.0~9.255.255.255

11.0.0.0~126.255.255.255

B類的公有IP:

128.0.0.0~172.15.255.255

172.32.0.0~191.255.255.255

C類的公有IP:

192.0.0.0~192.168.255.255

192.169.0.0~223.255.255.255

私有IP地址(私網IP)
我們企業或家庭內部組建局域網用的IP,一般都會用私有IP。

私有地址(Private address,也可稱爲專網地址)屬於非註冊地址,專門爲組織機構內部使用,它是局域網範疇內的,私有IP禁止出現在Internet中,在ISP連接用戶的地方,將來自於私有IP的流量全部都會阻止並丟掉。直接了當的說,私有 IP 不能直接上網。

如果在企業內部的電腦要訪問Internet,則需要在企業邊界上用“NAT技術”將私網IP轉成公網IP才能正常的上網。

私有IP地址的範圍:

A類私有IP地址:

10.0.0.0~10.255.255.255

B類私有IP地址:

172.16.0.0~172.31.255.255

C類私有IP地址:

192.168.0.0~192.168.255.255

參考資料:David_xtd

IP地址簡介(二)

    這裏主要介紹在網絡上傳輸數據時候所需要的IP地址的相關信息。相關內容主要包括:IP地址分類、子網劃分、子網掩碼、無分類編址(CIDR)、使用子網掩碼時分組的轉發過程。可做爲日常劃分子網設置時的參考。

 

1、IP地址

=========================================

    IP地址是一個32位的二進制數,用來在網絡中唯一標識一臺計算機。IP地址由因特網名字與號碼指派公司(ICANN,即:Internet Corporation for Assigned Names and Numbers)分配。我國用戶可向亞太網絡信息中心(APNIC,即:Asia Pacific Network Information Center)申請IP地址(需繳費)。

    IP地址的編址方法共經歷了三個階段:(1)分類的IP地址(1981)。(2)子網的劃分(1985)。(3)構成超網(1993,也叫無分類編址方法,簡稱CIDR)。後面在適當之處會詳細介紹。

 

 

2、分類的IP地址

=========================================

    爲了方便IP尋址,將所有IP地址所在的網絡劃分爲A、B、C、D和E五類,IP地址由網絡ID(也叫網絡號)和主機ID(也叫主機號)兩部份組成。每種類型的網絡對其IP地址中用來表示網絡ID和主機ID的位數作了明確的規定。

    A類地址用IP地址前8位表示網絡ID,後24位表示主機ID。表示網絡ID的第一位必須以0開始,其他7位可以是任意值,當其他7位全爲0是網絡ID最小,即爲0;當其他7位全爲1時網絡ID最大,即爲127。網絡ID不能爲0,它有特殊的用途,用來表示所有網段,所以網絡ID最小爲1;網絡ID也不能爲127;127用來作爲網絡迴路測試用。所以A類網絡網絡ID的有效範圍是1-126共126個網絡,每個網絡可以包含224-2臺主機。

    B類地址用IP地址前16位表示網絡ID,後16位表示主機ID。表示網絡ID的前兩位必須以10開始,其他14位可以是任意值,當其他14位全爲0是網絡ID最小,即爲128;當其他14位全爲1時網絡ID最大,第一個字節數最大,即爲191。B類IP地址第一個字節的有效範圍爲128-191,共16384個B類網絡;每個B類網絡可以包含216-2臺主機(即65534臺主機)。

    C類地址用IP地址前24位表示網絡ID,後8位表示主機ID。表示網絡ID的前三位必須以110開始,其他22位可以是任意值,當其他22位全爲0是網絡ID最小,IP地址的第一個字節爲192;當其他22位全爲1時網絡ID最大,第一個字節數最大,即爲223。C類IP地址第一個字節的有效範圍爲192-223,共2097152個C類網絡;每個C類網絡可以包含28-2臺主機(即254臺主機)。

    D類地址用來多播使用,沒有網絡ID和主機ID之分,其第一個字節前四位必須以1110開始,其他28位可以是任何值,則D類IP地址的有效範圍爲224.0.0.0到239.255.255.255。

    E類地址保留實驗用,沒有網絡ID和主機ID之分,其第一字節前四位必須以1111開始,其它28位可以是任何值,則E類IP地址的有效範圍爲240.0.0.0至255.255.255.254。其中255.255.255.2555表示廣播地址。

    在實際應用中,只有A、B和C三類IP地址能夠直接分配給主機,D類和E類不能直接分配給計算機。

 

 

3、公共IP和私有IP地址

=========================================

    IP地址由IANA(Internet地址分配機構後來被ICANN掌管)管理和分配,任何一個IP地址要能夠在Internet上使用就必須由IANA分配,IANA分配的能夠在Internet上正常使用的IP地址稱之爲公共IP地址;同時IANA也保留了一部份IP地址,這部份IP地址不能在讓個人和機構在Internet上使用,此類IP地址就稱之爲私有IP地址,這些非註冊的私有IP地址可供組織個人內部使用。因爲Internet上沒有私有IP地址的路由,所以,私有IP地址不能在Internet上使用。私有IP地址範圍包括:

    A類:10.0.0.0/8

    B類:172.16.0.0/12 即172.16.0.1-172.31.255.254共16個B類網絡

    C類:192.168.0.0/16即192.168.0.1-192.168.255.254共256個C類網絡

    在我們組建局域網的時候(例如在家中將多個機器組成一個局域網,可以共享同一個寬帶口上網,還可實現局域網內機器的數據共享),可以使用私有IP做爲局域網內機器的IP地址。另外我們需要注意的是,以上和後面討論的網絡間機器通信的路由過程,都是不同網段具有公共IP機器的路由,而不是到這樣的只有私有地址的局域網機器的路由(但是兩者路由時候的基本原理是一樣的)。像這樣的私有地址局域網內的機器,在公共網絡上是不可見的,雖然這個局域網內的機器能夠通過網關訪問到外面,但是通過一般手段,外面無法訪問到這個局域網中的特定機器,在外邊的公網看來,這個局域網內所有的機器連同它們的網關共同組成了一個“機器”,即網絡節點,節點的IP就是網關暴漏給外面的公網IP,這點不在本文討論範圍內。

 

 

4、子網的劃分

=========================================

    前面介紹的“分類的IP地址”,不利於根據企業需要靈活分配IP地址。比如,一個企業有2000臺計算機,那麼根據前面對各類IP地址規定,要麼爲其分配一個B類的網絡地址,這樣該網絡可包含65534臺計算機,將造成63534個IP地址的浪費;要麼爲其分配8個C類網絡地址,那麼必須用路由器連接這個8個網絡,造成公司網絡管理和維護的負擔。

    以上問題的根源就在於早期建立的IP地址結構,只有“網絡號+主機號”這樣的兩級結構,且長度固定(即A類、B類、C類等幾種網絡的網絡字段長度和主機字段長度是固定的)。爲解決上述問題,1985年在原有IP地址的兩級結構中增加了一個“子網號”,這樣原來的兩級IP地址變成了“網絡號+子網號+主機號”三級結構,其中“網絡號”就是原來兩級結構中的網絡號,“子網號+主機號”就是原來兩級結構中的“主機號”。

    通過對原來網絡中固定長度的“主機號部分”,劃分爲可變的“子網號+主機號”兩部分(但是兩者總長還是固定的),可以實現將原有網絡號對應的網絡(一般是A類、B類或C類的網絡)中再次劃分子網,原來兩級結構中的“主機號”部分不再固定不變,增加了靈活性,節省了IP地址的浪費。

 

 

5、IP尋址簡述

=========================================

    這裏IP尋址的意思就是根據一個IP地址,找到相應的機器,也就是路由的過程。無論是劃分了子網的網絡,還是沒有劃分子網的網絡,各個不同網絡之間,都是通過路由器相連接的。

    對於前面的描述,我們把IP地址中“網絡號+子網號”共同組成的部分,稱作IP地址對應的網絡地址部分,網絡地址部分再加上全零的主機地址便成了網絡地址。這樣我們很容易算出一個IP地址對應的網絡地址。例如:

    IP地址:168.169.170.171

    是一個B類地址,我們沒有給它劃分子網,於是它的網絡地址爲:168.169.0.0。若劃分子網了,那麼就將"170.171"中相應於的子網位也換算成二進制,並表示出來,這裏不詳細說明了。

    假設A主機給B主機發送IP數據包,當知道了網絡地址的長度之後,A主機便可通過根據IP包中的目的地址(B主機的IP地址),知道的其相應的網絡地址是否和自己的網絡地址相同,如果相同那麼兩者就在同一網段,於是,A直接發送數據給B;如果網絡地址不同,那麼兩者不在同一個網絡中,所以需要由路由器負責位於不同網絡的機器之間的通信。

    總之,發送數據時:(1)發送主機先檢查IP包中目的IP地址的網絡地址,如果和自己相同則直接發送給主機(2)如果不同,則通過路由器將包發送到目的網絡,再到達主機。(3)路由器中的路由表,記錄了它所知的所有IP網絡地址對應的目的網絡,目的網絡中的機器(路由)會將發給它網絡中機器的數據包傳達給正確的主機。

 

 

6、子網掩碼

=========================================

    前面所述的路由過程,有一個關鍵的地方就是要確定目的地址的“網絡地址”的長度。雖然沒有劃分子網的分類IP地址其網絡地址長度是固定的,但是經過了“子網的劃分”之後,由於網絡地址的長度變得不固定了,所以需要一種新的方法,以便確定一個IP地址對應的網絡地址的位數。我們可以用子網掩碼來實現這點。

    子網掩碼的位數和IP地址相同,格式是將主機部分全置爲0,網絡地址部分全置爲1。例如:A類地址的子網掩碼就是255.0.0.0;B類地址的子網掩碼爲255.255.0.0;劃分了兩個子網的B類網址其子網的子網掩碼爲255.255.128.0。

    因此可知,網絡地址就是IP地址與子網掩碼進行與運算獲得,即將IP地址中表示主機ID的部份全部變爲0,表示“網絡ID+子網ID”的部份保持不變。再次強調,網絡地址的格式與IP地址相同都是32位的二進制數;主機號就是表示主機號的部份。

    例1:IP地址:192.168.23.130  子網掩碼:255.255.255.192

    則:這是劃分了子網的C類網絡中的IP地址;網絡地址爲192.168.23.0;網絡號爲192.168.23;子網號:2;主機ID:2。

    例2:IP地址:192.168.23.130  子網掩碼:255.255.255.0

    則:這是沒劃分子網的C類網絡中的IP地址;網絡地址爲192.168.23.0,網絡號爲192.168.23,主機ID:130。

    現在的標準規定,所有的網絡都必須有一個子網掩碼。

 

 

7、使用子網掩碼進行IP尋址

=========================================

    在不劃分子網的兩級IP地址下,從IP地址很容易得到相應的網絡地址。劃分子網之後,僅從IP地址無法得到相應的網絡地址,而且IP數據包中也沒有關於網絡地址的信息,所以還需要通過子網掩碼來嘗試得到一個IP地址的網絡信息,而這個子網掩碼則是預先在發送端配置好了的。舉例說明一下發送IP數據包時,使用子網掩碼尋址的過程。

    例1,假設位於同一個子網的A向B發送IP包。大致過程是:

   (1)A要有一個待發送的IP包,其中包含B的IP地址以及A本身的IP地址;還要有一個在A上面配置的自己的本地子網掩碼(通過這個“本地子網掩碼”,A會以爲自己所在的網絡其網絡地址位數是本地子網掩碼中1的個數)。

   (2)A將B的IP地址和本地子網掩碼相與,得到自己理解的B的IP地址所屬的網絡地址netb;A再將自己的IP和本地子網掩碼相與,得到自己理解的自己的IP地址所屬的網絡地址neta;

   (3)將netb和neta比較,兩者相同,則A認爲B與它在同一個網絡中,所以不經過其它機器(例如路由器),直接將IP包轉發給B。

   例2,當A和B位於不同子網,則前面的netb和neta不相同,這時候需要經過路由進行轉發。大致過程是:

   (1)A上面一般會事先配置一個網關R,這個網關的IP地址應當和A在同一個網絡中。當A發送的IP包目標地址B不屬於A的網絡時會將這個IP包發送給網關R(注意,這個時候,IP包中的目的地址並沒有變成R的IP地址,A只是通過它本身的網關配置,知道了R的IP地址並在IP層下面的網絡接口層中將目標的MAC地址變成了R的MAC地址發送給R;而R在轉發時,目的IP仍舊不變,也會在MAC幀中重寫目標MAC地址,這期間涉及到使用ARP協議根據機器IP查詢其MAC地址,以及網絡接口層的內容,這裏不詳細敘述了);另外,一臺機器應該可以設置多個網關,指定它們用轉發特定外網中的目的地址,或者配置一個無論哪個外網地址都會轉發給這個網關的默認網關地址。

   (2)R上面有一個路由表,其中的每項記錄包含了它所知的所有網絡的網絡地址、子網掩碼、以及對應的路由(如果目的地址B在另外一個路由連接的不同網絡中)或者主機B所連網絡的接口(如果目的地址B在同一個R路由器所連接的不同網絡中)。注意,因爲路由器是可以連接不同的網絡的,所以路由器上面有至少兩個網絡接口,每個網絡接口對應一個網絡地址,而相應地,主機卻只有一個網絡地址。

   (3)R根據自己的路由表和IP中的目的地址B所在的位置併發送。具體過程是:將路由表中第一項的子網掩碼與目標地址B進行與,得到網絡地址如果匹配相應表項的地址則轉發到相應的網絡接口或者路由,否則對下一項進行同樣的匹配,直到出現匹配的情況並且將數據發送出去。

   (4)R的路由表中若有一個默認的路由,則當所有項都不匹配的時候將數據發送到這個路由。

   (5)如果以上過程全都沒有匹配,則報告轉發分組出錯。

    通過以上描述我們可知:(1)子網掩碼是在發送端上的,而不是在網絡中傳輸的。(2)發送端發送的時候會根據自己的子網掩碼來確定(它所認爲的)目標IP的網絡地址,而不是通過某個事先公共協商好的子網掩碼;(3)發送端的子網掩碼雖然理論上可以隨意配置,但是應當和自己所屬的子網對應的網關的接口子網掩碼一致,否則很可能會有問題。

 

 

8、一些概念

=========================================

    至此,在講述CIDR(無分類編址)之前,爲便於理解,我們將遇到過的“子網掩碼、網絡地址、網絡類別、IP地址、網絡號、子網、子網號、主機號”這幾個比較容易混淆的概念再進行一下總結:

    (1)IP地址是在發送IP包時,用於標識網絡節點(例如某個特定主機)的具體位置,目前長度固定爲32位;

    (2)IP地址中分爲“網絡部分”和“主機號”,網絡部分是IP地址的“左”邊,“主機號”在IP地址的“右”邊;

    (3)網絡地址其格式和IP地址格式幾乎一樣,用於標識一個IP地址究竟屬於哪個網絡;

    (4)計算一個IP地址的網絡地址的方法是將IP地址僅保留“網絡部分”,而將“主機號”部分全部置零;

    (5)網絡類別是指對所有IP地址按某種策略分類,得到的A、B、C、D、E等這些網絡,一個IP地址一定屬於其中的一類,也可理解爲“分類編址”(與CIDR的無分類編制相對);

    (6)劃分子網之後,IP地址中的“網絡部分”從左到右又可劃分爲“網絡號+子網號”,如果沒有劃分子網則沒有“子網號”部分。

    (7)一種類別的網絡,如果劃分了子網,那麼其中的IP地址“網絡號”部分的位數是固定的,“子網號”部分位數是不固定的(位數越少則子網越“大”,包含的主機數也越多),而後面的“子網號+主機號”總和是固定的位數(32位-“網絡號”位數);

    (8)一種類別的網絡,如果沒有劃分子網,則其中的IP地址“網絡部分”沒有“子網號”部分,並且網絡位數是固定的,等於其“網絡號”部分,因此“主機號”部分也是固定的(32位-“網絡號”)。

    以上這些概念不是嚴格如此的,但是嘗試用這裏的方式,應該能助於理解相關的內容。

 

 

9、無分類編址

=========================================

    (1)無分類編址的提出

    劃分子網在一定程度上解決了Internet發展中遇到的許多困難,但是隨着因特網的普及,仍然面臨着兩個重要的問題:

    (a)IP地址面臨耗盡的問題。

    (b)路由表項目急劇增長。

    第一個問題屬於長遠的問題,將由IETF(即Internet Engineering Task Force,互聯網工程任務組,主要任務是負責互聯網相關技術規範的研發和制定)成立的IPv6工作組研究新版本IP協議時解決;第二個問題採用無分類編制(即CIDR,Classless Inter-Domain Routing)來解決。

    (2)CIDR最重要的兩個特點

    (a)CIDR消除了傳統A、B、C等分類,以及在分類的IP中進行子網劃分的概念。

    CIDR不用子網,而直接使用網絡前綴,這樣IP地址又變回了兩級結構,即IP地址={網絡前綴,主機}。但是這裏的網絡前綴直接就是IP地址中除主機部分的網絡地址部分,這個網絡地址已經沒有A、B、C之類的區別。IP地址採用“斜線記法”(又稱CIDR記法),即在IP地址後面加上一個"/",在加上網絡前綴的位數。

    例如:128.15.68.36/20,表示這個32位的IP地址中,前20 bit表示網絡前綴,後12 bit表示主機號。

    (b)CIDR將連續的、網絡前綴相同的IP地址組成“CIDR地址塊”。

    由於沒有IP地址分類的概念(即A、B、還是C等類的網絡)了,所以,一個地址塊可能包含多個某種類型的網絡(例如一個“/18 地址塊”相當於64個C類的網絡),通過這個方式,CIDR使得路由器中的路由表項目,比包含分類IP概念的路由表項目少了很多。這個我們可以稱作“路由聚合(route aggregation)”或者“構成超網(supernetting)”。地址塊包含如下信息:起始地址+地址塊中的地址數。它也採用和IP地址一樣的“斜線記法”。

    例如:128.15.32.0/20表示一個包含2^12個主機的地址塊(因爲網絡前綴20位,所以主機數目是2的12次方個),其起始地址爲128.15.32.0。有時候,我們可能不必關心起始地址,那麼可以省略起始地址部分,例如:“/20 地址塊”表示有20位網絡前綴的某個地址塊。因爲地址塊的記錄方法和IP地址一樣,所以,有時候,需要根據上下文來確定,一個用斜線記法表示的地址是IP地址,還是CIDR的IP地址塊。

    (3)其它注意

    另外,CIDR中雖然沒有子網概念了,但是還有掩碼的概念,掩碼也可用斜線記法表示。CIDR的斜線記法還有以下等效的方式:

    10.0.0.0/10,可簡寫爲10/10(即點分10進制的IP部分中低位連續的0省略)。

    0000101000xxxxxx xxxxxxxx xxxxxxxx,這裏的"x"表示任意主機地址,非"x"的部分是網絡前綴。

    0000101000,這裏的""表示任意主機地址,非"*"部分是網絡前綴。

    注意,在配置基於CIDR的網絡時候,可能有的主機以前就是基於分類的IP地址的(無論有無子網劃分),他們可能不允許將網絡前綴設置爲比原來分類地址的子網掩碼1比特長度更短。例如:200.25.16.0/20這樣的配置就不行,因爲在它看來這是一個C類網絡,其子網掩碼長度至少爲24位。所以,只有主機軟件支持CIDR之時,網絡前綴才能比原來的分類IP地址掩碼長度更短。

    由上面我們可以看出,使用CIDR可以減少路由表項目,也可以更有效的利用IP地址。通過下面兩個例子可以有助瞭解:

   (a)假設有一個ISP,它擁有地址塊206.0.64.0/18。在採用CIDR之前,這個ISP其實相當於擁有64個C類網絡,每個和此ISP通信的網絡都需要在其路由內部有至少64個與此ISP相關的路由表項;採用CIDR地址聚合之後,這個ISP的相關表項就致用一個"/18 地址塊"即可。可見,採用CIDR大大減少了路由表中的表項數目。

   (b)假設有一個大學需要向上面提到的ISP申請800個IP地址。在採用CIDR之前,ISP或者爲這個學校分配1個B類地址(這將浪費64734個IP地址),或者分配4個C類地址(這樣各個相關路由表中會有4個該大學的表項),而且這個大學給其各系分配子網之時,也會比較複雜;採用CIDR之後,ISP只需要給這個大學分配一個"/22 地址塊",大學也可以給其各個系分配相應大小的地址塊。可見,採用CIDR大大提高了IP的利用率和管理複雜度。

    當採用CIDR之時,IP地址由“網絡前綴+主機號”組成,路由表項目則相應地改成了“網絡前綴+下一跳路由”,這樣在查找路由的時候,一個IP地址可能得到不止一個匹配結果,這是採用最長匹配原則,確認網絡前綴最長匹配的一項。

    例如:前面的ISP給大學分配了206.0.68.0/22地址塊,該大學又給其某個系分配了206.0.71.128/25地址塊,這樣,ISP中就有了這兩個路由表項。當ISP收到一個數據報目的IP爲D=206.0.71.130之時,查找表項將D與前面兩表項中的子網掩碼與目標地址相與,發現都匹配,但是由於206.0.71.128/25的網絡前綴更長,所以會採用這個更長的路由表項(因爲網絡前綴越長,信息越具體)。

    雖然現在很難將已經分配出去的IP重新收回,再採用CIDR的策略重新規劃IP分配,但是CIDR已經推遲了IP地址將要耗盡的日期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章