《TCP/IP詳解 卷一 : 協議》 第三章 IP網際協議

IP簡介

  • IP是TCP/IP協議族中最爲核心的協議,所有的TCP、UDP\ICMP及IGMP數據都以IP數據報格式傳輸
  • IP提供不可靠的、無連接的服務
  • ifconfig和netstat

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

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


IP首部

  • 最高位在左邊,記爲 0 bit;最低位在右邊,記爲31 bit。
  • 4個字節的32 bit值以下面的次序傳輸:首先是0~7 bit,其次8~15 bit,然後1 6~23 bit,最後是24~31 bit。這種傳輸次序稱作big endian字節序。由於TCP/IP首部中所有的二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序。以其他形式存儲二進制整數的機器,如little endian格式,則必須在傳輸數據之前把首部轉換成網絡字節序。
  • 目前的協議版本號是4。因此IP有時也稱作IPv4
  • 首部長度指的是首部佔32bit字的數目,包括任何選項。由於它是一個4比特字段,因此首部最長爲60個字節。在第8章中,我們將看到這種限制使某些選項如路由記錄選項在當今已沒有什麼用處。普通IP數據報(沒有任何選擇項)字段的值是5。
  • 服務類型(TOS)字段包括一個3bit的優先權子字段(現在已被忽略),4 bit的TOS子字段和1bit未用位但必須置0。4bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4 bit中只能置其中1 bit。如果所有4 bit均爲0,那麼就意味着是一般服務。RFC 1340[Reynolds and Postel 1992]描述了所有的標準應用如何設置這些服務類型。RFC 1349[Almquist 1992]對該RFC進行了修正,更爲詳細地描述了TOS的特性。

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

  • 總長度字段是指整個IP數據報的長度,以字節爲單位。利用首部長度字段和總長度字段,就可以知道IP數據報中數據內容的起始位置和長度。由於該字段長16比特,所以IP數據報最長可達65535字節。
  • 標識字段唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1。在11.5節介紹分片和重組時再詳細討論它。同樣,在討論分片時再來分析標誌字段和片偏移字段。
  • TTL(time-to-live)生存時間字段設置了數據報可以經過的最多路由器數。它指定了數據報的生存時間。TTL的初始值由源主機設置(通常爲32或64),一旦經過一個處理它的路由器,它的值就減去1。當該字段的值爲0時,數據報就被丟棄,併發送ICMP報文通知源主機。
  • 首部檢驗和字段是根據IP首部計算的檢驗和碼。它不對首部後面的數據進行計算。ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據檢驗和碼。

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

ICMP、IGMP、UDP和TCP都採用相同的檢驗和算法,儘管TCP和UDP除了本身的首部和數據外,在IP首部中還包含不同的字段。

  • 最後一個字段是任選項,是數據報中的一個可變長的可選信息。目前,這些任選項定義如下:
  1. 安全和處理限制(用於軍事領域,詳細內容參見RFC 1108[Kent 1991])

  2. 記錄路徑(讓每個路由器都記下它的I P地址)

  3. 時間戳(讓每個路由器都記下它的I P地址和時間)

  4. 寬鬆的源站選路(爲數據報指定一系列必須經過的I P地址)

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


IP路由選擇

IP路由選擇是簡單的,特別對於主機來說。如果目的主機與源主機直接相連(如點對點鏈路)或都在一個共享網絡上(以太網或令牌環網),那麼IP數據報就直接送到目的主機上。

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

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

  • 搜索路由表,尋找能與目的IP地址完全匹配的表目(網絡號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標誌字段的值)。

  • 搜索路由表,尋找能與目的網絡號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標誌字段的值)。目的網絡上的所有主機都可以通過這個表目來處置。例如,一個以太網上的所有主機都是通過這種表目進行尋徑的。這種搜索網絡的匹配方法必須考慮可能的子網掩碼。關於這一點我們在下一節中進行討論。

  • 搜索路由表,尋找標爲“默認(default)”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。


特殊情況的IP地址

 

0表示所有的比特位全爲0;-1表示所有的比特位全爲1;netid、subnetid和hostid分別表示不爲全0或全1的對應字段。子網號欄爲空表示該地址沒有進行子網劃分。


netstat命令

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章