TCP/IP 協定與 Internet 網路:第五章 網際層協定  上一頁           下一頁

 

翻轉工作室:粘添壽

 

5-2 IP 協定

IP 通訊協定是 Internet 網路之中最主要的協定,規定在廣泛複雜的網路上,如何尋找到所欲連接之工作站,並負責雙方的連線。IP 通訊協定所採用的非連接方式的『電報傳輸』(Datagram,主要的工作有二:(1) 每一部工作站如何去定名?使成為網路唯一的識別名稱,有了這個呼叫名稱,才可以連結其它工作站,或被其它工作站所連結,宛如電話號碼一般;(2) 如何尋找連結路徑?在廣泛複雜網路之中,如何尋找出可以到達目的地的最佳路徑。因此,IP 通訊協定是 Internet 網路中既重要、又複雜的通訊軟體。目前 Internet 網路已連結全世界上億的電腦,任何地區的網路只要透過簡單的路由器就可銜接上 Internet,每一部路由器上主要功能就是實現 IP 通訊協定的功能,所以 IP 必須有足夠的共通性和連結性,本節就依照這個方向介紹 IP 通訊協定。

5-2-1 IP 協定特性

IP是整個 Internet 協定中的靈魂,任何通訊軟體(ICMP TCP)都是利用 IP 來傳送,亦即,無論資料的功能為何,所有資料都必須經由 IP 協定包裝後再轉送,其功能如下:

在網路層和傳輸層之間資料的轉送。

進行封包的拆解與重組。

將封包傳送到目的主機,包含跨越多個網路找到目的主機所在的網路位址。

基本上,IP 的連接技術是非連接方式的電報傳輸(Datagram),因此在網路通訊的技術上,具有下列特性:

IP 是非連接(Connectionless)服務。表示 IP 在傳送封包之前,雙方並未事先建立連線。發送端直接將封包發送到網路上,由網路上各個路由器(或網路閘門)負責轉送到達目的地。

IP 無錯誤偵測功能。當封包進入路由器時,路由器只針對封包標頭上的目的位址轉送,並不保證該封包是否可安全無恙傳送到目的地,因此沒有針對封包內的資料作錯誤偵測。封包在傳輸當中,是否受到干擾或其他原因影響,而發生錯誤,這必須由委託傳送(或上層)的通訊軟體自行負責偵測。

封包彼此之間的次序,經傳送到對方後,可能和原來的不同,因為每個封包都自行依當時網路情況尋找路徑(電報傳輸方式),所經過的路徑不一定相同,到達的次序當然也不一定相同。

封包可能被重複傳送。重複傳送的原因可能是發送端的上一層協定在溢時後,未收到接收端的回應確認(中途遺失?),再發送另一個同樣的封包。而實際上,接收端在收到第一個封包時已作回應(對方沒收到?),結果又再收到同樣的封包。IP 本身只負責傳送封包,封包是否重複傳送,這必須由上層通訊軟體負責偵測。

IP 並不驗證目的主機是否有確實收到正確的資料。

        由以上看出,IP 協定是一個非常不可靠的通訊協定。因此,有關可靠性的處理動作(例如,錯誤偵測、封包次序等)都必須由另一個可靠的上一層協定來處理,所以 IP 協定必須配置可靠的 TCP 協定。正因如此,TCP/IP 必須整合在一起,對整個網路的通訊而言仍維持可靠的。IP 採取不可靠傳輸的原因是希望在廣泛的網路上,能以既快速且簡單的傳送方式來傳送,如此較容易結合各地區的網路。如果採用可靠的傳輸(如 X.25)要連結全世界的電腦可能要花費不少成本,自然也限制網際網路的發展(如電話系統)。

5-2-2 IP 位址

(A) IP 位址結構

Internet 網路中,任何一部連線的電腦或工作站設備都稱為主機(host)。早期 TCP/IP 被設計成適合在不同類型、位置之全球各地的電腦系統之間連接,為了方便標定每部主機,TCP/IP 定義了一套通用的定址方法。當時理想的定址格式必須能提供足夠的路徑選擇(routing)資訊,而且不要佔用太多記憶體空間,因此,將 IP 位址(IP Address)的長度設定為 32 位元。為方便表達,我們將此 32 位元分割成四段,連續 8 位元為一組,每組並以十進位值(0 ~ 255)表示,每組之間以點(dot)分隔。整個 IP 位主表示法就如下所示:

dec3.dec2.dec1.dec0(如 163.15.2.1

雖然 IP 位址長為 32 位元,但其中包含兩種號碼:網路號碼(Network number)及主機號碼(Host number),因此 IP 位址也可以表示成:(如圖 5-6 所示)

network number, host number

5-6 IP 位址結構

        在實務連接上,並非每一部主機上都只有一個 IP 位址,一般 IP 位址都依照網路介面卡(Ethernet 網路卡)設定。如主機有特殊需要安裝多個網路介面卡(如當路由器使用),每只網路介面卡上都必須設定一個 IP 位址,因此,一部主機上就擁有多個 IP 位址,同時也容許類似虛擬主機的設定,表示一只網路介面卡上可設定多個 IP 位址。

(B) IP 位址分級

32 位元長度的位址之中,應該多少位址長度來表示網路位址或主機位址。TCP/IP 網路依照所能容納的主機和網路的數量多寡分成 ABC D E 五種類級(class),如圖 5-7 所示,其中 Class D 目前為實驗性多點廣播(Multicast)位址,Class E 則保留未來發展之用。分級技巧是配置不同數目的網路位址,網路位址的位元數愈多,所能指定的網路數量就愈多,但相對應的主機位址就愈少。Class C 所能容納的網路位址最多,所以在 Internet 網路上定址方式皆採用 Class C 模式。Class A 所能容納的主機位址最多,但相對應的所能容納的網路位址最少,一般使用在區域網路的定址模式。各類級的特性如下:

5-7 各類級的 IP 位址結構

(1) Class A以最高位元(第 31 位元)為0 表示 Class A 模式。前一位元組(8 位元)表示網路位址;而後 24 位元表示主機位址。網路位址由 1.0.0.0 ~ 126.0.0.0,所能表示的主機位址是 1.0.0.0 ~ 126.255.255.255 的範圍之內。Netmask = 255.0.0.0(下小節說明)。

(2) Class B:以二個最高位元為 10 表示 Class B 模式。前 16 位元表示網路位址;而後 16 位元表示主機位址。網路位址由 128.0.0.0 ~ 191.255.0.0,所能表示的主機位址為 128.0.0.0 ~ 191.255.255.255 的範圍之內。Netmask = 255.255.0.0

(3) Class C:以前三個最高位元為 110 表示 Class C 模式。前 24 位元是網路位址;而後 8 位元為主機位址。網路位址由 192.0.0.0 ~ 223.255.255.0,所能表示的主機位址為 192.0.0.0 ~ 223.255.255.255 的範圍之內。Netmask = 255.255.255.0

(4) Class D以前四個位元為 1110 表示 Class D 模式。其主要應用於多點廣播(Multicast),一些特殊應用軟體皆用此模式,來對某些定點(工作站)廣播,如隨選視訊(VOD)就用此定址模式,對若干個定點工作站廣播視訊。

(5) Class E以前四個最高位元為 1111 表示 Class E 模式。目前保留尚未使用。

經過 IP 分級後,IP 位址可分為兩大部份:網路位址和主機位址。如以 Class B 中的 163.15.3.42 為例,此 IP 位址可區分為下列兩種位址:

網路位址:163.15.0.0

主機位址:0.0.3.42

如果僅由 IP 位址來觀察,如此分類好像不是很重要,但是在作路徑選擇時就非常重要,因為一般路徑選擇只觀察網路位址,而不用理會主機位址是多少。

除了上述 IP 分級外,還有一些網路位址保留為特殊使用,其它應用必需避免使用下列位址:

預定閘門(Default Router):以網路0 保留特殊使用,並以0.0.0.0作為預定閘門位址。

回繞位址(Loopback Address):網路 127 也保留於特殊用途,並以127.0.0.0作為回繞位址,127.0.0.1表示主機位址,主要作為測試網路使用。

廣播位址(Broadcast Address):IP 位址全部為1 時,表示是對所有主機的廣播位址255.255.255.255。一般應用上只對本網路廣播,因此,將所有主機位址設定為 1 時,表示對本網路所有主機管播,譬如,163.15.0.0 網路的廣播位址為163.15.255.255

剛開始設計 TCP/IP 網路時,電腦還未普及,網路也非常少,TCP/IP 協定開始應用時也只連結大型主機,因此 32 位元容量的 IP 位址對當時來講已足足有餘。但沒有想到 Internet 網路大風行,理論上,任何一部電腦連結上 Internet 網路都需要一個獨一無二的 IP 位址,因此 IP 位址將會在短期內被耗盡。雖然目前已提出 IPv6 的解決方案,但要網路上使用中的路由器和主機都更新為 IPv6 的通訊協定,也並非易事。目前網路上大多透過『網路位址轉換器』(Network Address Translator, NAT來增加私人網路位址,以解決 IP 位址不足的問題。

(C) 網路遮罩(Network Mask, Netmask

IP 位址是由網路號碼和主機號碼組成的 32 位元,為方便起見,一般都用 [network#, host#] 表示。網路號碼決定主機所屬的網路位址,因此主機在傳遞封包之前,會先過濾出網路號碼,再決定封包應該往哪一個網路傳送。為使能由 IP 位址中過濾出網路號碼,我們使用『網路遮罩』(Netmask來過濾。網路遮罩亦為 32 位元,在位元中 "1" 表示網路位址;而 "0" 表示主機位址,其遮罩方式如圖 5-8 所示。如IP 分級方式,各等級之網路遮罩為:

Class A網路遮罩為 255.0.0.0

Class B網路遮罩為 255.255.0.0

Class C網路遮罩為 255.255.255.0

在一般網路遮罩,皆是 IP 位址的前面若干位元設定為 "1",因此,我們以網路號碼的長度(也是網路遮罩的長度)來代表網路位址的範圍,以『主機號碼/網路號碼長度』來表示一個網路位址,如:

IP = 163.15.2.3/16 表示網路遮罩長度為 16 位元,則:

網路位址 = 163.15.0.0

主機位址 = 0.0.2.3

5-8 IP Netmask

(D) 次網路遮罩(Subnet Mask

如果硬是將網路位址區分為三個類級(Class A ~ C),恐怕很難滿足各種環境需求。例如,目前 TANet 使用 Class B 的定址模式,分配到每一個學校 2 ~3 個網路號碼。每一個學校裡的網路,是由多個系所的區域網路所構成,在技術上,每一個區域網路都要有一個網路號碼,因此網路號碼一定不符所需,這也是 IP 分級所衍生的問題。解決的方法就是再劃分次網路(Subnet),產生次網路的基本原理,是將原有主機號碼的幾個位元拿來當網路號碼,並沒有改變原來 32 位元的 IP 位址格式。

如欲劃分次網路,就必須有次網路的編號,原來 IP 位址所表達的是 [network#, host#] 方式,就必須更換為 [network#, subnet#, host#] 形式。而增加次網路號碼,就必須犧牲原來主機號碼的數量,次網路號碼增加愈多,主機號號碼就減少愈多。對整個位址格式並未改變,因為原來網路號碼並未改變,對外部網路而言,次網路位址也被視為主機位址,因此連結到外部網路並不影響。我們以一個例子說明,假使希望在 163.15.0.0 的網路上增加 8 個次網路,基本上,163.15.0.0/16 網路是屬於 Class B 格式,它原來的 IP Netmask 255.255.0.0。我們為了增加 8 個次網路,必須將 3 個位元的主機號碼拿來當次網路號碼,因此 Netmask 255.255.224.0,如圖 5-9 所示。

5-9 次網路號碼

分割後所產生的網路位址為:(Network number = 163.15.0.0Netmask = 255.255.224.0

163.15.0.0/19163.15.32.0/19163.15.64.0/19163.15.96.0/19163.15.128.0/19163.15.160.0/19163.15.192.0/19162.15.224.0/19

主機位址和網路位址範圍為:

1 個次網路範圍:163.15.0.0 ~ 163.15.31.255

2 個次網路範圍:163.15.32.0 ~ 163.15.63.255

3 個次網路範圍:163.15.64.0 ~ 163.15.95.255

4 個次網路範圍:163.15.96.0 ~ 163.15.127.255

5 個次網路範圍:163.128.0.0 ~ 163.15.159.255

6 個次網路範圍:163.160.0.0 ~ 163.15.191.255

7 個次網路範圍:163.15.192.0 ~ 163.15.223.255

8 個次網路範圍:163.15.224.0 ~ 163.15.255.255

如果依照 IP 分級中,網路位址全部為 0 1,保留給預定路由器和廣播位址,則上述第 1 8 不可以作為次網路位址(RFC 950),因此,次網路位址剩下 6 個。但最新規範(RFC 15181519)允許使用這兩個網路位址,但一般路由器必須有支援此功能(CIDR)才可以。

5-2-3 IP 封包結構

5-10 IP 封包之資料結構,其中包含 IP 標頭和 IP 承載(IP Payload)(圖中 Data)兩大部份。IP 標頭的長度可以由 20 Bytes 60 Bytes 不等(由 IHL 欄位登錄),對整個 IP 封包長度可以是 46 ~ 1500 Bytes之間(如圖 5-2 所示)。IP 標頭的各欄位功能如下:

5-10 IP 封包結構

版本(Version):4 位元。表示 IP 封包的 IP 版本。

網際標頭長度(Internet Header Length, IHL):4 位元。表示本 IP 封包標頭的長度(位元組表示)。範圍為 5 ~ 15,預設值為 5

服務型態(Type of Service, TOS):8 位元。其內容為 "PPPDTRUU"PPP 表示本 IP 封包的優先權(Precedence);D = 0 表示一般延遲(Delay),D = 1 表示低延遲;T = 0 為一般傳送量(Throughput),T = 1 為高傳送量;R = 0 為一般可靠度,R = 1 為高可靠度(Reliability);UU 保留未用。

總長度(Total Length):16 位元。是指該封包的總長度,包括封包標頭及資料的長度,範圍由 576 ~ 65535 位元組。

辨識碼(Identification):8 位元。表示資料分割(fragmentation)的識別編號。同一筆資料如被分割成若干個區段,每段給予相同的辨識碼,接收端再依辨識碼組合回原來資料封包。

旗標(Flags):3 位元。其格式為 "0DM"D = 0 表示可以分段,D = 1 為不可分段(Dont fragment);M = 0 表示最後分段,M = 1 為不是最後分段(More fragment)。

分段偏移(Fragment Offset):13 位元。表示目前的分段在原始的資料中所在的位址。原始分段允許有 8192 個分段,以每 8 個位元為一個基本偏移量,所以最大容許 65536 位元資料,此值和總長度一樣。因此範圍為 0 ~ 8191,預設值為 0

存活時間(Time to Live, TTL):8 位元。表示該封包在網路上的存活時間,封包每經過一個路由器(或網路閘門),該值就被減一。如路由器發現某封包的 TTL = 0,便將該資料片丟棄而不轉送。範圍 0 ~ 255

協定號碼(Protocol Number):8 位元。表示該 IP 封包所承載通訊協定的協定號碼。在 TCP/IP 協定中,任何通訊協定(如IPICMPTCPUDP等等)的資料在傳送中都被包裝成 IP 封包,而以 IP 通訊協定發送。所以,在IP 封包裡必須有協定號碼欄位,來表示目前所承載之資料是屬於哪一個通訊協定(IPICMPTCP 等等)。一些較常用著名(well-known)的協定號碼如表 5-1 所示。

標頭檢查集(Header Checksum):16 位元。做標頭錯誤檢查用。

來源位址(Source Address):32 位元。發送此 IP 封包的來源位址。

目的位址(Destination Address):32 位元。目的主機之位址。

選項欄位(Options):可變長度。提供多種選擇性服務。目前已定義使用有下列:

(1) 安全處理機制:有關資料加密與認證。

(2) 路由紀錄: IP 封包經過路由器時,讓該路由器登錄其 IP 位址。當封包到達目的地時,可追蹤它所經過的路徑。

(3) 時間戳記: IP 封包經過路由器時,讓路由器登錄其 IP 位址和時間。

(4) 寬鬆來源路由(Loose Source Routing):記錄該封包所必須經由之路徑,為一 IP 位址的序列表。

(5) 嚴格來源路由(Strict Source Routing):如同寬鬆來源路由,但嚴格規定祇能依照 IP 序列表傳送該封包。

填補欄位(Padding):IP 資料片的標頭一定是 32 位元的整數倍,當 Options 欄位不足 32 位元整數倍時由 Padding 欄位補足。

5-1 著名協定號碼(節錄)

協定名稱

協定號碼

協定全名(協定包裝在 IP 資料片內)

ICMP

1

Internet Control Message Protocol

IGMP

2

Internet Group Management Protocol

GGP

3

Gateway-to –Gateway Protocol

IP

4

IP in IP encapsulation

TCP

6

Transmission Control Protocol

EGP

8

Exterior Gateway Protocol

IGP

9

Interior Gateway Protocol

UDP

17

User Datagram Protocol

        5-11 IP 封包所擷取的結果(以 Telnet 命令所得),而圖 5-12 為該封包的封裝格式。由 Protocol 欄位(6)可以得知 Telnet 是使用 TCP 連接。

5-11 IP 封包擷取結果

5-12 IP 封裝範例(依圖 5-11 擷取結果)

5-2-4 IP 路徑選擇

IP 路徑選擇(Routing)是 Internet 網路上最主要的中心樞紐。上層的應用程式如何在浩瀚的網路之中找到欲通訊的對象,這就是利用 IP 路徑選擇的功能。基本上 IP 路徑選擇是屬於分散式處理方式,網路上任一路由器(Router)或網路閘門(Gateway)並不瞭解整個網路的狀況,它的路徑選擇功能只知道下一個路徑可能到達哪些地方。當 IP 封包由傳送端發出後,它將不知道,也不可能知道,這筆資料是否可安全到達目的地,和可能經過哪些路徑。所經過的路徑都是先到達某一路由器,再由該路由器決定應該往哪一下個路徑(Next hop)傳送,IP 封包就在這層層轉送之中到達目的地。因此,一筆資料可安全到達目的地,是由網路上所經過的路由器共同來完成,並非發送端事先可以控制的,也不是某一特殊設備事先建立好通訊連線(如虛擬電路)。

為了實現 IP 路徑選擇的機制,在每部主機或路由器上都必須維護一只路由表(Routing Table),在路由表內每一筆記錄至少必須包含下列訊息:

目的位址(Destination Address):此欄位可以是 IP 的完整主機位址或只有網路位址,如是完整主機位址必須包含主機號碼(Host ID)與網路號碼(Network ID)。

下一站位址(Next Hop Address):此欄位內表示封包經由轉送之位址。下一站位址也許是該封包的目的位址或在經由下一站在轉送。

旗標(Flags):旗標用來標示目的 IP 位址是否為一網路位址或是主機位址。一般路由器有下列五種旗標:

U該路徑可使用。

G該路徑為網路閘門(Gateway)。如此旗標未設定表示該路徑與目的端直接連接。

H該路徑通往主機位址。亦是目的位址為一完整的主機位址(網路號碼 + 主機號碼)。

D該路徑因轉向所產生。(ICMP Redirect

M該路徑被轉向所改變。(ICMP Redirect

下一路徑之網路介面:該路徑所必須經由之網路介面。

通常區域網路的範圍較小,在同一網路內,主機和主機之間無須借助路徑選擇即可通訊,一般都使用廣播方式(Broadcast)通訊。傳送主機將封包廣播到網路上,同一網路上所有主機收到該封包後,會先檢查封包標頭的目的位址是否和自己的位址相符,如果是就收下該封包;否則忽略它。但在廣域網路上就無法利用廣播方式來傳送封包,如果每部主機都廣播,則整個網路將被廣播封包所佔滿。因此網路之間需設置一個以上的對外網路閘門或路由器,網路閘門就是負責封包對外的所有通訊,隔離內外網路,只讓必要的封包通過,阻擋不必要的封包經過。

路徑選擇的處理方式是當某一部主機或路由器要發送封包時,首先檢查封包之目的 IP 位址,其處理程序如下:

(1) 若目的位址的網路號碼與本主機(或路由器)的網路號碼相同時,則表示目的主機在本網路內,不需選擇路徑,直接將封包送出,例如採用廣播方式(首先查問 ARP)。

(2) 若目的位址的網路號碼與本主機(或路由器)的網路號碼不同時,則表示目的主機不在本網路內,必須跨越路由器到其他網路。就將該封包轉送給另一路由器,由它去負責轉送。

(3) 一般路由器(或網路閘門)都安裝有兩個以上的網路卡,每個網路卡連接一個網路也代表一個網路號碼。當它由任一個網路(或網路卡)上收到一個封包後,依照步驟 (1)(2) 處理。

當主機(或路由器)發現所要發送(或轉送)的封包不在本網路內,而必須將該封包轉送給其它路由器,由它再負責傳送時,如果網路上有多個路由器,應該轉送給哪一個路由器?這就牽涉到路徑選擇的問題。因此,主機(或路由器)查詢路由表的動作如下:

(1) 在路由表中,尋找完全符合的目的 IP 位址(網路號碼與主機號碼)。如果找到,便將封包轉送給下一路徑路由器或網路連接介面;否則,接下一步驟。

(2) 在路由表中,尋找吻合之網路號碼之紀錄,如果找到,便轉送給該路徑之下一站;否則,接下一步驟。

(3) 在路由表中,尋找『預設』路徑位址,便將該封包轉送到預設位址;否則,便回送目的主機無法到達(ICMP Destination Unreachable)或網路無法到達(ICMP Network Unreachable)之訊號給原發送該封包者。

在整個路徑選擇過程,首先尋找是否相吻合之主機位址,在尋找吻合之網路位址,如果兩者皆找不到適合路徑,再將該封包傳送給『預設』(Default路徑。每一路徑是否有轉送功能,必須視其旗標的設定,如該路徑的旗標設定為 G Gateway)便有轉送的功能。如設定為 HHost),表示最終位址,並不負責轉送,如目的位址不在該網路位址(或網路埠口)所屬網路上,它便會回送 ICMP 給原發送端,表示無法到達目的地。

(A) 運作範例

我們以圖 5-13 來說明 IP 路徑選擇的運作程序。圖中有三個網路:163.15.2.0/24163.15.3.0/24 163.15.4.0/24,利用兩個路由器(Router_A Router_B)所連結而成。每一路由器上都有兩個連接埠口,並個別設定 IP 位址。圖 5-14 為兩個路由器的路由表,其可能是靜態路由(Static Routing)或動態路由(Dynamic Routing)。我們以下列三種情況來說明路徑選擇的運作程序:

5-13 IP 路徑選擇範例

5-14 Router A B 的路由表

(1)  主機 A163.15.2.1)欲傳送封包給主機 B163.15.2.2):主機 A 發現目的網路位址和自己網路號碼相同(163.15.2.0/24),便將封包直接廣播到網路上(由 ARP 查詢對方實體位址後,再傳送給主機 B),主機 B 由網路上收到封包。

(2)  主機 A163.15.2.1)欲傳送封包給主機 C163.15.3.1):目的網路號碼不同,必須透過路由器轉送。主機 A 便將封包傳送給 Router_A R1a(預定路由器)。Router_A Ra1 埠口收到封包(目的位址為 163.15.3.1)後,便由路由表上得知網路位址是 163.15.3.0/24 的封包,必須轉送到 163.15.3.254Ra2),便將該封包由 Ra2 埠口廣播出去(163.15.3.0/24 網路)。主機 C 由網路上讀取到該封包。

(3)  主機 A163.15.2.1)欲傳送封包給主機 D163.15.4.1):Router_A 是網路(163.15.2.0/24)的唯一出口,主機 A 勢必將封包傳送給 Router_A(與網路號碼無關)。Router_A 由路由表上查詢後,便由 Ra2163.15.3.254)廣播出去(也可直接傳給 163.15.3.253)。Router_B Rb1 收到封包,再由路由表上查出,應轉送到 Rb2163.15.4.254),便由 Rb2 埠口將封包廣播出去。主機 D 由網路上(163.15.4.0/24)收到該封包。

(4)  主機 A 欲傳送封包給外部網路之主機 K148.5.6.7):該封包會經由 Router_ARa1Ra2),再經 Router_BRb1Rb3),被傳送到外部網路上。至於該封包在 Internet 上如何被傳送到主機 K,是由外部網路之路由器負責,本地網路是幫不上忙的。

另外,我們可以在主機上執行 route 命令,來觀察該主機所建立的路由表:

(必須以 root 使用者登入 Linux 主機)

# route

Kernel IP routing table

Destination     Gateway       Genmask      Flags  Metric  Ref    Use Iface

linux-1.cu.edu.   *           255.255.255.255  UH    0      0     0  eth0

163.15.2.0      *           255.255.255.0    U     0      0     0  eth0

192.168.0.0     *           255.255.255.0    U     0      0     0  eth1

127.0.0.0       *           255.0.0.0       U     0      0      0  lo

default         192.168.0.1   0.0.0.0         UG    0      0      0  eth1

default         linux-1.cu.edu. 0.0.0.0         UG    1      0      0  eth0

(B) 路由表建構方式

路由表的建構牽涉到整個 IP 網路的封包轉送效益,當網路的狀況隨時改變,IP 所經過的路由也隨時變化,因此,建構(或維護)這路由表有兩種方法:

靜態路徑選擇(Static routing):路由表是由人工建立,完成後除非再由人工修改,否則不會變更。系統維護人員會依照網路狀況或規劃網路拓樸圖架構來建立靜態路由表。(一般使用 route ifconfig 命令來建立)

動態路徑選擇(Dynamic routing):路由表是由網路上路由器(或網路閘門)隨時交換訊息所建立而成。因此,路由器會隨時依照網路狀況自動維護路由表。至於路由表如何建立的技術,於第七章我們再詳細介紹其演算法。

關於靜態路由表的設定方法,在本書的第九章有針對 Linux 系統上的實作說明,並在第十八章有詳述 Microsoft 網路上的設定方法。有關動態路徑選擇的理論將再第六章說明。

5-2-5 IP 廣播與多點傳送

基本上 IP 通訊協定有:單點傳送(Unicast)、廣播(Broadcast)及多點傳送(Multicasting)等三種定址方式。單點傳送採用 Class AClass B Class C 三種定址方法,針對單一目的主機傳送封包,也就是點對點(Point-to-Point)的傳送。針對某一網路(或子網路)的廣播位址的定址方法是將該網路位址之下的主機位址設定為 "1",譬如在 163.15.0.0/16 的網路下,廣播封包之目的位址設為 163.15.255.255,該網路上任一工作站接收到廣播封包後,再判斷是否傳送給自己,並決定是否保留或拋棄。如果是針對某一子網路廣播,所定址的方式也如同網路一樣,譬如,欲將某封包廣播到 163.15.2.0/24 之子網路上,而它的目的位址為 163.15.2.255。又如果針對網路上所有工作站廣播,定址為 255.255.255.255

在許多情況下廣播訊息是由傳輸層(TCP UDP)發送到某一特定的傳輸埠口(Port)上,以作為特殊用途(如 VOD),如果還是採用廣播訊息,則網路上每一工作站將必須接收該封包,再從事判斷的工作。例如,一部視訊伺服器(Video Server)發送視訊給網路上收視的工作站,雖然當時網路上有 100 工作站,但只有 30 部工作站收視該視訊,如果採用廣播定址方式,100 部工作站都必須接收該封包,並透過網路存取層、網際層和傳輸層(TCP UDP)判斷,才可決定是否接受該訊息,如此會造成其它未收視工作站不必要的負荷,如採用另一種『多點傳送』定址,祇針對已收視之工作站發送訊息,其它工作站在網際層(IP)就可決定是否拋棄該封包,也祇有已收視的 30 部工作站會將該封包拆解到傳輸層。

『多點傳送』是採用 Class D 的群組定址方法,如圖 5-15 所示。它不同於單點傳送 IP 位址(Calss AB C)模式,多點傳送群組 ID 只需另外配置 28 位元即可,不需另外的結構,而位址範圍由 224.0.0.0 239.255.255.255。任一工作站可以選取加入一個或多個多點傳送群組的位址內,而工作站的所在位置並非限於某一固定網路內,亦可跨越不同網路。工作站和群組關係是動態的,工作站可以隨時選擇加入或退出。當工作站接收到多點廣播封包,便依照該封包上的群組位址判斷是否給予接收或拋棄,因此,針對多點傳送封包只拆解到網際層。

5-15 Class D 多點傳送位址格式

        有些多點傳送群組被 IANAInternet Assigned Number Authority)設定為公認位址,又稱為『永久主機群組』。例如,224.0.0.1 『子網路上的所有系統』224.0.0.2 『子網路上所有路由器』,另外RIP-2 NTP 224.0.0.9,其它有關網路閘門之通訊協定都有指定某一特殊多點傳送位址。

5-2-6 IP 分段

Internet 網路上,各種訊息(TCPUDPICMPIGMP)都被包裝在 IP 封包內傳送。雖然整個 IP 封包的最大長度為 65535 位元組,但所經過的實體網路大多有限制一定的長度,譬如 Ethernet 網路最大訊框的長度為 1518 位元組,其所能承載之訊息長度為 1500 位元組,如扣除 IP 封包本身的標頭,最高僅能傳送 1440 ~ 1480 位元組(如圖 5-10 所示)。又當一個 IP 傳送路徑之中,也許會經由許多不同型態的網路,各種網路都有其限制最大框訊框的大小,因此就牽涉到該 IP 封包應該多大才適合,該封包大小就稱之為『最大傳輸單位』(Maximum Transission Unit, MTU。例如,Ethernet 網路之 MTU 1492 位元組;IBM Token-Ring MTU = 17914 位元組;IEEE Token-Ring MTU = 4464 位元組;X.25 MTU = 576 位元組。

當兩部工作站互相通訊時,它們之間的 MTU 就非常重要,因為通訊之中的封包不一定經由同一路徑傳送,每一路徑所經過之實體網路都有不同的 MTU 限制。因此,MTU 大小並非由兩工作站之間的網路所限制,而是通訊之間所有可能經由之網路的最小 MTU,也稱之為『路徑 MTU』(Path MTU。如何來協議傳送之 IP 封包的 MTU 是利用 ICMP 協定之『目的無法到達』(Destination UnreachableType 3)的Dragmentation Needed and DF setCode = 4)訊息,來通知發送端必須修改 MTU 大小。或是利用 traceroute 命令來探索所欲到達目的之路徑 MTU,一般國際性網路所經過的路徑較為複雜,路徑 MTU 大多限制在 576 位元組以內,但也都以 512 位元組傳送較多。

我們以圖 5-16 來說明 IP 分段的情形,如上層所傳輸為 TCP 訊息,基本上,TCP 訊息最大長度也可以達到 65535 個位元組,但 IP 封包大小必須依照所經過之網路的 MTU 而定,假設所經過為 Ethernet 網路,Ethernet 網路最大訊框為 1518 位元組,扣除本身的訊框表頭與 CRC 欄位(如圖 5-2 所示),所能包裝的最大訊息為 1500 個位元組,分段的情形,就是將 TCP 訊息以最大 1480 個位元組分割填入 IP 封包內,亦可以發現只有分割後的第一個 IP 封包上有 TCP 的協定表頭,這對於防火牆的製作,將會產生很大的困擾。

5-16 IP 分段情形(TCP 訊息)

        原傳送訊息之工作站並不能預知 IP 可能經過的路徑,因此當分段後的 IP 可能到達另一型態之網路,會被要求再分段。如圖 5-17 中,工作站A 欲傳送訊息給工作站 B,起先工作站 A 所連接為 Ethernet 網路,而以 1500 位元組型態來分段,但當 IP 封包經由路由器 A 進入 X.25 網路時,該網路的 MTU 512 位元組,因此 IP 封包勢必再分割成若干個封包,再傳送給工作站 B

5-17 IP 封包分段之情形

        IP 分段並不同於一般通訊協定的情形(如 1-3-2 節說明),IP 分段的機會可能會發生在原傳送端,或路徑中的路由器,但分段後的封包必須到達目的地,才會被組裝回來,其主要的原因是只有原發送端分段的第一個封包有上層通訊協定(如 TCP)的表頭(如圖 5-16 所示),如在中途組裝會產生許多不必要的困擾。因此,IP 封包如果經過分段後,我們將儘可能不要讓它在傳送途中再被分段,因此會在 IP 封包的表頭的旗標(Flags)上設定 DFDont Fragment),並以『分段偏移』(Fragment Offset標示從原來資料開頭到此分段資料的偏移量;旗標中 M = 1 表示後面還有分段之封包;M = 0 表示這是分段封包的最後一個封包。

5-18 為網路之間 MTU 協調情況,被分段的封包進入路由器 A,而準備轉送到 X.25 網路上,路由器 A 發現該封包必須再分段,而 IP 表頭上已設定 DF 旗號,表示不可再分段封包,因此,路由器 A 會發送 ICMP Fragmentation Needed and DF set 回原發送端(工作站 A)要求重新設定 MTU,如此,便可協議出封包應該分段的大小了。

5-18 網路之間 MTU 的協調情形

5-2-7 IP 來源路徑選擇

基本上,當某一 IP 封包被發送出去之前,傳送端並不能預估該封包可能經過之路徑,而是由網路上之路由器轉送而到達目的地。但如果傳送端能預估 IP 所經由路徑,或許可由網路架構圖上觀察出來,或經由traceroute程式去探索出可到達的路徑,就可以在傳送之前指定該封包到達目的地的路徑,其設定方法是在 IP 封包表頭上的『選項』(Option欄位上,註明所欲經過路徑的路由器序列。選項欄位的結構如圖 5-19 所示(請配合圖 5-10 IP 封包結構),一般最高可紀錄 9 個路由器的 IP 位址,因此,選項欄位最長為 39 個位元組,不及 4 位元組的整數倍以 Padding 欄位補足。選項欄位下的各子欄位功能如下:

編碼(Code):0x83 表示寬鬆來源路徑選擇;0x89 表示嚴格來源路徑選擇。

長度(Length):表示該來源路徑的總位元數。

指標(Pointer):標明目前已經過到第幾個路徑中的路由器(以位元組位址表示)。

IP 位址:路徑中所經過路由器的 IP 位址,由前至後的 IP 位址排列表示整個路徑。

 

5-19 IP 來源路徑選擇之選項

        如果使用嚴格路徑選擇,表示該封包所傳送的路徑,一定必須符合 IP 位址序列傳送,倘若有某一路由器無法到達,便回送 ICMP Source Route FaileType = 3Code = 5)回原發送端。寬鬆路徑選擇採用較寬鬆的方法,只要依照該序列路徑,而允許跨越其它位址的路由器。又當封包每經過一個路由器,該路由器便將指標(Pointer)往後一個 IP 位址的空間,再傳送給下一個路由器。

 

 

<GOTOP>