TCP/IP詳解,卷1:協議--IP:網際協議

引言

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 到達以前先到達less

IP 首部

P 數據報的格式如圖 3 - 1 所示。普通的 I P 首部長爲 2 0 個字節,除非含有選項字段。
dom

服務類型(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 命令輸出。ui

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 字段。router

總長度字段是指整個 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 數據報)。當數據報被分片時,該字段的值也隨着變化blog

選項字段一直都是以 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)。

  1. 超過半數的 B 類地址已被分配。根據估計,它們大約在 1 9 9 5 年耗盡。
  2. 32 bit 的 I P 地址從長期的 I n t e r n e t 增加角度來看,通常是不夠用的。
  3. 當前的路由結構沒有層次結構,屬於平面型 ( 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]對前三個建議進行了比較。
  4. SIP,簡單 I n t e r n e t 協議。它針對當前的 I P 提出了一個最小幅度的修改建議,採用 6 4 位地
    址和一個不一樣的首部格式(首部的前 4 比特仍然包含協議的版本號,其值再也不是 4)。
  5. PIP。這個建議也採用了更大的、可變長度的和有層次結構的地址,並且首部格式也不
    相同。
  6. 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 的有關細節

  7. 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進行了討論。

相關文章
相關標籤/搜索