以太网数据包、IP包、TCP/UDP 包的结构(转)
源:以太網數據包、IP包、TCP/UDP 包的結構
?
??
版本號(Version):長度4比特。標識目前采用的IP協議的版本號。一般的值為0100(IPv4),0110(IPv6)。
IP包頭長度(Header Length):長度4比特。這個字段的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。該部分占4個bit位,單位為32bit(4個字節),即本區域值 = IP頭部長度(單位為bit)/ (8*4),因此,一個IP包頭的長度最長為“1111”,即15*4=60個字節。IP包頭最小長度為20字節。
服務類型(Type of Service):長度8比特。8位 按位被如下定義 PPP DTRC0
PPP:定義包的優先級,取值越大數據越重要 ??
000 普通 (Routine) ??
001 優先的 (Priority) ??
010 立即的發送 (Immediate) ??
011 閃電式的 (Flash) ??
100 比閃電還閃電式的 (Flash Override) ??
101 CRI/TIC/ECP(找不到這個詞的翻譯) ??
110 網間控制 (Internetwork Control) ??
111 網絡控制 (Network Control)
D 時延: 0:普通 1:延遲盡量小
T 吞吐量: 0:普通 1:流量盡量大
R 可靠性: 0:普通 1:可靠性盡量大
M 傳輸成本: 0:普通 1:成本盡量小 0
最后一位被保留,恒定為0
IP包總長(Total Length):長度16比特。 以字節為單位計算的IP包的長度 (包括頭部和數據),所以IP包最大長度65535字節。
標識符(Identifier):長度16比特。該字段和Flags和Fragment Offest字段聯合使用,對較大的上層數據包進行分段(fragment)操作。路由器將一個包拆分后,所有拆分開的小包被標記相同的值,以便目的端設備能夠區分哪個包屬于被拆分開的包的一部分。
標記(Flags):長度3比特。該字段第一位不使用。第二位是DF(Don't Fragment)位,DF位設為1時表明路由器不能對該上層數據包分段。如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包并返回一個錯誤信息。第三位是MF(More Fragments)位,當路由器對一個上層數據包分段,則路由器會在除了最后一個分段的IP包的包頭中將MF位設為1。
片偏移(Fragment Offset):長度13比特。表示該IP包在該組分片包中位置,接收端靠此來組裝還原IP包。
生存時間(TTL):長度8比特。當IP包進行傳送時,先會對該字段賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個字段可以防止由于路由環路而導致IP包在網絡中不停被轉發。
協議(Protocol):長度8比特。標識了上層所使用的協議。
以下是比較常用的協議號: ????
1????ICMP ????
2????IGMP ????
6????TCP ??
17??? UDP ??
88??? IGRP ??
89??? OSPF
頭部校驗(Header Checksum):長度16位。用來做IP頭部的正確性檢測,但不包含數據部分。因為每個路由器要改變TTL的值,所以路由器會為每個通過的數據包重新計算這個值。
起源和目標地址(Source and Destination Addresses):這兩個地段都是32比特。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
至此,IP包頭基本的20字節已介紹完畢,此后部分屬于可選項,不是必須的部分。
可選項(Options):這是一個可變長的字段。該字段屬于可選項,主要用于測試,由起源設備根據需要改寫。
可選項目包含以下內容:
????松散源路由(Loose source routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。
????嚴格源路由(Strict source routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。
????路由記錄(Record route):當IP包離開每個路由器的時候記錄路由器的出站接口的IP地址。
????時間戳(Timestamps):當IP包離開每個路由器的時候記錄時間。
填充(Padding):因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項后面,IP協議會填充若干個0,以達到32bit的整數倍。
?
以太網數據包如下表結構所示: ???
目地地址(6B) 原地址 ??
(6B) 類型 ??
(2B) 數據 ??
(46~1500B) 校驗和 ??
(4B)
???????
IP數據包結構如下頁表: ??
版本號(4位) 頭長度(4位) 服務類型TOS(8位) 總長度(16位) ??
標示(16位) 標志(3位) 頭偏移(13位) ??
生存時間TTL(8位) 上層協議標示(8位) 頭部校驗和(16位) ??
源IP地址(32位) ??
目的IP地址(32位) ??
選項 ??
數據? ?????
?????
TCP抱文結構如下表: ?????
TCP源端口號(16位) TCP目的端口號(16位)? ??
系列號(32位)? ??
確認號(32位)? ??
首部長度(4位) 保留位(6位) URG ACK PSH RST SYN F ?????
IN 窗口大小(16位)? ??檢驗和(16位) 緊急指針(16位)? ??
選項+填充? ??
數據區
?
UDP抱文結構如下表:? ??????
UDP源端口號(16位)? UDP目標端口號(16位)????????
UDP長度(16位) UDP校驗和(16位)? ??
數據區
?
802.3以太網幀格式:
前導碼(7字節)、幀起始定界符(1字節)、目的MAC地址(6字節)、源MAC地址(6字節)、類型/長度(2字節)、數據(46~1500字節)、幀校驗序列(4字節)[MAC地址可以用2-6字節來表示,原則上是這樣,實際都是6字節
?
?
IP包的接收過程?
http://blog.csdn.net/cxmtk/article/details/6096752
1) IP包由包頭和數據區組成, 包頭由IP頭(iphdr)和IP選項區組成, IP頭的開始4位為版本號,
下4位為包頭32比特字數, 因此IP包頭最大長度為64字節, 最小長度為IP頭長度(20字節),
數據區起始于32位邊界上. 當包頭長度大于IP頭長度時, 從IP頭開始的區域為IP選項區.
2) IP包接收器(ip_rcv)接收幀類型為ETH_P_IP(0x0800)的包, 它首先檢查包的正確性,
再將輸入包過濾器進行過濾, 再將過濾包綁定到輸出路由, 分析其選項區,
最后從路由目的入口輸出,
根據不同的路由類型, 輸入到IP轉發器(ip_forward)或IP本地分發器(ip_local_deliver)以及
IP同播轉發器(ip_mc_output)中.
3) 如果系統允許接收帶有信源路由選項(IPOPT_LSRR或IPOPT_SSRR)的IP包, 如果是本地包,
則將包重新綁定到信源路由表第1項地址所指定的路由上, 如果該地址是本地地址,
則用它替換IP頭的目的地址并分析下一信源路由地址.
?
轉載于:https://www.cnblogs.com/LittleTiger/p/4704029.html
總結
以上是生活随笔為你收集整理的以太网数据包、IP包、TCP/UDP 包的结构(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML在JAVA项目中的作用
- 下一篇: Codeforces Round #Pi