歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux網絡 >> linux網絡編程之TCP/IP基礎(三) IP數據報格式和IP地址路由

linux網絡編程之TCP/IP基礎(三) IP數據報格式和IP地址路由

日期:2017/3/3 16:26:25   编辑:Linux網絡

一、IP數據報格式

IP數據報格式如下:

版本

IP協議版本號,長度為4位,IPv4此 字段值為4,IPv6此字段值為6

首部長度

以32位的字為單位,該字段長度為4位,最小值為5,即不帶任何選項的IP 首部20個字節;最大值為15,所以首部長度最大為60個字節

服務類型(TOS)

長度為8位。此字段包含3位的優先 權(現已忽略),4位的服務類型子字段和1位的保留位(必須置0)。4位的服務類型分別為最小延遲(D)、最大吞吐量(T )、最高可靠性(R)、最小費用(F),如下圖。

總長度

該字段長度為16位,以字節為單位,該字段長度包含IP的頭部和數據部分(payload)。IP數據報最大可達65535 個字節。

標識

16位標識,用來標識一個IP數據報,每發送一個此值會加1,可用於分片和重新組裝成數據包。

標志與片偏移

3位標志其中第一位不使用, 每二位DF(Don’t Fragment),該位如果為1,如果傳輸的數據 報超過最大傳輸單元,該數據報會被丟棄,並發送一個ICMP差錯報文。第三位MF(More Fragment)表示是否有更多的片, 該位為1,說明後續有分片。最後一片MF為0。

IP包分片後每一個數據報都具有自己的首部,但是片偏移值不同,通過片 偏移值接收端可以重新組裝IP包。

TTL

TTL(Time To Live)表示數據報最多可經過的路由器的數量。數據報每經過一 個路由器,TTL減1,減為0時丟棄,並發送ICMP報文通知源主機。TTL可以避免數據報在路由器之間不斷循環。

協議 類型

表示IP層上承載的是哪個高級協議。在封裝與分用的過程中,協議棧知道該交給哪個層的協議處理。1 ICMP 2 IGMP 6 TCP 17UDP

頭部校驗和

保證數據報頭部的數據完整性,但校驗不包括數據部分。這樣做的目的有二:一是所有 將數據封裝在IP數據包中的高層協議均含有覆蓋整個數據的校驗和,因此IP數據報沒有必要再對其所承載的數據部分進行校 驗。二是每經過一個路由器,IP數據報的頭部要發生改變(如TTL),而數據部分不變,這樣只對發生改變的頭部進行校驗 ,顯然不會浪費太多的時間。為了減少計算時間,一般不用CRC校驗碼,而是采用更簡單的網際校驗和(Internet Checksum )。

源IP地址

發送數據的主機IP地址

目的IP地址

接收數據的主機IP地址

選項與填充(選項為4字節 整數倍,否則用0填充)

安全和處理限制

路徑記錄:記錄所經歷路由器的IP地址

時間戳:記錄所經歷路由器的IP地 址和時間

寬松源站路由:指定數據報文必須經歷的IP地址,可以經過沒有指定的IP地址。

嚴格的源站路由:指定數據 報文必須經歷的IP地址,不能經過沒有指定的IP地址。

二、IP地址與路由

IPv4的IP地址長度為4字節,通常采用 點分十進制表示法(dotted decimal representation)例如0xc0a80002表示為192.168.0.2。Internet被各種路由器和網關 設備分隔成很多網段,為了標識不同的網段,需要把32位的IP地址劃分成網絡號和主機號兩部分,網絡號相同的各主機位於 同一網段,相互間可以直接通信,網絡號不同的主機之間通信則需要通過路由器轉發。

假設某主機上的網絡接口配置和 路由表如下:

這台主機只有一個網絡接口連到192.168.232.0/24網絡。路由表的Destination是目的網絡地址,Genmask是子網掩碼, Gateway是下一跳地址,Iface是發送接口,Flags中的U標志表示此條目有效(可以禁用某些條目),G標志表示此條目的下 一跳地址是某個路由器的地址,沒有G標志的條目表示目的網絡地址是與本機接口直接相連的網絡,不必經路由器轉發,因 此下一跳地址處記為*號。

如果要發送的數據包的目的地址是192.168.232.1,跟第三行的子網掩碼做與運算得到 192.168.232.0,正是第三行的目的網絡地址,因此從eth0接口發送出去,由於192.168.232.0/24正是與eth0接口直接相連 的網絡,因此可以直接發到目的主機,不需要經路由器轉發。

如果要發送的數據包的目的地址是202.10.1.2,跟後兩行 路由表條目都不匹配,那麼就要按缺省路由條目,從eth0接口發出去,首先發往192.168.232.2 路由器,再讓路由器根據它 的路由表決定下一跳地址。

路由的處理過程如下,ARP部分可以參考這裡:

Copyright © Linux教程網 All Rights Reserved