(一百五十二)TCP/IP詳解筆記-第3章 IP:網際協議

目錄

3.1 引言

3.2 IP首部

3.3 IP路由選擇

3.4 子網尋址

3.5子網掩碼

3.6 特殊情況的IP地址

3.8 ifconfig命令

3.9 netstat命令

3.11 小結


3.1 引言

IP是TCP/IP協議族中最爲核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸(見圖1-4)

第1章 概述_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖1-4 TCP/IP協議族中不同層次的協議

不可靠(unreliable)的意思是它不能保證IP數據報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤時,如某個路由器暫時用完了緩衝區,IP有一個簡單的錯誤處理算法:丟棄該數據報,然後發送ICMP消息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。

無連接(connectionless)這個術語的意思是IP並不維護任何關於後續數據報的狀態信息。每個數據報的處理是相互獨立的。這也說明,IP數據報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的數據報(先是A,然後是B),每個數據報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。

 

3.2 IP首部

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

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-1 IP數據報格式及首部中的各字段

分析圖3-1中的首部。最高位在左邊,記爲0bit;最低位在右邊,記爲31 bit。

4個字節的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15 bit,然後16~23 bit,最後是24~31 bit。這種傳輸次序稱作big endian字節序。由於TCP/IP首部中所有的二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序。以其他形式存儲二進制整數的機器,如little endian格式,則必須在傳輸數據之前把首部轉換成網絡字節序。

目前的協議版本號是4,因此IP有時也稱作IPv4。3.10節將對一種新版的IP協議進行討論。

首部長度指的是首部佔32 bit字的數目,包括任何選項。由於它是一個4比特字段,因此首部最長爲60個字節。在第8章中,我們將看到這種限制使某些選項如路由記錄選項在當今已沒有什麼用處。普通IP數據報(沒有任何選擇項)字段的值是5。

服務類型(TOS)字段包括一個3bit的優先權子字段(現在已被忽略),4bit的TOS子字段和1bit未用位但必須置0。4bit的TO S分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit。如果所有4bit均爲0,那麼就意味着是一般服務。RFC 1340[Reynolds and Postel 1992]描述了所有的標準應用如何設置這些服務類型。RFC 1349[Almquist 1992]對該RFC進行了修正,更爲詳細地描述了TOS的特性。

圖3-2列出了對不同應用建議的TO S值。在最後一列中給出的是十六進制值,因爲這就是在後面將要看到的tcpdump命令輸出。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-2 服務類型字段推薦值

Te lnet和Rlogin這兩個交互應用要求最小的傳輸時延,因爲人們主要用它們來傳輸少量的交互數據。另一方面,FTP文件傳輸則要求有最大的吞吐量。最高可靠性被指明給網絡管理(SNMP)和路由選擇協議。用戶網絡新聞(Usenet news, NNTP)是唯一要求最小費用的應用。

現在大多數的TCP/IP實現都不支持TO S特性,但是自4.3BSD Reno以後的新版系統都對它進行了設置。另外,新的路由協議如OSPF和IS-IS都能根據這些字段的值進行路由決策。

在2.10節中,我們提到SLIP一般提供基於服務類型的排隊方法,允許對交互通信數據在處理大塊數據之前進行處理。由於大多數的實現都不使用TO S字段,因此這種排隊機制由SLIP自己來判斷和處理,驅動程序先查看協議字段(確定是否是一個TCP段),然後檢查TCP信源和信宿的端口號,以判斷是否是一個交互服務。一個驅動程序的註釋這樣認爲,這種“令人厭惡的處理方法”是必需的,因爲大多數實現都不允許應用程序設置TOS字段。

總長度字段是指整個IP數據報的長度,以字節爲單位。利用首部長度字段和總長度字段,就可以知道IP數據報中數據內容的起始位置和長度。由於該字段長16比特,所以IP數據報最長可達65535字節(回憶圖2-5,超級通道的MTU爲65535。它的意思其實不是一個真正的MTU—它使用了最長的IP數據報)。當數據報被分片時,該字段的值也隨着變化,這一點將在11.5節中進一步描述。

儘管可以傳送一個長達65535字節的IP數據報,但是大多數的鏈路層都會對它進行分片。而且,主機也要求不能接收超過576字節的數據報。由於TCP把用戶數據分成若干片,因此一般來說這個限制不會影響TCP。在後面的章節中將遇到大量使用UDP的應用(RIP,TFTP,BOOTP,DNS,以及SNMP),它們都限制用戶數據報長度爲512字節,小於576字節。但是,事實上現在大多數的實現(特別是那些支持網絡文件系統NFS的實現)允許超過8192字節的IP數據報。

總長度字段是IP首部中必要的內容,因爲一些數據鏈路(如以太網)需要填充一些數據以達到最小長度。儘管以太網的最小幀長爲46字節(見圖2-1),但是IP數據可能會更短。如果沒有總長度字段,那麼IP層就不知道46字節中有多少是IP數據報的內容。

標識字段唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1。在11.5節介紹分片和重組時再詳細討論它。同樣,在討論分片時再來分析標誌字段和片偏移字段。

RFC 791 [Postel 1981a]認爲標識字段應該由讓IP發送數據報的上層來選擇。假設有兩個連續的IP數據報,其中一個是由TCP生成的,而另一個是由UDP生成的,那麼它們可能具有相同的標識字段。儘管這也可以照常工作(由重組算法來處理),但是在大多數從伯克利派生出來的系統中,每發送一個IP數據報,IP層都要把一個內核變量的值加1,不管交給IP的數據來自哪一層。內核變量的初始值根據系統引導時的時間來設置。

TTL(time-to-live)生存時間字段設置了數據報可以經過的最多路由器數。它指定了數據報的生存時間。TTL的初始值由源主機設置(通常爲32或64),一旦經過一個處理它的路由器,它的值就減去1。當該字段的值爲0時,數據報就被丟棄,併發送ICMP報文通知源主機。第8章我們討論Tr aceroute程序時將再回來討論該字段。

我們已經在第1章討論了協議字段,並在圖1-8中示出了它如何被IP用來對數據報進行分用。根據它可以識別是哪個協議向IP傳送數據。

首部檢驗和字段是根據IP首部計算的檢驗和碼。它不對首部後面的數據進行計算。ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據檢驗和碼。

爲了計算一份數據報的IP檢驗和,首先把檢驗和字段置爲0。然後,對首部中每個16 bit進行二進制反碼求和(整個首部看成是由一串16 bit的字組成),結果存在檢驗和字段中。當收到一份IP數據報後,同樣對首部中每個16 bit進行二進制反碼的求和。由於接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該爲全1。如果結果不是全1(即檢驗和錯誤),那麼IP就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報並進行重傳。

ICMP、IGMP、UDP和TCP都採用相同的檢驗和算法,儘管TCP和UDP除了本身的首部和數據外,在IP首部中還包含不同的字段。在RFC 1071[Braden, Borman and Patridge 1988]中有關於如何計算Internet檢驗和的實現技術。由於路由器經常只修改TTL字段(減1),因此當路由器轉發一份報文時可以增加它的檢驗和,而不需要對IP整個首部進行重新計算。RFC1141[Mallory and Kullberg 1990]爲此給出了一個很有效的方法。

但是,標準的BSD實現在轉發數據報時並不是採用這種增加的辦法。

每一份IP數據報都包含源IP地址和目的IP地址。我們在1.4節中說過,它們都是32 bit的值。

最後一個字段是任選項,是數據報中的一個可變長的可選信息。目前,這些任選項定義如下:

• 安全和處理限制(用於軍事領域,詳細內容參見RFC 1108[Kent 1991])

• 記錄路徑(讓每個路由器都記下它的IP地址,見7.3節)

• 時間戳(讓每個路由器都記下它的IP地址和時間,見7.4節)

• 寬鬆的源站選路(爲數據報指定一系列必須經過的IP地址,見8.5節)

• 嚴格的源站選路(與寬鬆的源站選路類似,但是要求只能經過指定的這些地址,不能經過其他的地址)。

這些選項很少被使用,並非所有的主機和路由器都支持這些選項。

選項字段一直都是以32 bit作爲界限,在必要的時候插入值爲0的填充字節。這樣就保證IP首部始終是32 bit的整數倍(這是首部長度字段所要求的)。

只是複製粘貼了一下ip報文格式的說明,但很多都是簡單介紹下,現在暫時不細看了

 

3.3 IP路由選擇

從概念上說,IP路由選擇是簡單的,特別對於主機來說。如果目的主機與源主機直接相連(如點對點鏈路)或都在一個共享網絡上(以太網或令牌環網),那麼IP數據報就直接送到目的主機上。否則,主機把數據報發往一默認的路由器上,由路由器來轉發該數據報。大多數的主機都是採用這種簡單機制。

在本節和第9章中,我們將討論更一般的情況,即IP層既可以配置成路由器的功能,也可以配置成主機的功能。當今的大多數多用戶系統,包括幾乎所有的Unix系統,都可以配置成一個路由器。我們可以爲它指定主機和路由器都可以使用的簡單路由算法。本質上的區別在於主機從不把數據報從一個接口轉發到另一個接口,而路由器則要轉發數據報。內含路由器功能的主機應該從不轉發數據報,除非它被設置成那樣。在9.4小節中,我們將進一步討論配置的有關問題。

在一般的體制中,IP可以從TCP、UDP、ICMP和IGMP接收數據報(即在本地生成的數據報)並進行發送,或者從一個網絡接口接收數據報(待轉發的數據報)並進行發送。IP層在內存中有一個路由表。當收到一份數據報並進行發送時,它都要對該表搜索一次。當數據報來自某個網絡接口時,IP首先檢查目的IP地址是否爲本機的IP地址之一或者IP廣播地址。如果確實是這樣,數據報就被送到由IP首部協議字段所指定的協議模塊進行處理。如果數據報的目的不是這些地址,那麼(1)如果IP層被設置爲路由器的功能,那麼就對數據報進行轉發(也就是說,像下面對待發出的數據報一樣處理);否則(2)數據報被丟棄。

路由表中的每一項都包含下面這些信息:

  1. 目的IP地址。它既可以是一個完整的主機地址,也可以是一個網絡地址,由該表目中的標誌字段來指定(如下所述)。主機地址有一個非0的主機號(見圖1-5),以指定某一特定的主機,而網絡地址中的主機號爲0,以指定網絡中的所有主機(如以太網,令牌環網)。
  2. 下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接連接的網絡IP地址。下一站路由器是指一個在直接相連網絡上的路由器,通過它可以轉發數據報。下一站路由器不是最終的目的,但是它可以把傳送給它的數據報轉發到最終目的。
  3. 標誌。其中一個標誌指明目的IP地址是網絡地址還是主機地址,另一個標誌指明下一站路由器是否爲真正的下一站路由器,還是一個直接相連的接口(我們將在9.2節中詳細介紹這些標誌)。
  4. 爲數據報的傳輸指定一個網絡接口。

IP路由選擇是逐跳地(hop-by-hop)進行的。從這個路由表信息可以看出,IP並不知道到達任何目的的完整路徑(當然,除了那些與主機直接相連的目的)。所有的IP路由選擇只爲數據報傳輸提供下一站路由器的IP地址。它假定下一站路由器比發送數據報的主機更接近目的,而且下一站路由器與該主機是直接相連的。

IP路由選擇主要完成以下這些功能:

  1. 搜索路由表,尋找能與目的IP地址完全匹配的表目(網絡號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標誌字段的值)。
  2. 搜索路由表,尋找能與目的網絡號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標誌字段的值)。目的網絡上的所有主機都可以通過這個表目來處置。例如,一個以太網上的所有主機都是通過這種表目進行尋徑的。這種搜索網絡的匹配方法必須考慮可能的子網掩碼。關於這一點我們在下一節中進行討論。
  3. 搜索路由表,尋找標爲“默認(default)”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。如果上面這些步驟都沒有成功,那麼該數據報就不能被傳送。

如果不能傳送的數據報來自本機,那麼一般會向生成數據報的應用程序返回一個“主機不可達”或“網絡不可達”的錯誤。

完整主機地址匹配在網絡號匹配之前執行。只有當它們都失敗後才選擇默認路由。默認路由,以及下一站路由器發送的ICMP間接報文(如果我們爲數據報選擇了錯誤的默認路由),是IP路由選擇機制中功能強大的特性。我們在第9章對它們進行討論。

爲一個網絡指定一個路由器,而不必爲每個主機指定一個路由器,這是IP路由選擇機制的另一個基本特性。這樣做可以極大地縮小路由表的規模,比如Internet上的路由器有隻有幾千個表目,而不會是超過100萬個表目。

舉例

首先考慮一個簡單的例子:我們的主機bsdi有一個IP數據報要發送給主機sun。雙方都在同一個以太網上(參見扉頁前圖)。數據報的傳輸過程如圖3-3所示。

當IP從某個上層收到這份數據報後,它搜索路由表,發現目的IP地址(140.252.13.33)在一個直接相連的網絡上(以太網140.252.13.0)。於是,在表中找到匹配網絡地址(在下一節中,我們將看到,由於以太網的子網掩碼的存在,實際的網絡地址是140.252.13.32,但是這並不影響這裏所討論的路由選擇)。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-3 數據報從主機bsdi到sun的傳送過程

數據報被送到以太網驅動程序,然後作爲一個以太網數據幀被送到sun主機上(見圖2-1)。IP數據報中的目的地址是以太網140.252.13,而在 鏈路層首部中的目的地址是48bit的sun主機的以太網接口地址。這個48bit的以太網地址是用ARP協議獲得的,我們將在下一章對此進行描述。

現在來看另一個例子:主機bsdi有一份IP數據報要傳到ftp.uu.net主機上,它的IP地址是192.48.96.9。經過的前三個路由器如圖3-4所示。首先,主機bsdi搜索路由表,但是沒有找到與主機地址或網絡地址相匹配的表目,因此只能用默認的表目,把數據報傳給下一站路由器,即主機sun。當數據報從bsdi被傳到sun主機上以後,目的IP地址是最終的信宿機地址(192.48.96.9),但是鏈路層地址卻是sun主機的以太網接口地址。這與圖3-3不同,在那裏數據報中的目的IP地址和目的鏈路層地址都指的是相同的主機(sun)。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-4 從bsdi到ftp.uu.net(192.48.96.9)的初始路徑

當sun收到數據報後,它發現數據報的目的IP地址並不是本機的任一地址,而sun已被設置成具有路由器的功能,因此它把數據報進行轉發。經過搜索路由表,選用了默認表目。根據sun的默認表目,它把數據報轉發到下一站路由器netb,該路由器的地址是140.252.1.183。數據報是經過點對點SLIP鏈路被傳送的,採用了圖2-2所示的最小封裝格式。這裏,我們沒有給出像以太網鏈路層數據幀那樣的首部,因爲在SLIP鏈路中沒有那樣的首部。

當netb收到數據報後,它執行與sun主機相同的步驟:數據報的目的地址不是本機地址,而netb也被設置成具有路由器的功能,於是它也對該數據報進行轉發。採用的也是默認路由表目,把數據報送到下一站路由器gateway(140.252.1.4)。位於以太網140.252.1上的機netb用ARP獲得對應於140.252.1.4的48 bit以太網地址。這個以太網地址就是鏈路層數據幀頭上的目的地址。

路由器gateway也執行與前面兩個路由器相同的步驟。它的默認路由表目所指定的下一站路由器IP地址是140.252.104.2(我們將在圖8-4中證實,使用Tr aceroute程序時,它就是gateway使用的下一站路由器)。

對於這個例子需要指出一些關鍵點:

  1. 該例子中的所有主機和路由器都使用了默認路由。事實上,大多數主機和一些路由器可以用默認路由來處理任何目的,除非它在本地局域網上。
  2. 數據報中的目的IP地址始終不發生任何變化(在8.5節中,我們將看到,只有使用源路由選項時,目的IP地址纔有可能被修改,但這種情況很少出現)。所有的路由選擇決策都是基於這個目的IP地址。
  3. 每個鏈路層可能具有不同的數據幀首部,而且鏈路層的目的地址(如果有的話)始終指的是下一站的鏈路層地址。在例子中,兩個以太網封裝了含有下一站以太網地址的鏈路層首部,但是SLIP鏈路沒有這樣做。以太網地址一般通過ARP獲得。

在第9章,我們在描述了ICMP之後將再次討論IP路由選擇問題。我們將看到一些路由表的例子,以及如何用它們來進行路由決策的。

comment:還是複製粘貼,這一小結講的是數據報是如果通過路由選擇傳到指定主機的。

 

3.4 子網尋址

現在所有的主機都要求支持子網編址(RFC 950[Mogul and Postel 1985])。不是把IP地址看成由單純的一個網絡號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號。

這樣做的原因是因爲A類和B類地址爲主機號分配了太多的空間,可分別容納的主機數爲224-2和216-2。事實上,在一個網絡中人們並不安排這麼多的主機(各類IP地址的格式如圖1-5所示)。由於全0或全1的主機號都是無效的,因此我們把總數減去2。

在InterNIC獲得某類IP網絡號後,就由當地的系統管理員來進行分配,由他(或她)來決定是否建立子網,以及分配多少比特給子網號和主機號。例如,這裏有一個B類網絡地址(140.252),在剩下的16 bit中,8bit用於子網號,8bit用於主機號,格式如圖3-5所示。這樣就允許有254個子網,每個子網可以有254臺主機。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-5 B類地址的一種子網編址

許多管理員採用自然的劃分方法,即把B類地址中留給主機的16 bit中的前8bit作爲子網地址,後8bit作爲主機號。這樣用點分十進制方法表示的IP地址就可以比較容易確定子網號。但是,並不要求A類或B類地址的子網劃分都要以字節爲劃分界限。

大多數的子網例子都是B類地址。其實,子網還可用於C類地址,只是它可用的比特數較少而已。很少出現A類地址的子網例子是因爲A類地址本身就很少(但是,大多數A類地址都是進行子網劃分的)。

子網對外部路由器來說隱藏了內部網絡組織(一個校園或公司內部)的細節。在我們的網絡例子中,所有的IP地址都有一個B類網絡號140.252。但是其中有超過30個子網,多於400臺主機分佈在這些子網中。由一臺路由器提供了Internet的接入,如圖3-6所示。

在這個圖中,我們把大多數的路由器編號爲Rn,n是子網號。我們給出了連接這些子網的路由器,同時還包括了扉頁前圖中的九個系統。在圖中,以太網用粗線表示,點對點鏈路用虛線表示。我們沒有畫出不同子網中的所有主機。例如,在子網140.252.3上,就超過50臺主機,而在子網140.252.1上則超過100臺主機。

與30個C類地址相比,用一個包含30個子網的B類地址的好處是,它可以縮小Internet路由表的規模。B類地址140.252被劃分爲若干子網的事實對於所有子網以外的Internet路由器都是透明的。爲了到達IP地址開始部分爲140.252的主機,外部路由器只需要知道通往IP地址140.252.104.1的路徑。這就是說,對於網絡140.252只需一個路由表目,而如果採用30個C類地址,則需要30個路由表目。因此,子網劃分縮減了路由表的規模(在10.8小節中,我們將介紹一種新技術,即使用C類地址也可以縮減路由表的規模)。

子網對於子網內部的路由器是不透明的。如圖3-6所示,一份來自Internet的數據報到達gateway,它的目的地址是140.252.57.1。路由器gateway需要知道子網號是57,然後把它送到kpno。同樣,kpno必須把數據報送到R55,最後由R55把它送到R57。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-6 網絡noao.edu(140.252)中的大多數子網安排

 

3.5子網掩碼

任何主機在引導時進行的部分配置是指定主機IP地址。大多數系統把IP地址存在一個磁盤文件裏供引導時讀用。在第5章我們將討論一個無盤系統如何在引導時獲得IP地址。

除了IP地址以外,主機還需要知道有多少比特用於子網號及多少比特用於主機號。這是在引導過程中通過子網掩碼來確定的。這個掩碼是一個32 bit的值,其中值爲1的比特留給網絡號和子網號,爲0的比特留給主機號。圖3-7是一個B類地址的兩種不同的子網掩碼格式。第一個例子是noao.edu網絡採用的子網劃分方法,如圖3-5所示,子網號和主機號都是8bit寬。第二個例子是一個B類地址劃分成10 bit的子網號和6bit的主機號。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-7 兩種不同的B類地址子網掩碼的例子

儘管IP地址一般以點分十進制方法表示,但是子網掩碼卻經常用十六進制來表示,特別是當界限不是一個字節時,因爲子網掩碼是一個比特掩碼。

給定IP地址和子網掩碼以後,主機就可以確定IP數據報的目的是:(1)本子網上的主機;(2)本網絡中其他子網中的主機;(3)其他網絡上的主機。如果知道本機的IP地址,那麼就知道它是否爲A類、B類或C類地址(從IP地址的高位可以得知),也就知道網絡號和子網號之間的分界線。而根據子網掩碼就可知道子網號與主機號之間的分界線。

舉例

假設我們的主機地址是140.252.1.1(一個B類地址),而子網掩碼爲255.255.255.0(其中8bit爲子網號,8bit爲主機號)。

  1. 如果目的IP地址是140.252.4.5,那麼我們就知道B類網絡號是相同的(140.252),但是子網號是不同的(1和4)。用子網掩碼在兩個IP地址之間的比較如圖3-8所示。
  2. 如果目的IP地址是140.252.1.22,那麼B類網絡號還是一樣的(140.252),而且子網號也是一樣的(1),但是主機號是不同的。
  3. 如果目的IP地址是192.43.235.6(一個C類地址),那麼網絡號是不同的,因而進一步的比較就不用再進行了。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-8 使用子網掩碼的兩個B類地址之間的比較

 

3.6 特殊情況的IP地址

經過子網劃分的描述,現在介紹7個特殊的IP地址,如圖3-9所示。在這個圖中,0表示所有的比特位全爲0;-1表示所有的比特位全爲1;netid、subnetid和hostid分別表示不爲全0或全1的對應字段。子網號欄爲空表示該地址沒有進行子網劃分。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖3-9 特殊情況的IP地址

我們把這個表分成三個部分。表的頭兩項是特殊的源地址,中間項是特殊的環回地址,最後四項是廣播地址。

表中的頭兩項,網絡號爲0,如主機使用BOOTP協議確定本機IP地址時只能作爲初始化過程中的源地址出現。

 

3.8 ifconfig命令

到目前爲止,我們已經討論了鏈路層和IP層,現在可以介紹TCP/IP對網絡接口進行配置和查詢的命令了。ifconfig(8)命令一般在引導時運行,以配置主機上的每個接口。

由於撥號接口可能會經常接通和掛斷(如SLIP鏈路),每次線路接通和掛斷時,ifconfig都必須(以某種方法)運行。這個過程如何完成取決於使用的SLIP軟件。

下面是作者子網接口的有關參數。請把它們與圖3-12的值進行比較。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

環回接口(2.7節)被認爲是一個網絡接口。它是一個A類地址,沒有進行子網劃分。

需要注意的是以太網沒有采用尾部封裝(2.3節),而且可以進行廣播,而SLIP鏈路是一個點對點的鏈接。

SLIP接口的標誌LINK0是一個允許壓縮slip的數據(CSLIP,參見2.5節)的配置選項。其他的選項有LINK1(如果從另一端收到一份壓縮報文,就允許採用CSLIP)和LINK2(所有外出的ICMP報文都被丟棄)。我們在4.6節中將討論SLIP鏈接的目的地址。

安裝指南中的註釋對最後這個選項進行了解釋:“一般它不應設置,但是由於一些不當的ping操作,可能會導致吞吐量降到0。”

bsdi是另一臺路由器。由於-a參數是SunOS操作系統具有的功能,因此我們必須多次執行ifconfig,並指定接口名字參數:

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

這裏,我們看到以太網接口(we0)的一個新選項:SIMPLEX。這個4.4BSD標誌表明接口不能收到本機傳送的數據。在BSD/386中所有的以太網都這樣設置。一旦這樣設置後,如果接口發送一幀數據到廣播地址,那麼就會爲本機拷貝一份數據送到環回地址(在6.3小節我們將舉例說明這一點)。

在主機slip中,SLIP接口的設置基本上與上面的bsdi一致,只是兩端的IP地址進行了互換:

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

最後一個接口是主機svr4上的以太網接口。它與前面的以太網接口類似,只是SVR4版的ifconfig沒有打印RUNNING標誌:

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

 

3.9 netstat命令

netstat(1)命令也提供系統上的接口信息。-i參數將打印出接口信息,-n參數則打印出IP地址,而不是主機名字。

第3章 IP:網際協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

這個命令打印出每個接口的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出隊列長度。

 

 

3.11 小結

本章開始描述了IP首部的格式,並簡要討論了首部中的各個字段。我們還介紹了IP路由選擇,並指出主機的路由選擇可以非常簡單:如果目的主機在直接相連的網絡上,那麼就把數據報直接傳給目的主機,否則傳給默認路由器。

在進行路由選擇決策時,主機和路由器都使用路由表。在表中有三種類型的路由:特定主機型、特定網絡型和默認路由型。路由表中的表目具有一定的優先級。在選擇路由時,主機路由優先於網絡路由,最後在沒有其他可選路由存在時才選擇默認路由。

IP路由選擇是通過逐跳來實現的。數據報在各站的傳輸過程中目的IP地址始終不變,但是封裝和目的鏈路層地址在每一站都可以改變。大多數的主機和許多路由器對於非本地網絡的數據報都使用默認的下一站路由器。

A類和B類地址一般都要進行子網劃分。用於子網號的比特數通過子網掩碼來指定。我們爲此舉了一個實例來詳細說明,即作者所在的子網,並介紹了變長子網的概念。子網的劃分縮小了Internet路由表的規模,因爲許多網絡經常可以通過單個表目就可以訪問了。接口和網絡的有關信息通過ifconfig和netstat命令可以獲得,包括接口的IP地址、子網掩碼、廣播地址以及MTU等。

 

習題

環回地址必須是127.0.0.1嗎?

  1. 不,任何網絡ID爲127的A類地址都是可行的,儘管大多數系統使用了127.0.0.1。

在圖3-6中指出有兩個網絡接口的路由器。

第3ç«  IP:ç½éåè®®_TCP/IP详解å·1 åè®®_å³æ¶é讯ç½(52im.net)

  1. kpno有5個接口:3個點對點鏈路和2個以太網接口。R10有4個以太網接口。gateway有3個接口:2個點對點鏈路和1個以太網接口。最後,netb有1個以太網接口和2個點對點鏈路。

 

子網號爲16 bit的A類地址與子網號爲8bit的B類地址的子網掩碼有什麼不同?

  1. 沒有區別:作爲一個沒有再區分子網的C類地址,它們都有一個255.255.255.0的子網掩碼。

閱讀RFC 1219[Tsuchiya 1991],學習分配子網號和主機號的有關推薦技術。

子網掩碼255.255.0.255是否對A類地址有效?

  1. 它是合法的,被稱爲非連續的子網掩碼,因爲其用於子網掩碼的16位是不連續的。但是RFC建議反對使用非連續的子網掩碼。

你認爲爲什麼3.9小節中打印出來的環回接口的MTU要設置爲1536?

這是一個歷史遺留問題。值是1024+512,但是打印的MTU值包含了所有需要的首部字節數。Solaris 2.2將回環接口的MTU設置爲8232(8192+40),其中包含了8192字節的用戶數據加上20字節的IP首部和20字節的TCP首部

TCP/IP協議族是基於一種數據報的網絡技術,即IP層,其他的協議族則基於面向連接的網絡技術。閱讀文獻[Clark 1988],找出數據報網絡層提供的三個優點。

  1. 第一,數據報降低了路由器中對於連接狀態的需求。第二,數據報提供了基本的構件,在它的上面可以構造不可靠的(UDP)和可靠的(TCP)的運輸層。第三,數據報代表了最小的網絡層假定,使得可以使用很大範圍的數據鏈路層服務。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章