ip網路應用廣泛普及了,我本人和ip接觸很多年,閒暇之餘,想來ip頭設計有哪些特點,作文分享。
現網使用的協議ipv4 /v6, ipv1 v2 v3僅僅存在實驗室,v5為流**預留。version欄位總共4個bit,可以支援15個版本,還好ip是基礎協議,版本不會太多,四個夠用了。
本文僅討論ipv4。
ip hdr len
對於ipv4,這個字段預設是5,最小值5,數值代表4個位元組的倍數,比如5,ip頭長度5*4 = 20位元組。
和ip類似,其它協議多四位元組對齊,比如udp頭8位元組,tcp頭20位元組。
另外,4個bit,最大值是15,ip 頭最大60位元組,ip頭最大40位元組可選項。
tosqos、dscp相關的。
ip len
整個ip報文的長度,最大65536位元組,但是你很少見到這麼長的報文。
ttl防止環路用的。windows預設128,linux預設64
pro協議型別,比如tcp=6,udp=17,gre=47
ip報文的校驗和,16bit為單位計算
addr
ipv4報文位址是4位元組
分片相關
分片示意圖
如圖,分片對「udp+payload」進行分片(包括udp頭)。
報文分片,df(don』t fragment)必為0。
mf(more fragment)=1表示當前報文後續還有分片包,置0表示後續沒有分片了。
offset表示當前的分片在分片前報文中的位元組偏移(除以8後的值,分片以8位元組為對齊)。
分片三元組
一組分片包,由三元組src addr+dst addr+ ip id唯一確定,在特定的分片伺服器和重組伺服器下(src addr和dst addr確定情況下),ip id用來標識不同分片組。這個標識16bit,取值範圍65536,一般遞增。
ipid標識分片分組
在乙個網元或伺服器內,ipid用來標識不同分片組。如果多個伺服器(或網元)的分片在乙個伺服器(網元)重組,它們的ipid有可能出現相同的情況(比如圖中ipid1=ipid2=ipid3),這種情況下,src addr用來標識不同伺服器。如下圖。
src addr區分不同伺服器
tcp一般不分片
值得注意的是,分片一般為udp報文,而tcp為了估算路徑擁塞,一般不會分片。所以tcp報文的ip頭里df一般置位1。
tcp的路徑擁塞估算
如上圖,tcp一般使用t1(傳送data的時刻t1)和t2(接收對應ack的時刻)差來估算路徑是否擁塞。如果tcp分片後,時間估算會不準確,如下圖。
第1步(t1時刻)和第6步(t2時刻)的時間差會比較大(估算為路徑擁塞),這是由於第3步的「擁塞路徑」造成,這樣tcp估算路徑是擁塞的,而圖中分片第2步的路徑是非擁塞,分片後,實際的路徑擁塞估算出現了偏差。
ipid的劃分
有些框式網元中,ipid要避免裝置內衝突。比如下圖框式裝置,乙個框中插滿線卡,這些線卡同為乙個網元,也就是乙個裝置。
在這種裝置中,一般ipid的賦值採用分段劃分。如下圖。
網元內ipid分段配置
以上為ip頭某些字段情景講解,待續。
ip頭ttl IP協議簡介
我們這篇文章來介紹一下ip協議。ip協議也就是我們所說的網路層協議,它的主要目的就是將乙個ip位址的資料傳送到另外乙個ip位址所代表的裝置,這兩個ip位址有可能是隸屬於同乙個網段,也有可能隸屬於不同的網段。我們來看乙個比較簡單的情況。當把一組資料發往ip位址為127.127.127.127的裝置,這...
IP頭,TCP頭,UDP頭,MAC幀頭定義
一 mac幀頭定義 資料幀定義,頭14個位元組,尾4個位元組 typedef struct mac frame header attribute packed mac frame header,pmac frame header typedef struct mac frame tail attri...
IP頭,TCP頭,UDP頭,MAC幀頭定義
一 mac幀頭定義 資料幀定義,頭14個位元組,尾4個位元組 typedef struct mac frame header attribute packed mac frame header,pmac frame header typedef struct mac frame tail attri...