目錄
網絡層解決網絡間的互連問題,其核心是網際協議IP
網絡層只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務
也就是說網絡層傳輸的分組(幀)有可能出錯、丟失、重複和失序。通信的可靠性由運輸層負責
網際協議IP
IPv4
IP地址給互聯網上每一臺主機的每個接口分配一個在全世界範圍內唯一的32位標識符
IP地址可以分爲兩個字段:網絡號、主機號
按網絡號和主機號佔字節數又分爲5類
圖1. 五類IP地址
- 把IP地址分爲A、B、C類主要是方便管理;近年來廣泛使用無分類IP地址,不再區分A、B、C類地址
- IP地址分網絡號和主機號除了方便IP管理機構分配,更重要的是可以大幅減少路由表中的項目數,降低查找路由表的時間(路由器僅根據目的主機的網絡號來轉發分組)
IP類型 | 保留字段 | 說明 |
---|---|---|
A | 0.x.x.x | 網絡號全爲0表示“本網絡” |
127.x.x.x | 網絡號爲127作爲本地軟件環回測試用 | |
x.0.0.0 | 全0主機號字段表示本機所在網絡地址 | |
x.255.255.255 | 全1主機號字段表示該網絡所有主機 | |
B | 128.0.0.0 | 不指派 |
x.x.0.0 | 全0主機號字段表示該網絡所有主機 | |
x.x.1.1 | 全1主機號字段表示該網絡所有主機 | |
C | 192.0.0.0 | 不指派 |
x.x.x.0 | 全0主機號字段表示該網絡所有主機 | |
x.x.x.1 | 全1主機號字段表示該網絡所有主機 |
地址解析協議ARP
- ARP協議是通過網絡層的IP地址,找到數據鏈路層對應的MAC地址,其作用域是一個局域網
- ARP通過在主機維護一個動態更新的ARP高速緩存實現,該緩存記錄了本網絡中主機IP與MAC地址的對應關係
- ARP進程通過發送ARP請求分組獲取每個主機的MAC地址
IP數據報的格式
- 一個IP數據報由首部和數據部分組成,其中首部又分爲20個字節的固定部分和可變部分(後者逐漸被捨棄)
- 版本:佔4位,標識IP協議的版本
- 生存時間:“跳數限制”,該IP包最多可被路由器轉發的次數
- 協議:目的主機IP層知道應將數據上交哪個協議處理
協議名 | ICMP | IGMP | IP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|---|
值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
IP層轉發分組的流程
1)從數據報的首部提取目的主機IP地址D,得出目的網絡地址N
2)若N就是與此路由器直接相連的某個網絡地址,則直接交付(把數據報交付給目的主機),否則進行間接交付,執行3
3)若路由表中有地址D的特定主機路由,則把數據報傳送給指定的下一跳路由器,否則執行4
4)若路由表中有到達網絡N的路由,則把數據報傳送給路由表中指明的下一跳路由,否則執行5
5)若路由表中有一個默認路由,則吧數據報傳送給該默認路由,否則執行6
6)報告轉發分組出錯
劃分子網和構造超網
劃分子網
- IP地址是兩級結構(網絡號+主機號),將主機號再做一次劃分:
IP地址 = {網絡號,子網號,主機號} - 子網號佔用的是主機號的空間,相當於對內又細分了若干子網絡,但該屬性對外是不可見的,還是一個網絡。子網的劃分可以增加企業內部IP管理的靈活性
- 子網掩碼與IP地址長度一致,將子網掩碼與IP地址“取與”,得到的就是網絡號。其作用是便於查找路由表
A類地址的默認子網掩碼是255.0.0.0
B類地址的默認子網掩碼是255.255.0.0
B類地址中如果主機號用2位標誌子網號,那麼其子網掩碼是255.255.192.0
使用子網時的分組轉發流程:
1)從數據報的首部提取目的主機IP地址D
2)先判斷是否爲直接交付:用各網絡子網掩碼與D做“與”,看結果是否與相應網絡地址匹配。若匹配則直接交付,否則執行3
3)若路由表中有地址D的特定主機路由,則把數據報傳送給指定的下一跳路由器,否則執行4
4)路由表中每條記錄包含(目的網絡地址,子網掩碼,下一跳地址),用其中的子網掩碼與D做“與”得到N,若N與對應的目的網絡地址匹配則將數據報傳送給對應的下一跳路由器,否則執行5
5)若路由表中有一個默認路由,則吧數據報傳送給該默認路由,否則執行6
6)報告轉發分組出錯
構造超網(無分類編址CIDR)
按照上述分類編址的辦法,到1992年B類地址已分配了近一半,而主幹網的路由表中的項目數也急劇增長
因此IETF在1994年提出了無分類編址CIDR的方法:
- CIDR消除了傳統的A類、B類和C類地址以及劃分子網的概念。將IP地址分爲前後兩個部分:網絡前綴和主機號
IP地址 = {網絡前綴,主機號} - 其中網絡前綴的位數是可以變化的:
128.14.35.7/20 表示網絡前綴佔20個bit - CIDR把網絡前綴相同的連續IP地址組成一個CIDR地址塊
- CIDR還是可以繼續劃分子網:從主機號中佔用幾位來劃分
路由表查找
使用CIDR的路由表中,每個項目包含“網絡前綴”和“下一跳地址”,此時根據前綴掩碼有可能匹配到不止一個地址
如某大學的地址塊爲 206.0.68.0/22,將其中的 206.0.71.128/25分給了某個系。
現在假設一個數據報的目的地址爲 D=206.0.71.130,將其與上述兩個地址塊的掩碼做“與”操作,均匹配
D & 11111111 11111111 11111100 00000000 = 206.0.68.0/22
D & 11111111 11111111 11111111 10000000 = 206.0.71.128/25
此時需遵循最長前綴匹配準則,選擇206.0.71.128/25
爲了迅速在路由表中完成查找匹配,路由器首先會將所有項目建立一個二叉樹
如圖所示,二叉樹的最大深度爲32層,對每個地址,自頂向下0放左節點,1放右節點
網際控制報文協議ICMP
- ICMP報文在IP數據報中的數據部分,允許主機或路由報告差錯和異常情況
- ICMP報文包含兩種類型:ICMP差錯報告報文、ICMP詢問報文
ICMP報文種類 | 類型的值 | ICMP報文的類型 |
差錯報告報文 | 3 | 終點不可達 |
11 | 超時 | |
12 | 參數問題 | |
5 | 改變路由 | |
詢問報文 | 8或0 | 回送請求或回答 |
13或14 | 時間戳請求或回答 |
ICMP的兩個重要應用
- PING
PING使用了ICMP回送請求與回送回答報文
由於往返的ICMP報文都有時間戳,因此很容易得出往返時間 - traceroute
該命令用來跟蹤一個分組從源點到終點的路徑:
traceroute從源主機向目的主機發送一連串的IP數據報,數據報中封裝的是無法交付的UDP用戶數據報
第1個數據報 P 1 P_1 P1的生存時間TTL設爲1,當第一個路由器 R 1 R_1 R1時, R 1 R_1 R1先收下它,然後TTL減1,發現TTL爲0便將 P 1 P_1 P1丟棄,並向源主機發送一個ICMP時間超過差錯報告報文
第2個數據報 P 2 P_2 P2的生存時間TTL設爲2,同樣 R 2 R_2 R2會想源主機發送一個超時報文。。。
通過上述方式,traceroute可以獲得整條路徑上經過的所有路由信息