1、IP包格式安全
IP數據包是一種可變長分組,它由首部和數據負載兩部分組成。首部長度通常爲20-60字節(Byte),其中後40字節是可選的,長度不固定,前20字節格式爲固定。數據負載部分的長度通常可變,整個IP數據包的最大長度爲65535B。網絡
一、版本號(Version)操作系統
長度爲4位(bit),IP v4的值爲0100,IP v6的值爲0110。指針
二、首部長度blog
指的是IP包頭長度,用4位(bit)表示,十進制值就是[0,15],一個IP包前20個字節是必有的,後40個字節根據狀況可能有可能沒有。若是IP包頭是20個字節,則該位應是20/4=5。進程
三、服務類型(Type of Service TOS)路由
長度爲8位(bit),其組成:前3位爲優先級(Precedence),後4位標誌位,最後1位保留未用。優先級主要用於QoS,表示從0(普通級別)到7(網絡控制分組)的優先級。標誌位可分別表示D(Delay更低的時延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低費用的路由)。同步
TOS只表示用戶的請求,不具備強制性,實際應用中不多用,路由器一般忽略TOS字段。it
四、總長度(Total Length)io
指IP包總長度,用16位(bit)表示,即IP包最大長度能夠達216=65535字節。在以太網中容許的最大包長爲1500B,當超過網絡容許的最大長度時需將過長的數據包分片。
五、標識符(Identifier)
長度爲16位,用於數據包在分段重組時標識其序列號。將數據分段後,打包成IP包,IP包因走的路由上不一樣,會產生不一樣的到達目地的時間,到達目地的後再根據標識符進行從新組裝還原。該字段要與標誌、段偏移一塊兒使用的才能達到分段組裝的目標。
六、標誌(Flags)
長度爲3位,三位從左到右分別是MF、DF、未用。MF=1表示後面還有分段的數據包,MF=0表示沒有更多分片(即最後一個分片)。DF=1表示路由器不能對該數據包分段,DF=0表示數據包能夠被分段。
七、偏移量(Fragment Offset)
也稱段偏移,用於標識該數據段在上層初始數據報文中的偏移量。若是某個包含分段的上層報文的IP數據包在傳送時丟失,則整個一系列包含分段的上層數據包的IP包都會要求重傳。
八、生存時間(TTL)
長度爲8位,初始值由操做系統設置,每通過一個路由器轉發後其值就減1,減至0後丟棄該包。這種機制能夠避免數據包找不到目地時不斷被轉發,堵塞網絡。
九、協議(Protocol)
長度爲8位,標識上層所使用的協議。
十、首部校驗和(Header Checksum)
長度爲16位,首部檢驗和只對IP數據包首部進行校驗,不包含數據部分。數據包每通過一箇中間節點都要從新計算首部校驗和,對首都進行檢驗。
十一、源IP地址(Source IP)
長度爲32位,表示數據發送的主機IP。
十二、目的IP地址(Destination IP)
長度爲32位,表示數據要接收的主機IP。
1三、選項字段(Options)
長度爲0-40字節(Byte),主要有:安全和處理限制(Security)、記錄路徑(Record Route)、時間戳(Timestamps)、寬鬆源站選路(Loose Source Routing)、嚴格的源站選路(Strict Source Routing)等。
2、TCP報文
TCP報文由首部和數據兩部分組成。首部通常由20-60字節(Byte)構成,長度可變。其中前20B格式固定,後40B爲可選。
由於,TCP報文還得傳給下層網絡層,封裝成IP包,而一個IP包最大長度爲65535,同時IP包首部也包含最少20B,因此一個IP包或TCP包能夠包含的數據部分最大長度爲65535-20-20=65495B。
TCP報文中數據部分是可選的,即TCP報文能夠不包含數據(同理IP包也能夠不包含數據)。不含數據的TCP報文一般是一些確認和控制信息類的報文,如TCP創建鏈接時的三次握手和TCP終止時的四次揮手等。
一、源端口號(Source Port)
長度爲16位,指明發送數據的進程。
二、目的端口號(Destination Port)
長度爲16位,指明目的主機接收數據的進程。
三、序號(Sequence Number)
也稱爲序列號,長度爲32位,序號用來標識從TCP發送端向接入端發送的數據字節流進行編號,能夠理解成對字節流的計數。
四、確認號(Acknowledgement Number)
長度爲32位,確認號包含發送確認的一端所指望收到的下一個序號。確認號只有在ACK標誌爲1時纔有效。
五、首部長度
長度爲4位,用於表示TCP報文首部的長度。用4位(bit)表示,十進制值就是[0,15],一個TCP報文前20個字節是必有的,後40個字節根據狀況可能有可能沒有。若是TCP報文首部是20個字節,則該位應是20/4=5。
六、保留位(Reserved)
長度爲6位,必須是0,它是爲未來定義新用途保留的。
七、標誌(Code Bits)
長度爲6位,在TCP報文中不論是握手仍是揮手仍是傳數據等,這6位標誌都很重要。6位從左到右依次爲:
URG:緊急標誌位,說明緊急指針有效;
ACK:確認標誌位,多數狀況下空,說明確認序號有效;
PSH:推標誌位,置位時表示接收方應當即請求將報文交給應用層;
RST:復位標誌,用於重建一個已經混亂的鏈接;
SYN:同步標誌,該標誌僅在三次握手創建TCP鏈接時有效
FIN:結束標誌,帶該標誌位的數據包用於結束一個TCP會話。
八、窗口大小(Window Size)
長度爲16位,TCP流量控制由鏈接的每一端經過聲明的窗口大小來提供。
九、檢驗和(Checksum)
長度爲16位,該字段覆蓋整個TCP報文端,是個強制性的字段,是由發送端計算和存儲,到接收端後,由接收端進行驗證。
十、緊急指針(Urgent Pointer)
長度爲16位,指向數據中優先部分的最後一個字節,通知接收方緊急數據的長度,該字段在URG標誌置位時有效。
十一、選項(Options)
長度爲0-40B(字節),必須以4B爲單位變化,必要時能夠填充0。一般包含:最長報文大小(MaximumSegment Size,MSS)、窗口擴大選項、時間戳選項、選擇性確認(Selective ACKnowlegement,SACK)等。
十二、數據
3、UDP數據段
UDP數據段格式比較簡單,以下:
UDP數據報由首部和數據兩部分組成,其中首部只有8B(字節)。
一、源端口號(Source Port)
長度爲16位,指明發送數據的進程。
二、目的端口號(Destination Port)
長度爲16位,指明目的主機接收數據的進程。
三、長度
長度爲16位,該字段值爲報頭和數據兩部分的總字節數。
四、檢驗和(Checksum)
長度爲16位,UDP檢驗和做用於UDP報頭和UDP數據的全部位。由發送端計算和存儲,由接收端校驗。
五、數據