IP網
網絡層應該向運輸層提供什麼樣的服務?互聯網採用的思路是這樣的:網絡層向上只提供簡單靈活的,無連接的,盡最大努力交付的數據報(這裏的數據報就是IP分組)服務。網絡層不提供服務質量的承諾,也就是說,所傳送的分組可能出錯,可能丟失也可能重複或者失序。
網際協議IP是是TCP/IP協議中最重要的兩個協議之一,與IP協議配套的還有三個協議:
- 地址解析協議(ARP協議)
- 網際控制報文協議(ICMP協議)
- 網際組管理協議(IGMP協議)
虛擬互連網
從一般的概念上來講,將網絡互連起來需要一定的中間設備,根據中間設備所在的位置,可以大致分成下面四種:
- 物理層使用的中間設備稱爲集線器。
- 數據鏈路層使用的中間設備稱爲交換機或者網橋。
- 網絡層使用的中間設備稱爲路由器。
- 網絡層以上的中間設備稱爲網關。
所謂虛擬互連網絡,也就是邏輯互聯網絡,如果參加的計算機網絡都使用相同的網際協議IP,我們利用IP協議就可以使這些性能各異的網絡在網絡層看起來像是一個統一的網絡。如果在這樣的IP網的上層使用TCP協議,那麼就是我們如今的互聯網。根據分組轉發的概念,同一個網絡下的數據報是進行直接交付的,因爲塔不需要經過任何路由器,不同的網絡下的數據報是間接交互的嗎,因爲數據報需要轉發到路由器中送到其他網路。
IP地址
IP地址就是給互聯網的每一臺主機(或路由器)的每一個接口分配一個在全球範圍內是唯一的32位的標識符(注意IP地址是由軟件生成的,不是硬件地址!),IP地址現在由ICANN進行分配。
IP地址的編碼方式經歷了下面的三個階段:
- 分類的IP地址
- 子網的劃分
- 構成超網
分類的IP地址(重點)
所謂分類的IP地址,就是將IP地址分成若干的類,每一類的地址由兩個字段組成,分別爲網絡號,主機號。一個網絡號在互聯網範圍內是唯一的,而主機號在該網絡號的範圍內必須是唯一的。
這樣的兩級IP地址可以記爲:
下圖是ABCDE類地址的分佈情況(要很熟悉):
分類IP地址結構分析
這裏暫時只分析其中的一個類別的地址,拿A類地址說。網絡地址前面都有個類別位,分別爲0,10 ,110, 1110,1111。其中最常使用的是ABC三類的地址。IP地址都是32位的二進制數,爲了方便分析,提高可讀性,我們常常把32位二進制數分成每8位一組,每組的二進制數轉換成十進制數,這樣就便於觀察了,這樣的記法稱爲點分十進制法。
下面分析A類地址:
- 網絡號
由於前面的8位網絡號已經固定了一位,所以,網絡號能表示的範圍爲(二進制表示):0 (7個0) - 0 (7個1)。
轉換成十進制就是 0 - 127.通常,全0或者全1的地址我們不用,全1的地址是個保留地址,意思是本網絡。而網絡號爲127的地址,用作環回地址,用於本主機本地通信(也就是本地地址)。如127.0.0.1,這就是當我們連接本地數據庫的時候,你可以輸入主機名可以輸入local,也可以輸入127.0.0.1。所以A類可以表示 (2^7) - 2 個網絡。 - 主機號
主機號中,由於32位的IP地址中前面的8位已經被網絡號佔用,剩下的32 -8 = 24位可以用作主機號,一般的全0全1不用,所以最大主機數爲(2^24) -2.
其他類型的地址可以按上述的辦法分析,但是這裏注意,在網絡號上,由於前面被固定了至少兩個值,所以怎麼都不可能出現網絡號全0或者全1的情況,因此不存在減2的問題,但實際上除開固定位,全0的網絡號我們也是通常不指派的,因此表示的網絡號要減1(比如B類的地址,(2^14)-1 )。
整個A類地址的IP空間爲(2^31)個地址,佔總IP地址的50%。
整個B類地址的IP空間爲(2^30)個地址,佔總IP地址的25%。
整個A類地址的IP空間爲(2^29)個地址,佔總IP地址的12.5%。
特點:
- IP地址管理機構在分配IP地址的時候,只分配網絡號。
- 路由器根據目的主機所連接的網絡號來轉發分組
- 一臺主機連接到多個不同網絡的時候,應該有相應的多個不同的IP地址(典型的如路由器)
- 同一個網絡 具有相同的網絡號,且一個局域網有且只有一個路由器。
ARP協議
路由器把分組送到指定的網絡後,就需要將該網絡的數據送到指定的主機。ARP協議就是將網絡層中的IP地址轉換成數據鏈路層中的MAC地址。
ARP協議在主機的ARP高速緩存中存放一個從IP地址到硬件地址的映射表,並且這個表經常動態的更新,以應付局域網中主機的增加和減少。ARP的主要工作原理爲:
- ARP向局域網內的主機廣播一條ARP請求分組,內容大致是,“本機的IP,mac地址分別是xxx,現在想知道IP地址爲yyy的主機,其mac地址是多少?”
- 局域網內的所有主機都將收到這個信息,但是隻有對應ip地址爲yyy的主機會響應,且該主機向發起方返回一個響應報文(此時爲單播,因爲1的時候已經知道了發起方的ip和mac地址),告知其本主機的mac地址。
- 如果要找的主機跟源主機(也就是發起方),不在同一個網絡,那麼發送方仍然是廣播一個請求,但是尋找的是局域網內路由器的mac地址,由路由器將此請求轉發到下一個網絡進行ARP廣播。直至找到目的主機的MAC地址。
下圖包括了上述的幾種情況,自行分析:
注意,這裏APR協議只是解決同一局域網上的主機或者路由器的IP地址到mac地址的映射問題,並且主機用戶對這種解析過程是透明的。
IP數據報格式
我們之前已經學過了TCP協議的數據報頭部,這裏直接拿IP協議的頭部來學習:
一個IP數據包由兩部分組成,首部跟數據部分。其中首部有20字節部分內容是固定長度的。
各字段長度分析
- 版本:略,表示IP協議的版本
- 首部長度:佔4位,也就是最大隻能表示十進制數位爲15,但是注意,這裏首部長度的單位是 4字節。也就是如果這裏填的是5,那麼首部長度爲 5 X 4字節 = 20字節。又因爲首部固定長度爲20字節,所以這裏最少填5,同理最大填15的話,有15 x 4字節 = 60字節,也就是IP數據報的首部的最大長度爲60字節.通常使用固定首部20字節。
- 區分服務:略,一般網絡安全纔用到,考研不考
- 總長度:即首部+數據部分的總長度,最長可以表示[(2^16)-1)]個字,也就是65535個字節(除8)。
- 標識:略
- 標誌:MF(more fragment) = 1,表示後面“還有分片”,MF = 0表示“沒有分片”。DF(dont fragment) = 0時才允許分片。
- 片偏移:較長的分組分片後,某片在原分組後的相對位置。片偏移以8個字節爲偏移單位。
- 生存時間:即TTL,執行ping命令的時候都會返回這個參數。表面數據報在網絡中的壽命,此數值由發送方設置,數據報每經過一個路由器,TTL就自動減1,當TTL= 0的時候,就丟棄這個報文。
- 協議:指出數據報使用的協議,以便目的主機的IP層知道應該將數據報交付給哪個協議進行處理。(常見的有UDP TCP ICMP等等)
- 首部校驗和:這裏只校驗首部而不校驗數據部分。
- 源地址和目的地址:略
下面解釋一下分片的概念:
IP下的數據鏈路層是以幀爲單位進行傳輸的,它們規定了每一個數據幀的最大長度,即最大傳送單元(MTU,通常是1500字節),若傳輸的數據報長度大於1500字節,就要將多出的字節進行分片。IP協議規定,所有互聯網路由器以及主機都要能接受不超過576字節的數據報。分片後的每段數據報都應該加上首部,其中分片後數據報的長度字段應當是此分片的首部加上數據部分的總長度。
分組轉發
我們前面知道,要將網絡互連起來,在網絡層要使用到的設備是路由器。網絡層中的路由器通過路由表來轉發分組。路由表指出某個主機到某個網絡應該怎麼轉發。也就是在互聯網上轉發分組實際上是從一個路由器轉發到下一個路由器。
路由表中,最重要的兩條信息:
下圖的路由表說明了路由表中的轉發過程:
這樣數據報就可以根據路由表的下一跳地址,交付其數據。比如10.0.0.7,從網3的數據報要發送到網一,那麼下一跳是到20.0.0.7,路由器把數據報送到10.0.0.7所在的網絡後(也就是間接交付),由本網絡進行數據交付到目的主機(即直接交付)。由此可知,互聯網中的分組轉發都是基於目的主機所在的網絡的,經過轉發(可能多次間接交付),最終數據報一定可以找到目的主機所在的路由器。
當一個網絡很少對外連接的時候,默認路由可以減少路由表的空間和搜索路由表所用的時間。(事實上,很多企業,單位的內網就是這麼做的)。這個時候,路由表中除了指明的幾個已知的網絡(即內網),其他的所有目的網絡都交付給默認路由(即互聯網)。當然有時候,對於一些比較特殊的主機(比如服務器),就可以直接在路由表中指明下一跳的IP地址,這種路由稱爲特定主機路由。
分組轉發算法如下:
- 從數據報首部提出目的主機的IP地址D,得出網絡地址N。
- 如果N就是與路由器直連的某個網絡地址,便進行直接交付,否則轉3
- 如果路由表中有到目的地址爲D的特定主機路由,則將數據交付給該條目的下一跳地址。否則轉4
- 如果路由器中有到某個網絡地址N的路由,那麼將數據交付給指明的下一跳地址。否則轉5
- 如果路由表中有設置默認路由,那麼將數據交付給指明的默認路由器地址。否則轉6
- 分組轉發出錯。
注意:路由表不給出具體的轉發路徑,只給出下一步數據報應該怎麼走。