引言
I P 是 T C P / I P 協議族中最為核心的協議,所有的 T C P、U D P、I C M P 及 I G M P 資料都以 I P 資料
報格式傳輸(見圖 1 - 4),許多剛開始接觸 T C P / I P 的人對 I P 提供不可靠、無連接的資料報傳送
服務感到很奇怪,特別是那些具有 X . 2 5 或 S N A 背景知識的人,
不可靠(u n r e l i a b l e)的意思是它不能保證 I P 資料報能成功地到達目的地, I P 僅提供最好
的傳輸服務,如果發生某種錯誤時,如某個路由器暫時用完了緩沖區, I P 有一個簡單的錯誤
處理演算法:丟棄該資料報,然后發送 I C M P 訊息報給信源端,任何要求的可靠性必須由上層來
提供(如 T C P),
無連接(c o n n e c t i o n l e s s)這個術語的意思是 I P 并不維護任何關于后續資料報的狀態資訊,
每個資料報的處理是相互獨立的,這也說明, I P 資料報可以不按發送順序接收,如果一信源
向相同的信宿發送兩個連續的資料報(先是 A,然后是 B),每個資料報都是獨立地進行路由
選擇,可能選擇不同的路線,因此 B 可能在 A 到達之前先到達
IP 首部
P 資料報的格式如圖 3 - 1 所示,普通的 I P 首部長為 2 0 個位元組,除非含有選項欄位,

服務型別(TO S)欄位包括一個 3 bit 的優先權子欄位(現在已被忽略),4 bit 的 TO S 子字
段和 1 bit 未用位但必須置 0,4 bit 的 TO S 分別代表:最小時延、最大吞吐量、最高可靠性和最
小費用,4 bit 中只能置其中 1 bit,如果所有 4 bit 均為 0,那么就意味著是一般服務,RFC 1340
[Reynolds and Postel 1992]描述了所有的標準應用如何設定這些服務型別, RFC 1349
[Almquist 1992]對該 R F C 進行了修正,更為詳細地描述了 TO S 的特性,
圖 3 - 2 列出了對不同應用建議的 TO S 值,在最后一列中給出的是十六進制值,因為這就是
在后面將要看到的 t c p d u m p 命令輸出,

e l n e t 和 R l o g i n 這兩個互動應用要求最小的傳輸時延,因為人們主要用它們來傳輸少量的
互動資料,另一方面, F T P 檔案傳輸則要求有最大的吞吐量,最高可靠性被指明給網路管理
(S N M P)和路由選擇協議,用戶網路新聞( Usenet news, NNTP)是唯一要求最小費用的應
用,
現在大多數的 T C P / I P 實作都不支持 TO S 特性,但是自 4.3BSD Reno 以后的新版系統都對它
進行了設定,另外,新的路由協議如 O S P F 和 I S - I S 都能根據這些欄位的值進行路由決策,
我們提到 S L I P 一般提供基于服務型別的排隊方法,允許對互動通信資料在處理大塊資料之前進行處
理,由于大多數的實作都不使用 TO S 欄位,因此這種排隊機制由 S L I P 自己來判斷和處理,驅動程
序先查看協議欄位(確定是否是一個 T C P 段),然后檢查 T C P 信源和信宿的埠號,以
判斷是否是一個互動服務,一個驅動程式的注釋這樣認為,這種“令人厭惡的處理方法”是必需的,
因為大多數實作都不允許應用程式設定 TOS 欄位,
總長度欄位是指整個 I P 資料報的長度,以位元組為單位,利用首部長度欄位和總長度欄位,
就可以知道 I P 資料報中資料內容的起始位置和長度,由于該欄位長 1 6 位元,所以 I P 資料報最
長可達 6 5 5 3 5 位元組(回憶圖 2 - 5,超級通道的 M T U 為 6 5 5 3 5,它的意思其實不是一個真正的
M T U — 它使用了最長的 I P 資料報),當資料報被分片時,該欄位的值也隨著變化
選項欄位一直都是以 32 bit 作為界限,在必要的時候插入值為 0 的填充位元組,這樣就保證
I P 首部始終是 32 bit 的整數倍(這是首部長度欄位所要求的),
IP 路由選擇
從概念上說,I P 路由選擇是簡單的,特別對于主機來說,如果目的主機與源主機直接相
連(如點對點鏈路)或都在一個共享網路上(以太網或令牌環網),那么 I P 資料報就直接送到
目的主機上,否則,主機把資料報發往一默認的路由器上,由路由器來轉發該資料報,大多
數的主機都是采用這種簡單機制
在一般的體制中,I P 可以從 T C P、U D P、I C M P 和 I G M P 接收資料報(即在本地生成的資料
報)并進行發送,或者從一個網路介面接收資料報(待轉發的資料報)并進行發送, I P 層在
記憶體中有一個路由表,當收到一份資料報并進行發送時,它都要對該表搜索一次,當資料報
來自某個網路介面時,I P 首先檢查目的 I P 地址是否為本機的 I P 地址之一或者 I P 廣播地址,如果
確實是這樣,資料報就被送到由 I P 首部協議欄位所指定的協議模塊進行處理,如果資料報的
目的不是這些地址,那么( 1)如果 I P 層被設定為路由器的功能,那么就對資料報進行轉發
(也就是說,像下面對待發出的資料報一樣處理);否則( 2)資料報被丟棄,
路由表中的每一項都包含下面這些資訊:
? 目的 I P 地址,它既可以是一個完整的主機地址,也可以是一個網路地址,由該表目中的標
志欄位來指定(如下所述),主機地址有一個非 0 的主機號(見圖 1 - 5),以指定某一特定的
主機,而網路地址中的主機號為 0,以指定網路中的所有主機(如以太網,令牌環網),
? 下一站(或下一跳)路由器( next-hop router)的 I P 地址,或者有直接連接的網路 I P 地
址,下一站路由器是指一個在直接相連網路上的路由器,通過它可以轉發資料報,下
一站路由器不是最終的目的,但是它可以把傳送給它的資料報轉發到最終目的,
? 標志,其中一個標志指明目的 I P 地址是網路地址還是主機地址,另一個標志指明下一
站路由器是否為真正的下一站路由器,還是一個直接相連的介面(我們將在 9 . 2 節中
詳細介紹這些標志),
? 為資料報的傳輸指定一個網路介面,
I P 路由選擇是逐跳地(h o p - b y - h o p)進行的,從這個路由表資訊可以看出, I P 并不知道到
達任何目的的完整路徑(當然,除了那些與主機直接相連的目的),所有的 I P 路由選擇只為數
據報傳輸提供下一站路由器的 I P 地址,它假定下一站路由器比發送資料報的主機更接近目的,
而且下一站路由器與該主機是直接相連的,
完整主機地址匹配在網路號匹配之前執行,只有當它們都失敗后才選擇默認路由,默認
路由,以及下一站路由器發送的 I C M P 間接報文(如果我們為資料報選擇了錯誤的默認路由),
是 I P 路由選擇機制中功能強大的特性,
為一個網路指定一個路由器,而不必為每個主機指定一個路由器,這是 I P 路由選擇機制
的另一個基本特性,這樣做可以極大地縮小路由表的規模,比如 I n t e r n e t 上的路由器有只有幾
千個表目,而不會是超過 1 0 0 萬個表目,
子網尋址
現在所有的主機都要求支持子網編址( RFC 950 [Mogul and Postel 1985]),不是把 I P 地址
看成由單純的一個網路號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號,
這樣做的原因是因為 A 類和 B 類地址為主機號分配了太多的空間,可分別容納的主機數為
2 2 4 -2 和 2 1 6 -2,事實上,在一個網路中人們并不安排這么多的主機(各類 I P 地址的格式如圖 1 - 5
所示),由于全 0 或全 1 的主機號都是無效的,因此我們把總數減去 2,
在 I n t e r N I C 獲得某類 I P 網路號后,就由當地的系統管理員來進行分配,由他(或她)來決
定是否建立子網,以及分配多少位元給子網號和主機號,例如,這里有一個 B 類網路地址
(1 4 0 . 2 5 2),在剩下的 16 bit 中,8 bit 用于子網號,8 bit 用于主機號,格式如圖 3 - 5 所示,這樣
就允許有 2 5 4 個子網,每個子網可以有 2 5 4 臺主機

許多管理員采用自然的劃分方法,即把 B 類地址中留給主機的 16 bit 中的前 8 bit 作為子網
地址,后 8 b i t 作為主機號,這樣用點分十進制方法表示的 I P 地址就可以比較容易確定子網號,
但是,并不要求 A 類或 B 類地址的子網劃分都要以位元組為劃分界限,
大多數的子網例子都是 B 類地址,其實,子網還可用于 C 類地址,只是它可用的位元數較
少而已,很少出現 A 類地址的子網例子是因為 A 類地址本身就很少(但是,大多數 A 類地址都
是進行子網劃分的),
子網劃分縮減了路由表的規模
子網掩碼
任何主機在引導時進行的部分配置是指定主機 I P 地址,大多數系統把 I P 地址存在一個磁
盤檔案里供引導時讀用
除了 I P 地址以外,主機還需要知道有多少位元用于子網號及多少位元用于主機號,這是
在引導程序中通過子網掩碼來確定的,這個掩碼是一個 32 bit 的值,其中值為 1 的位元留給網
絡號和子網號,為 0 的位元留給主機號,圖 3 - 7 是一個 B 類地址的兩種不同的子網掩碼格式,第
一個例子是 n o a o . e d u 網路采用的子網劃分方法,如圖 3 - 5 所示,子網號和主機號都是 8 bit 寬,
第二個例子是一個 B 類地址劃分成 10 bit 的子網號和 6 bit 的主機號,

盡管 I P 地址一般以點分十進制方法表示,但是子網掩碼卻經常用十六進制來表示,特別
是當界限不是一個位元組時,因為子網掩碼是一個位元掩碼,
給定 I P 地址和子網掩碼以后,主機就可以確定 I P 資料報的目的是:(1)本子網上的主機;
(2)本網路中其他子網中的主機;(3)其他網路上的主機,如果知道本機的 I P 地址,那么就知道
它是否為 A 類、B 類或 C 類地址(從 I P 地址的高位可以得知),也就知道網路號和子網號之間的分
界線,而根據子網掩碼就可知道子網號與主機號之間的分界線,
特殊情況的 IP 地址
經過子網劃分的描述,現在介紹 7 個特殊的 I P 地址,如圖 3 - 9 所示,在這個圖中, 0 表示所
有的位元位全為 0;- 1 表示所有的位元位全為 1;n e t i d、s u b n e t i d 和 h o s t i d 分別表示不為全 0 或全
1 的對應欄位,子網號欄為空表示該地址沒有進行子網劃分

我們把這個表分成三個部分,表的頭兩項是特殊的源地址,中間項是特殊的環回地址,
最后四項是廣播地址,
表中的頭兩項,網路號為 0,如主機使用 B O O T P 協議確定本機 I P 地址時只能作為初始化過
程中的源地址出現,
RFC 1009[Braden and Postel 1987]允許一個含有子網的網路使用多個子網掩碼,新
的路由器需求 RFC[Almquist 1993]則要求支持這一功能,
但是,問題在于并不是所有的路由選擇協議在交換目的網路時也交換子網掩碼,
R I P 不支持變長子網,R I P 第 2 版和 O S P F 則支持變長子網,
ifconfig 命令
到目前為止,我們已經討論了鏈路層和 I P 層,現在可以介紹 T C P / I P 對網路介面進行配置
和查詢的命令了,i f c o n f i g( 8 )命令一般在引導時運行,以配置主機上的每個介面,
由于撥號介面可能會經常接通和掛斷(如 S L I P 鏈路),每次線路接通和掛斷時,
i f c o n f i g 都必須(以某種方法)運行,這個程序如何完成取決于使用的 S L I P 軟體
環回介面(2 . 7 節)被認為是一個網路介面,它是一個 A 類地址,沒有進行子網劃分,
需要注意的是以太網沒有采用尾部封裝( 2 . 3 節),而且可以進行廣播,而 S L I P 鏈路是一
個點對點的鏈接
i f c o n f i g 命令一般支持 T C P / I P 以外的其他協議族,而且有很多引數,關于這些細節可
以查看系統說明書
netstat 命令
n e t s t a t( 1 )命令也提供系統上的介面資訊, - i 引數將列印出介面資訊, - n 引數則列印出
I P 地址,而不是主機名字

這個命令列印出每個介面的 M T U、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、沖
突以及當前的輸出佇列長度,
IP 的未來
I P 主要存在三個方面的問題,這是 I n t e r n e t 在過去幾年快速增長所造成的結果(參見習題
1 . 2),
-
超過半數的 B 類地址已被分配,根據估計,它們大約在 1 9 9 5 年耗盡,
-
32 bit 的 I P 地址從長期的 I n t e r n e t 增長角度來看,一般是不夠用的,
-
當前的路由結構沒有層次結構,屬于平面型 ( f l a t )結構,每個網路都需要一個路由表目,
隨著網路數目的增長,一個具有多個網路的網站就必須分配多個 C 類地址,而不是一個 B 類地
址,因此路由表的規模會不斷增長,
無類別的域間路由選擇 C I D R(Classless Interdomain Routing)提出了一個可以解決第三
個問題的建議,對當前版本的 I P(I P 版本 4)進行擴充,以適應 2 1 世紀 I n t e r n e t 的發展,對此我
們將在 1 0 . 8 節進一步詳細介紹,
對新版的 I P,即下一代 I P,經常稱作 I P n g,主要有四個方面的建議, 1 9 9 3 年 5 月發行的
IEEE Network (vol.7, no.3)對前三個建議進行了綜述,同時有一篇關于 C I D R 的論文,R F C
1454 [Dixon 1993]對前三個建議進行了比較, -
SIP,簡單 I n t e r n e t 協議,它針對當前的 I P 提出了一個最小幅度的修改建議,采用 6 4 位地
址和一個不同的首部格式(首部的前 4 位元仍然包含協議的版本號,其值不再是 4), -
PIP,這個建議也采用了更大的、可變長度的和有層次結構的地址,而且首部格式也不
相同, -
TUBA, 代 表“ TCP and UDP with Bigger Address”, 它基 于 OSI 的 C L N P
(Connectionless Network Protocol,無連接網路協議),一個與 I P 類似的 O S I 協議,它提供大得
多的地址空間:可變長度,可達 2 0 個位元組,由于 C L N P 是一個現有的協議,而 S I P 和 P I P 只是建
議,因此關于 C L N P 的檔案已經出現,RFC 1347[Callon 1992]提供了 T U B A 的有關細節 -
TP/IX,由 RFC 1475 [Ullmann 1993]對它進行了描述,雖然 S I P 采用了 64 bit 的址址,但
是它還改變了 T C P 和 U D P 的格式:兩個協議均為 32 bit 的埠號,64 bit 的序列號,64 bit 的確
認號,以及 T C P 的 32 bit 視窗,
前三個建議基本上采用了相同版本的 T C P 和 U D P 作為傳輸層協議,
由于四個建議只能有一個被選為 I P v 4 的替換者,而且在你讀到此書時可能已經做出選擇,
因此我們對它們不進行過多評論,雖然 C I D R 即將實作以解決目前的短期問題,但是 I P v 4 后繼
者的實作則需要經過許多年,
小結
本章開始描述了 I P 首部的格式,并簡要討論了首部中的各個欄位,我們還介紹了I P 路由
選擇,并指出主機的路由選擇可以非常簡單:如果目的主機在直接相連的網路上,那么就把
資料報直接傳給目的主機,否則傳給默認路由器,
在進行路由選擇決策時,主機和路由器都使用路由表,在表中有三種型別的路由:特定
主機型、特定網路型和默認路由型,路由表中的表目具有一定的優先級,在選擇路由時,主
機路由優先于網路路由,最后在沒有其他可選路由存在時才選擇默認路由,
I P 路由選擇是通過逐跳來實作的,資料報在各站的傳輸程序中目的 I P 地址始終不變,但
是封裝和目的鏈路層地址在每一站都可以改變,大多數的主機和許多路由器對于非本地網路
的資料報都使用默認的下一站路由器,
A 類和 B 類地址一般都要進行子網劃分,用于子網號的位元數通過子網掩碼來指定,我們
為此舉了一個實體來詳細說明,即作者所在的子網,并介紹了變長子網的概念,子網的劃分
縮小了 I n t e r n e t 路由表的規模,因為許多網路經常可以通過單個表目就可以訪問了,介面和網
絡的有關資訊通過i f c o n f i g 和 n e t s t a t 命令可以獲得,包括介面的 I P 地址、子網掩碼、廣
播地址以及 M T U 等
在本章的最后,我們對 I n t e r n e t 協議族潛在的改進建議 — 下一代 I P進行了討論,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/91850.html
標籤:其他
