一、ip資料報格式
注:注意的是網路資料報以大端位元組序傳輸,當然頭部也得是大端位元組序
linux中的ip資料結構體:
struct ip
;
版本ip協議版本號,長度為4位,ipv4此字段值為4,ipv6此字段值為6
首部長度
以32位的字為單位,該字段長度為4位,最小值為5,即不帶任何選項的ip首部20個位元組;最大值為15,所以首部長度最大為60個位元組
服務型別(tos)
長度為8位。此欄位包含3位的優先權(現已忽略),4位的服務型別子欄位(只能有一位置1)和1位的保留位(必須置0)。4位的服務型別分別為最小延遲(d)、最大吞吐量(t)、最高可靠性(r)、最小費用(f),如下圖。
總長度該字段長度為16位,以位元組為單位,該字段長度包含ip的頭部和資料部分(payload)。ip資料報最大可達65535(2^16-1)個位元組。
標識16位標識,用來標識乙個ip資料報,每傳送乙個此值會加1,可用於分片和重新組裝成資料報。
標誌與片偏移
3位標誌其中第一位不使用, 每二位df(don』t fragment),該位如果為1,如果傳輸的資料報超過最大傳輸單元(mtu),該資料報會被丟棄,並傳送乙個icmp差錯報文。第三位mf(more fragment)表示是否有更多的片,該位為1,說明後續有分片。最後一片mf為0。
假設乙個ip資料報大於最大傳輸單元mtu,那麼如果設定了分片標誌位,將會被分片傳輸。
每一片都有自己的ip 頭部,ip頭部中的標識是一樣的,但是片偏移不同(以8位元組為單位)。除了最後一片,分片要求其他片除去ip頭部的大小必須是8位元組的整數倍。除了第一片有tcp/udp頭部,其他片都沒有。分片完成後,每一片獨自成為乙個資料報(跟資料報概念不同,參見這裡),可以走不同的路由,最後到達目的地的時候ip層根據它們各自ip頭部的資訊重新組成乙個ip資料報。如下圖,這裡ip資料報被分出了2片
ttlttl(time to live)表示資料報最多可經過的路由器的數量。資料報每經過乙個路由器,ttl減1,減為0時丟棄,並傳送icmp
報文通知源主機。ttl可以避免資料報在路由器之間不斷迴圈。
協議型別
表示ip層上承載的是哪個高階協議。在封裝與分用的過程中,協議棧知道該交給哪個層的協議處理。1 icmp 2 igmp 6 tcp 17
udp頭部校驗和
保證資料報頭部的資料完整性,但校驗不包括資料部分。
源ip位址
傳送資料的主機ip位址
目的ip位址
接收資料的主機ip位址
選項與填充(選項為4位元組整數倍,否則用0填充)
二、ip位址與路由
ipv4的ip位址長度為4位元組,通常採用點分十進位制表示法(dotted decimal representation),internet被各種路由器和閘道器裝置分隔成很多網段,為了標識不同的網段,需要把32位的ip位址劃分成網路號和主機號兩部分,網路號相同的各主機位於同一網段,相互間可以直接通訊,網路號不同的主機之間通訊則需要通過路由器**。
這台主機只有乙個網路介面連到172.16.148.0/24網路(172.16.148.166 & 255.255.255.0 = 172.16.148.0)
路由表的destination(目標)是目的網路位址
閘道器;(gateway)是下一跳位址,介面(iface)是傳送介面,標誌(flags)中的u標誌表示此條目有效(可以禁用某些條目),g標誌表示此條目的下一跳位址是某個路由器的位址,沒有g標誌的條目表示目的網路位址是與本機介面直接相連的網路,不必經路由器**,因此下一跳位址處記為*號。
路由的處理過程如下
IP資料報格式
版本字段長度為4,用來表明建立資料報的ip版本,目前的ip版本是ipv4,ipv6正在發展中。ipv4的字段為0100 首部長度 報頭長度 指的是首部佔32 bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最長為60個位元組。15x32 8 60位元組.ip首部始終是32 bit的整數...
IP資料報格式
ip資料報格式 tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成.首部的前一部分是固定長度,共 20 位元組,是所有ip資料報必須具有的.在首部的固定部分的後面是一些可選字段,其長度是可變的.版本 佔4位,指i...
IP資料報格式
tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成.首部的前一部分是固定長度,共 20 位元組,是所有ip資料報必須具有的.在首部的固定部分的後面是一些可選字段,其長度是可變的.版本 佔4位,指ip協議的版本.通...