Linux系統之IP、TCP封包格式
一、IP封包格式說明前言 IP 協議用 IP 報文頭封裝傳輸層報文,IP 報文頭包含了如下的信息:這個報文從哪個傳輸層協議過來,它準備被發送到哪臺機器,它從哪兒來以及一些其他有用的信息. 1、IP報文格式 上面圖中每一行所占用的位數為32bits,各個表頭的內容分別介紹如下: 版本(Version) 第 0 到 3bit。版本字段是二進制表示的,IPV4 為 0100,而IPV6 為 0110.這個字段在報文過濾中很少用到。 網絡報文頭長(Internet Header Length) 第 4-7bit,它表示以 4 字節為單位的報文頭長,例如沒有選項的報文長度為 20byte,這樣這個字段就為 5 TOS 字段 第 8 到 15bit,這個字段是 IP 報文頭里面最復雜的部分之一,這個字段已經被更新 3 次了。他們的基本含義沒有發生變化,但是他們 的具體實現卻改變了。最初,這個字段被稱為服務類別(type of service)
例如: 以太網絡的種種相關規格可以讓這個ip封包加速且降低延遲,某些特殊的標志就是在這里說明的。 注: 這種實現方式在很多老的硬件里面還能夠看到。但是在后來更新的ECN版本里面,第 6-7bit被使用了,這樣他們就被設置了值而不是原 先的預留值0.但是很多老的防火墻和路由器在檢查報文時候,發現這些字段是 1 就會把這個報文丟掉。 封包總長(TL) 通常以byte做單位來表示該封包的總長度﹐此數值包括標頭和數據的總和,最大可達65535bytes 識別碼(ID) 每一個IP封包都有一個16bit的唯一識別碼。 當程序產生的數據要通過網路傳送時﹐都會在傳送層被拆散成封包形式發送﹐當封包要進行重組的時候﹐就是依據這個ID 。 Flags(特殊標識) 這是當封包在傳輸過程中進行最佳組合時使用的3個bit來標識
FragmentOffset(分段偏移)—13bits 當一個大封包在經過一些傳輸單位(MTU)較小的路徑時,會被被切割成碎片(fragment)再進行傳送(這個切割和傳送層的打包有所不同,它是由網路層決定的)。 由于網路情況或其它因素影響﹐其抵達順序并不會和當初切割順序一致的。 所以當封包進行切割的時候﹐會為各片段做好定位記錄,如果封包沒有被切割﹐那么FO的值為“0” Time To Live(TTL,存活時間)—8bits 當一個封包被賦予TTL值,TTL是以hop為單位,每經過一個router就減一﹐如果封包TTL值被降為0的時候﹐就會被丟棄。 這樣﹐當封包在傳遞過程中由于某些原因而未能抵達目的地的時候﹐就可以避免其一直充斥在網絡上面,之所以不返回響應,是因為響應也是點用網絡資源的,所以直接就丟棄了 Protocol Number(協議代碼)-8bits 來自傳輸層與網絡層本身的其他數據都放置在ip封包當中的,我們可以在IP表頭記載這個IP封包內的數據是什么,在這個字段就是記載每種數據封包的內容啦,在這個字段記載的代碼與相關的封包協議名稱如下所示: 當然啦,我們比較常見到的還是TCP、UDP、ICMP Header Checksum(表頭檢查碼)—16bits 這個數值主要用來檢錯用的﹐用以確保封包被正確無誤的接收到。 如果一切無誤﹐就會發出確認信息﹐表示接收正常。 Source Address(SA) 來源的IP地址,從這里我們知道IP是32位。 Destination Address(DA) 有來源還需要目標才能傳送,這里就是目標的IP地址 Options(其它參數) 這個是額外的功能,提供包括安全處理機制、路由紀錄、時間戳,嚴格與寬松之來源路由等 。 Padding(補齊項目)& Padding Options欄位長度不定, 可用來擴充功能。 二、TCP封包格式1、TCP作用 TCP 協議位于 IP 協議層之上,TCP 是一個有狀態的協議,并且通過內部機 2、TCP報文格式 3、參數說明
三、UDP報文1、前言 UDP 可以看作一個叫簡化的 TCP 報文頭,它主要包括源/目的端口,報文頭 2、報文格式 3、參數說明 五、總結TCP協議和UDP協議的區別
|