計算機網路 - 網路層(上)
計算機網路 - 網路層(上)
兩種服務
在計算機網路領域,網路層應該向運輸層提供怎樣的服務(“面向連線”還是“無連線”)曾引起了長期的爭論。
一種觀點認為,應該讓計算機網路模仿電信網路,使用 面向連線 的通訊方式。
通訊之前先建立 虛電路 (Virtual Circuit),以保證雙方通訊所需的一切網路資源。 (這裡的虛網路表示這只是一條 邏輯上 的連線,分組 都 沿著這條 邏輯連線 按照儲存轉發方式傳送,而並不是真正建立了一條物理連線;與之相對的, 電路交換 的電話通訊是先建立一條真正的連線 ofollow,noindex" target="_blank">具體可參見概述部分介紹 )
另一種觀點認為,應該讓網路層向上只提供 簡單靈活的 、 無連線的 、 盡最大努力交付 的資料報服務。
採用這種設計思路,則網路的造價大大降低,執行方式靈活,能夠適應多種應用。且 每個分組獨立選擇路由 進行轉發。
網際協議IP
網際協議 IP 是 TCP/IP 體系 中兩個最主要的協議之一。
與 IP 協議配套使用的還有三個協議:
- 地址解析協議 ARP (Address Resolution Protocol)
- 網際控制報文協議 ICMP (Internet Control Message Protocol)
- 網際組管理協議 IGMP (Internet Group Management Protocol)
虛擬網際網路絡
所謂虛擬互連網路也就是 邏輯互連 網路,它的意思就是互連起來的各種物理網路的異構性本來是客觀存在的,但是我們利用 IP 協議就可以使這些效能各異的網路 從使用者看起來好像是一個統一的網路 。
如果在這種覆蓋全球的 IP 網的 上層 使用 TCP 協議 ,那麼就是現在的 網際網路 (Internet)。
分類的IP地址
IP 地址就是給每個連線在網際網路上的主機(或路由器)分配一個 在全世界範圍是唯一的 32 位的識別符號 。
IP地址的編址方法
- 分類IP地址 。這是最基本的編址方法,在 1981 年就通過了相應的標準協議。
- 劃分子網 。這是對最基本的編址方法的改進,其標準 [RFC 950] 在 1985 年通過。
- 構成超網 。這是比較新的無分類編址方法。 1993 年提出後很快就得到推廣應用。
分類IP地址
IP 地址::= { < 網路號 >, < 主機號 >}
一般表示IP地址採用 點分十進位制 記法,將每個 八位二進位制數 (1 byte)轉換為 十進位制數 。
其中 D類地址 為 多播地址 ;
E類地址保留為今後使用。
一般不可用的特殊IP地址
網路號 | 主機號 | 作為源地址 | 作為目的地址 | 代表含義 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本網路上的本主機(見 6.6 節 DHCP 協議) |
0 | host-id | 可以 | 不可 | 在本網路上的某臺主機 host-id |
全 1 | 全 1 | 不可 | 可以 | 只在本網路上進行廣播(各路由器均不轉發) |
net-id | 全 1 | 不可 | 可以 | 對 net-id 上的所有主機進行廣播 |
127 | 非全 0 或全 1 的任何數 | 可以 | 可以 | 用作本地軟體環回測試之用 |
IP地址的一些特點
1、IP地址實際上是標誌 一個主機(或路由器)和一條鏈路的介面 。
- 當一個主機同時連線到兩個網路上時,該主機就必須同時具有兩個相應的 IP 地址;
- 由於 一個路由器至少應當連線到兩個網路 ,故一個路由器至少應當有兩個不同的 IP 地址。
2、用 轉發器 或 網橋 連線起來的若干個區域網 仍為一個網路 ,因此這些區域網都 具有同樣的網路號 。
3、所有分配到 網路號 的網路,無論是範圍很小的區域網,還是可能覆蓋很大地理範圍的廣域網, 都是平等的 。
IP地址與硬體地址
路由轉發過程中,路由器僅根據 目的站的IP地址 進行路由選擇, IP資料報 首部的內容不變;
而 MAC幀 每經過一個路由,都將首部的目的地址和源地址更新為 下一個路由(主機)硬體地址和這個路由(主機)硬體地址 。
IP層遮蔽了傳輸中的細節。
地址解析協議(ARP)
每一個主機都設有一個 ARP 快取記憶體 (ARP cache),裡面有所在的區域網上的 各主機和路由器的 IP 地址到硬體地址的對映表 。
< IP address;MAC address;TTL >
(TTL:地址對映有效時間)
當主機 A 欲向本區域網上的某個主機 B 傳送 IP 資料報時,就先在其 ARP 快取記憶體中檢視有無主機 B 的 IP 地址。
- 如有 ,就可查出其對應的硬體地址,再 將此硬體地址寫入 MAC 幀 ,然後通過區域網將該 MAC 幀發往此硬體地址。
- 如沒有 , ARP 程序在本區域網上 廣播發送一個 ARP 請求分組 。收到 ARP 響應分組 後,將得到的 IP 地址到硬體地址的 對映寫入 ARP 快取記憶體 。
ARP 是解決 同一個區域網上 的主機或路由器的 IP 地址和硬體地址的對映問題。
如果所要找的主機和源主機不在同一個區域網上,那麼就要 通過 ARP 找到一個位於本區域網上的某個路由器的硬體地址,然後把分組傳送給這個路由器,讓這個路由器把分組轉發給下一個網路 。剩下的工作就由下一個網路來做。
IP資料報的格式
首部 前部分(20位元組)是固定長度 ,是所有IP資料報共有的;
後面是一些可選欄位,其 長度可變 。
- 總長度 :指首部和資料之和的長度。
- 標誌 :最低位 MF=1 表示 還有分片 ;中間位 DF=0 時 允許分片 。
- 片偏移 :表示較長的分組在分片後, 某片在原分組中的相對位置 。 片偏移以8個位元組為單位 。
- 生存時間 :記為TTL(Time To Live),指示資料報在網路中 可通過的路由器數 的最大值。
- 協議 :指出此資料報攜帶的資料使用何種協議,以便目的主機的 IP 層將資料部分上交給那個處理過程。
- 首部檢驗和 :只檢驗資料報的 首部 ,不檢驗資料部分。(採用 16 位二進位制反碼求和演算法)
IP層分組轉發的流程
在 路由表 中,對每一條路由,最主要的是( 目的網路地址,下一跳地址 )
根據 目的網路地址 就能確定下一跳路由器,這樣做的結果是:
- IP 資料報最終一定可以找到 目的主機所在目的網路上的路由器 (可能要通過多次的間接交付)。
- 只有到達 最後一個路由器 時,才試圖向目的主機進行直接交付。
特定主機路由
雖然網際網路所有的分組轉發都是基於目的主機所在的網路,但在大多數情況下都允許有這樣的特例,即為特定的目的主機指明一個路由。
預設路由 (default route)
路由器還可採用 預設路由 以減少路由表所佔用的空間和搜尋路由表所用的時間。
如果一個主機連線在一個小網路上,而這個網路只用一個路由器和網際網路連線,那麼在這種情況下使用預設路由是非常合適的。
“下一跳”是在下層實現的
當路由器收到待轉發的資料報,不是將下一跳路由器的 IP 地址填入 IP 資料報,而是送交下層的網路介面軟體。
網路介面軟體使用 ARP 負責將 下一跳路由器的 IP 地址轉換成硬體地址 ,並將此 硬體地址 放在鏈路層的 MAC 幀的首部 ,然後根據這個硬體地址找到下一跳路由器。
劃分子網和構造超網
劃分子網
從 1985 年起在 IP 地址中又增加了一個“ 子網號欄位 ”(Subnet-ID),使兩級的 IP 地址變成為三級的 IP 地址。
這種做法叫做 劃分子網 (subnetting) 。
優點
- 減少了 IP 地址的浪費
- 使網路的組織更加靈活
- 更便於維護和管理
子網掩碼
子網掩碼(subnet mask)用於找出 IP 地址中的子網部分。
子網掩碼長度為32位(IP地址的長度):
- 某位 = 1:IP地址中的對應位為網路號和子網號
- 某位 = 0:IP地址中的對應位為主機號
路由器在和相鄰路由器 交換路由資訊 時,必須把自己所在網路(或子網)的 子網掩碼 告訴相鄰路由器。
路由器的路由表中的 每一個專案 ,除了要給出 目的網路地址 外,還必須同時給出該網路的 子網掩碼 。
( 目的網路地址,子網掩碼,下一跳地址 )
劃分子網情況下的分組轉發
(1) 從收到的分組的首部提取 目的 IP 地址 D 。
(2) 先用(本網路內部) 各網路的子網掩碼和 D 逐位相“與” ,看是否和相應的網路地址匹配。 若匹配,則將分組直接交付 。否則就是間接交付,執行 (3)。
(3) 若路由表中有目的地址為 D 的特定主機路由,則將分組傳送給指明的下一跳路由器;否則,執行 (4)。
(4) 對 路由表中的每一行 ,將 子網掩碼和 D 逐位相“與” 。若結果與該行的目的網路地址匹配,則將分組傳送給該行指明的下一跳路由器;否則,執行 (5)。
(5) 若路由表中有一個預設路由,則將分組傳送給路由表中所指明的預設路由器;否則,執行 (6)。
(6) 報告轉發分組出錯。
無分類編制CIDR(Classless Inter-Domain Routing)
CIDR使用 各種長度的“網路字首” (network-prefix)來代替分類地址中的網路號和子網號。
IP 地址從 三級編址 (使用子網掩碼)又回到了 兩級編址 。
IP地址 ::= {<網路字首>, <主機號>}
CIDR 使用“斜線記法”(slash notation)即在 IP 地址面加上一個斜線“/”,然後寫上 網路字首所佔的位數 (這個數值對應於三級編址中子網掩碼中 1 的個數)。例如: 220.78.168.0/24。
CIDR 地址塊
CIDR 把 網路字首都相同的 連續的 IP 地址組成“ CIDR 地址塊 ”。
路由聚合(route aggregation) 或構成超網(supernetting)
一個 CIDR 地址塊可以表示很多地址,這種地址的聚合常稱為路由聚合,它使得路由表中的一個專案可以表示很多個(例如上千個)原來傳統分類地址的路由。
可以更加有效地分配 IPv4 的地址空間, 可根據客戶的需要分配適當大小的 CIDR 地址塊 。
最長字首匹配
使用 CIDR 時,路由表中的每個專案由“ 網路字首 ”和“ 下一跳地址 ”組成。在查詢路由表時可能會得到不止一個匹配結果。
應當 從匹配結果中選擇具有最長網路字首的路由 : 最長字首匹配 (longest-prefix matching)。
使用二叉線索查詢路由表
為了進行更加有效的查詢,通常是將無分類編址的路由表存放在一種層次的資料結構中,然後自上而下地按層次進行查詢。這裡最常用的就是 二叉線索 (binary trie)。
IP 地址中從左到右的位元值決定了從根結點逐層向下層延伸的路徑,而二叉線索中的各個路徑就代表路由表中存放的各個地址。