ip屬于網絡層協議,其意義在于確定設備的位置,即ip地址。但又和arp與tcp不同,它是為傳輸層服務的,通常將tcp和udp架在ip協議之上。所以他只不過是一個數據的載體,本身并沒有自己的詢問與回復功能。他在程序中,只起到確定傳輸的功能。
以上是ip頭的內容,
版本一般為4,即ipv4,如果是ipv6,則可能為6,
首部長度:首部長度應該為 數量*4 通常為20字節,通過抓包工具抓包,基本都是20字節無一例外。
tos服務類型:應該是對應路由器的,當終端接收到數據后,應該就不關心這個的值了。包括過程字段(3位,設置了數據包的重要性,取值越大數據越重要),延遲字段(1位),流量字段(1位),可靠性字段(1位), 成本字段(1位),未使用(1位)
16位總長度:即ip總長
16位標識:占16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,并將此值賦給標識字段。但這個“標識”并不是序號,因為IP是無連接服務,數據報不存在按序接收的問題。當數據報由于長度超過網絡的MTU而必須分片時,這個標識字段的值就被復制到所有的數據報的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報。
ip頭部標識與片偏移:
ip數據頭中的3位標識最低位為mf,為1時說明這個ip數據包是分片的,并且后續還有數據包,為0時說明這個ip數據包是分片的,但已經是最后一個數據了。中間位為df,df為1時,說明這個數據包是不分片的,為零時才允許數據包分片。
片偏移 :占13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對于用戶數據字段的起點,該片從何處開始。片偏移以8個字節為偏移單位。也就是說,每個分片的長度一定是8字節(64位)的整數倍。
8位ttl生存時間,表示的是數據從一個設備發向另一個設備,經過一個中轉站,則減1,當ttl為0時,即使收端收到,則認定該數據超時,則丟棄該數據。也就是一個防止超時的設置,不過網上還有另一種說法,就是表示自己的設備使用的是什么系統,具體表示什么,沒有試過。不過一般ttl的數值為64.
8位協議:ICMP(1)、TCP(6)、UDP(17)。
校驗和:為頭部校驗。
32位源ip和32為目標ip
還有一個是選項,至于選項的內容是什么,因為沒見過,具體我也不知道。
如果沒有選項或選項的后面,那就是數據,數據包含這tcp數據和udp數據。
對于程序而言,先顛倒ip,然后把那些死的東西寫進去,甚至是不處理,只處理那些可變的部分即可。