TCP/IP-IP

  A contented mind is a perpetual feast.html

  "滿足長樂"網絡

 

參考資料TCP/IP入門經典 (第五版)併發

        TCP/IP詳解 卷一:協議工具

 

1、簡介

  IP(Internet Protocol,網際協議),是TCP/IP協議族中最核心的協議,位於協議棧的網絡層spa

  既然位於網絡層,因此IP最主要的功能就是 提供獨立於硬件的邏輯尋址 和 支持網間數據傳遞的路由選擇,咱們將在後面的部分介紹這兩個功能,下面先來分析一下IP首部3d

2、IP首部

  咱們在 TCP/IP-入門 中說到:當傳輸層的TCP分段或UDP數據報傳送到網絡層時,IP將會爲分段或數據報封裝上IP首部,接下來咱們分析一下IP首部,IP數據報格式以下code

 

其中各字段的含義以下:router

  ● 4位版本:目前的協議版本號是4,即IPv4htm

  ● 4位首部長度:咱們注意到上圖中每一行的長度是32 bit,即4個字節,首部長度指的就是首部佔32 bit的數目,即行數。因爲首部長度只有4位,因此IP首部的最大長度爲(24-1)*4=60個字節blog

  ● 8位服務類型(TOS):包括一個3 bit的優先權子字段(如今已經被忽略),4 bit的TOS子字段和1 bit未用位但必須置0。4 bit的TOS分別表明:最小時延、最大吞吐量、最高可靠性和最小費用,4 bit中只能置其中1 bit,若是4 bit都爲0,就意味着是通常服務

  ● 16位總長度:總長度指的是整個IP數據報的字節數,用總長度-首部長度,咱們就能夠知道數據部分的長度,這個字段佔用16 bit,因此IP數據報的最大長度爲216-1=65535字節。雖然最大長度能夠達到65535,可是因爲鏈路層的MTU限制,通常不會達到那麼大

  ● 16位標識:標識字段惟一地標識主機發送的每一份數據報。在討論分片和重組時,再詳細討論16位標識、3位標誌和13位片偏移

  ● 8位生存時間(TTL):TTL設置了數據報能夠通過的最多路由器數,它指定了數據報的生存時間。其初始值由源主機設置,每通過一個處理它的路由器,它的值就減1,當該字段爲0時,數據報就被丟棄,併發送ICMP報文通知源主機

  ● 8位協議:協議字段也稱做協議域,用來標記數據來自上層的哪個協議:1表示ICMP協議,2表示爲IGMP協議,6表示爲TCP協議,17表示爲UDP協議

  ● 16位首部檢驗和:檢驗和字段是根據IP首部計算的檢驗和碼,計算方法爲:首先把該字段設置爲0,而後對首部中(不包括數據部分)每一個16 bit進行反碼求和,最後將結果存在該字段中。當接收方收到IP數據報時,一樣對首部的每一個16 bit進行反碼求和,這一次由於包含了以前計算好的檢驗和,因此若是沒有發生任何差錯,那麼接收方計算的結果應該爲全1。若是不爲全1,IP將會丟棄收到的數據報,但不生成錯誤報文,由上層去發現並處理

  ● 源IP地址和目的IP地址就比較直觀了

  ● 選項:這個字段是數據報中一個可變長的可選信息,因爲這些選項不多被使用,並不是全部主機都支持,因此這裏不作更詳細的介紹,可參考相關RFC文檔

 由上面易知,當選項不存在時,IP首部的長度是固定的20字節

3、邏輯尋址

  接下來咱們就來討論一下IP的主要功能,首先是邏輯尋址,在 TCP/IP-入門 中咱們已經介紹了一些相關的概念,下面咱們來回顧一下

    ● IP地址:IP爲網絡中的設備提供的身份標識,長32 bit

    ● 子網掩碼:相似於IP地址,用於識別網絡號(包括子網號)和主機號

  瞭解了IP地址和子網掩碼,咱們就能夠討論子網劃分了 

 子網劃分

  因爲網絡系統是由無數臺網絡設備經過傳輸介質互聯在一塊兒的,因此網絡中的全部設備都在同一個集合中。當把數據從一臺主機發送給另外一臺主機時,若是兩臺主機不是直接相連的話,須要通過中間設備,當網絡中的設備數量太大時,傳輸效率會大大下降。若是把整個網絡系統分紅不少個子網,那麼經過區別不一樣子網就能夠增長傳輸的效率。子網劃分的思想就是:將網絡系統分紅許多的大型網絡,每一個大型網絡又包含許多子網,而每一個子網內又包含許多主機

  IP經過將IP地址分紅不一樣的部分來標識網絡號、子網號以及主機號。上一篇文章咱們已經討論了五類IP地址(並無給出子網號部分),這裏的大型網絡的劃分,就是依據五類IP地址來決定網絡號的長度。而對於子網部分,子網號的長度由具體的網絡配置來決定,也就是說子網號的長度不是固定的。網絡號和子網號都肯定之後,剩下部分就是主機號了。每一個子網維護一個子網掩碼,子網掩碼由兩部分組成,爲1的位是網絡號和子網號的部分,爲0的部分是主機號的部分。經過地址類型、網絡號、子網掩碼和子網號,咱們就能夠知道一個IP地址是否是屬於本子網。

  舉個栗子,假設本機所在網絡使用B類地址,網絡號是224.224.0.0,子網號是0.0.192.0,子網掩碼是255.255.255.0。如今我就能夠判斷一個IP地址是否是跟本機在同一個子網內。好比IP地址 192.192.192.192,由於使用的是B類地址,因此我知道它的網絡號是192.192.0.0,跟本機所在的網絡不是同一個網絡,就不繼續判斷了。好比IP地址224.224.132.22,它的網絡號是224.224.0.0,跟本機在同一個網絡,而後用子網掩碼跟它作與運算,獲得224.224.132.0,發現它的子網號是0.0.132.0,與本機所在的子網0.0.192.0不相同,說明不是在同一個子網。若是IP地址是224.224.192.23,跟前面的方法同樣,我已經知道它跟本主機在同一個網絡,而且它的子網號是0.0.192.0,因此它跟本機在同一個子網,只要再對比一下主機號,就能夠知道這個IP地址是否是本機IP地址了

  一般,判斷一個IP地址是否是在本地網絡就是直接用它跟子網掩碼作與運算,而後對比網絡號和子網號就能夠獲得答案

 CIDR:無類型域間選路

  IP地址是用32個bit來表示的,因此IP地址的數量是有限的,最多232-1個IP地址,而且其中有不少是不可用的。當網絡中的設備達到必定數量時,IP地址將不夠用了!一種解決方案是:使用更多個bit來表示IP地址,好比128個bit,這就是IPv6,這裏暫不討論。另一種方法是:根據網絡號的長度不一樣來用同一個IP地址表示不一樣的主機,這就是無類別域間路由

  前面咱們講到一個IP地址惟一地標識網絡中的一臺設備,CIDR的思想就是用一個IP地址標識多臺主機。其思路就是使用一個斜線(/)做爲分隔符,在IP地址後面跟一個十進制數值來表示地址中網絡號所佔的位數。例如:在CIDR地址205.123.196.183/25中,前25個bit是網絡號(包括子網號),後面7個bit是主機號,這實現了IP地址的重用

 特殊的IP地址

  前面講到,有一些IP地址是不可用的,具體有哪些呢?見下表

  說明:0表示全部bit全爲0;-1表示全部bit全爲1;netid、subnetid和hostid分別表示不爲全0或全1的對應字段。子網號欄爲空表示該地址沒有進行子網劃分

 

  這個表分爲三個部分:頭兩項是特殊的源地址,中間項是特殊的環回地址,最後四項是廣播地址

4、路由選擇

  咱們先來了解幾個概念

 路由器(router)

  前面一直在說路由器,到底什麼是路由器?路由器是負責根據邏輯地址對通訊流量進行過濾的設備,「又稱網關設備(Gateway)是用於鏈接多個邏輯上分開的網絡」  --百度百科。簡單來講,路由器就是爲IP數據包進行導向的工具,告訴數據報下一站應該去哪

 路由表(routing table)

  路由表就是一張存儲指向特定網絡地址路徑的表,其中保存着網絡周邊的拓撲信息.

  路由器工做時,若是每次轉發時都將數據報發送到任意的路由器或者某特定的路由器,那麼傳輸的效率將會很是低下,由於每次發送都要從新路由(就像你去一個地方,歷來不記住路線,每次去那個地方都要問路)。若是能在每次傳輸完以後記錄一下本次傳輸的目的地址信息,那麼下一次再須要發送給這個地址時,我就能夠根據記錄的信息找一條最短的路發送給它,而不用經過其餘路由來轉發(就是記住去這個地方的路線,下次本身就能夠直接走過去),路由表就是用來保存這些傳輸路徑的相關信息的

  路由表中的每一項都包含下面這些信息:

    ● 目的IP地址:它既能夠是一個完整的主機地址,也能夠是一個網絡地址,由標誌字段來指定下一站路由器的IP地址,或者有直接相連的網絡IP地址

    ● 下一站路由器:是指一個在直接相連網絡上的路由器,經過它能夠轉發數據報。它不是最終目的地,可是它能夠將數據報轉發到最終目的地

    ● 標誌:其中一個標誌指明目的IP地址是網絡地址仍是主機地址,另外一個標誌指明下一站路由器是否真正的下一站路由器,仍是一個直接相連的接口,爲數據報的傳輸指定一個網絡接口

 路由選擇

  對於主機來講,路由選擇是一件簡單的事,若是目的主機與源主機直接相連,那麼直接發送就能夠了;若是沒有直接相連,那麼只要發送給默認路由,讓路由器來轉發就好了。

  對於路由器來講,則要完成更多的功能,具體以下:

    ①搜索路由表,尋找能與目的IP地址徹底匹配的表目(網絡號和主機號都要匹配)。若是找到,則把報文發送給該表目指定的下一站路由器或直接相連的網絡接口

    ②搜索路由表,尋找能與目的網絡號匹配的表目。若是找到,則把報文發送給該表目指定的下一站路由器或直接相連的網絡接口。目的網絡上的全部主機均可以經過這個表目來處置

    ③若是上面兩步都沒有找到,那麼尋找標爲「默認(default)」的表目。若是找到,則把報文發送給該表目指定的下一站路由器

  若是以上三步都沒有成功,那麼該數據報就不能發送。

  如此循環,直到到達目的地或者TTL減爲0.

5、查看接口和網絡的有關信息

  查看本機網絡接口信息(包含物理地址、IP地址、子網掩碼、MTU等信息): $ ifconfig 

  查看路由表信息: $ route  

   或者  $ netstat -rn 

:本文僅僅對IP作了一個大概的介紹,更多更細節的問題沒有涉及,如當數據報發送失敗時怎麼處理等等。更詳細的內容請參考RFC文檔或者其餘資料

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息