網絡層:IP、IGMP、ICMP

    網絡層,有時也稱爲互聯網層,處理分組在網絡中的活動,在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。

IP:網際協議

    IP是TCP/IP協議族中最爲核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。TCP/IP對IP提供不可靠、無連接的數據報傳送服務,不可靠(unreliable)的意思是它不能保證IP數據報能成功地到達目的地,無連接(connectionless)這個術語的意思是IP並不維護任何關於後續數據報的狀態信息。

IP首部

    IP數據報的格式如下所示。
IP首部
    最高位在左邊,記爲0bit;最低位在右邊,記爲31bit。
    4個字節的32bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然後16~23bit,最後是24~31bit。這種傳輸次序稱作bigendian字節序。由於TCP/IP首部中所有的二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序。以其他形式存儲二進制整數的機器,必須在傳輸數據之前把首部轉換成網絡字節序。
    目前的協議版本號是4,因此IP有時也稱作IPv4。
    首部長度指的是首部佔32bit字的數目,包括任何選項。由於它是一個4比特字段,因此首部最長爲60個字節。普通IP數據報(沒有任何選擇項)字段的值是5。
    服務類型(TOS)字段包括一個3bit的優先權子字段(現在已被忽略),4bit的TOS子字段和1bit未用位但必須置0。4bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit。如果所有4bit均爲0,那麼就意味着是一般服務。TOS字段推薦值如下:
TOS字段值
    總長度字段是指整個IP數據報的長度,以字節爲單位。利用首部長度字段和總長度字段,就可以知道IP數據報中數據內容的起始位置和長度。
    標識字段唯一地標識主機發送的每一份數據報。通常每發送一份報文它的值就會加1。
    TTL(time-to-live)生存時間字段設置了數據報可以經過的最多路由器數。它指定了數據報的生存時間。TTL的初始值由源主機設置(通常爲32或64),一旦經過一個處理它的路由器,它的值就減去1。當該字段的值爲0時,數據報就被丟棄,併發送ICMP報文通知源主機。
    根據協議字段可以識別是哪個協議向IP傳送數據。
    首部檢驗和字段是根據IP首部計算的檢驗和碼。它不對首部後面的數據進行計算。
    每一份IP數據報都包含源IP地址和目的IP地址。
    最後一個字段是任選項,是數據報中的一個可變長的可選信息。選項字段一直都是以32bit作爲界限,在必要的時候插入值爲0的填充字節。這樣就保證IP首部始終是32bit的整數倍(這是首部長度字段所要求的)。

IP路由選擇

    對於主機來說,如果目的主機與源主機直接相連(如點對點鏈路)或都在一個共享網絡上(以太網或令牌環網),那麼IP數據報就直接送到目的主機上。否則,主機把數據報發往一默認的路由器上,由路由器來轉發該數據報。
    IP層在內存中有一個路由表,路由表中的每一項都包含下面這些信息:
- 目的IP地址;
- 下一站(或下一跳)路由器(next-hoprouter)的IP地址,或者有直接連接的網絡IP地址;
- 標誌;
- 爲數據報的傳輸指定一個網絡接口。
    IP路由選擇主要完成以下這些功能:
- 搜索路由表,尋找能與目的IP地址完全匹配的表目(網絡號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口。
- 搜索路由表,尋找能與目的網絡號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網絡接口(取決於標誌字段的值)。目的網絡上的所有主機都可以通過這個表目來處置。
- 搜索路由表,尋找標爲“默認(default)”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。
    如果上面這些步驟都沒有成功,那麼該數據報就不能被傳送。如果不能傳送的數據報來自本機,那麼一般會向生成數據報的應用程序返回一個“主機不可達”或“網絡不可達”的錯誤。

子網掩碼

    主機通過子網掩碼來確定有多少比特用於子網號及多少比特用於主機號,這個掩碼是一個32bit的值,其中值爲1的比特留給網絡號和子網號,爲0的比特留給主機號。

ICMP:Internet控制報文協議

    ICMP經常被認爲是IP層的一個組成部分。它傳遞差錯報文以及其他需要注意的信息。ICMP報文的格式如下圖。所有報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。
ICMP數據報
    類型字段可以有15個不同的值,以描述特定類型的ICMP報文,如下表所示。
ICMP報文類型

ICMP地址掩碼請求與應答

    ICMP地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。系統廣播它的ICMP請求報文,ICMP地址掩碼請求和應答報文的格式如圖所示。
ICMP地址掩碼請求應答報文
    ICMP報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就可以把應答與請求進行匹配。

ICMP時間戳請求與應答

    ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間(Coordinated Universal Time, UTC)。這種ICMP報文的好處是它提供了毫秒級的分辨率。ICMP時間戳請求和應答報文格式如圖所示。
ICMP時間戳請求應答報文
    請求端填寫發起時間戳,然後發送報文。應答系統收到請求報文時填寫接收時間戳,在發送應答時填寫發送時間戳。實際上,大多數的實現把後面兩個字段都設成相同的值。

ICMP端口不可達差錯

    ICMP不可達報文的一般格式如圖所示。
ICMP端口不可達報文
    ICMP的一個規則是,ICMP差錯報文必須包括生成該差錯報文的數據報IP首部(包含任何選項),還必須至少包括跟在該IP首部後面的前8個字節。導致差錯的數據報中的IP首部要被送回的原因是因爲IP首部中包含了協議字段,使得ICMP可以知道如何解釋後面的8個字節。

IGMP:Internet組管理協議

    用於支持主機和路由器進行多播的Internet組管理協議(IGMP)讓一個物理網絡上的所有系統知道主機當前所在的多播組。多播路由器需要這些信息以便知道多播數據報應該向哪些接口轉發。如ICMP一樣,IGMP也被當作IP層的一部分。IGMP報文通過IP數據報進行傳輸。IGMP有固定的報文長度,沒有可選數據。IGMP報文通過IP首部中協議字段值爲2來指明。

IGMP報文

    IGMP報文格式如下圖。
IGMP報文
     IGMP類型爲1說明是由多播路由器發出的查詢報文,爲2說明是主機發出的報告報文。檢驗和的計算和ICMP協議相同。組地址爲D類IP地址。在查詢報文中組地址設置爲0,在報告報文中組地址爲要參加的組地址。

IGMP協議

    多播的基礎就是一個進程的概念,該進程在一個主機的給定接口上加入了一個多播組。在一個給定接口上的多播組中的成員是動態的—它隨時因進程加入和離開多播組而變化。這裏所指的進程必須以某種方式在給定的接口上加入某個多播組。進程也能離開先前加入的多播組。
    多播路由器使用IGMP報文來記錄與該路由器相連網絡中組成員的變化情況。使用規則如下:
- 當第一個進程加入一個組時,主機就發送一個IGMP報告。如果一個主機的多個進程加入同一組,只發送一個IGMP報告。這個報告被髮送到進程加入組所在的同一接口上。
- 進程離開一個組時,主機不發送IGMP報告,即便是組中的最後一個進程離開。主機知道在確定的組中已不再有組成員後,在隨後收到的IGMP查詢中就不再發送報告報文。
- 多播路由器定時發送IGMP查詢來了解是否還有任何主機包含有屬於多播組的進程。多播路由器必須向每個接口發送一個IGMP查詢。因爲路由器希望主機對它加入的每個多播組均發回一個報告,因此IGMP查詢報文中的組地址被設置爲0。
- 主機通過發送IGMP報告來響應一個IGMP查詢,對每個至少還包含一個進程的組均要發回IGMP報告。
    使用這些查詢和報告報文,多播路由器對每個接口保持一個表,表中記錄接口上至少還包含一個主機的多播組。當路由器收到要轉發的多播數據報時,它只將該數據報轉發到還擁有屬於那個組主機的接口上。

發佈了75 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章