TCP/IP header欄位註釋
識別符號(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包會被丟棄。
協議(Protocol):長度8位元。標識了上層所使用的協議。
以下是比較常用的協議號:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
頭部校驗(Header Checksum):長度16位。用來做IP頭部的正確性檢測,但不包含資料部分。 因為每個路由器要改變TTL的值,所以路由器會為每個通過的資料包重新計算這個值。
Seq number:TCP連線建立時選擇隨機數作為初始值,通過SYN包傳給接收端主機(SYN cookies採用基於時間種子的隨機演算法,且傳送SYN+ACK後清空資源,收到ACK後通過cookie演算法鑑定與SYN+ACK是否匹配);每傳送一次資料,就累加一次資料位元組數;
Ack number:傳送端收到此序號表明之前的資料都已被成功接受,其值為收到的報文段序號+1;
Header length:標識該TCP頭部有多少個32bit字(4位元組)。因為4位最大能表示15,所以TCP頭部最長是60位元組。
Flags:
1 URG,為1表明有應急指標
2 ACK,除了SYN包外都為1,確認應答欄位有效
3 PSH,為1表明將接受的資料立即傳給上層協議,0則先進行快取
4 RST,1=強制斷開連線
5 SYN,1=建立連線
6 FIN,1=斷開連線
Window size: 指的是接收通告視窗(Receiver Window,RWND)。它告訴對方本端的TCP接收緩衝區還能容納多少位元組的資料,這樣對方就可以控制傳送資料的速度。
Checksum:由傳送端填充,接收端對TCP報文段執行CRC演算法以檢驗TCP報文段在傳輸過程中是否損壞。注意,這個校驗不僅包括TCP頭部,也包括資料部分
Urgent:緊急指標,從資料首位到此指標位置;多用於中斷通訊,如telent輸入ctrl+c
一個TCP/IP資料包至少有多大?
攻擊程式在填充包頭時,IP首部和TCP首部都不填充可選的欄位,因此IP首部長度恰好是20位元組,TCP首部也是20位元組,共40位元組。
對於乙太網來說,最小的包長度資料段必須達到46位元組,而攻擊報文只有40位元組,因此,網路卡在傳送時,會做一些處理,在TCP首部的末尾,填充6個0來滿足最小包的長度要求。這個時候,整個資料包的長度為14位元組的乙太網頭,20位元組的IP頭,20位元組的TCP頭,再加上因為最小包長度要求而填充的6個位元組的0,一共是60位元組。
乙太網在傳輸資料時,還有CRC檢驗的要求。網路卡會在傳送資料之前對資料包進行CRC檢驗,將4位元組的CRC值附加到包的最後面。這個時候,資料包長度已不再是40位元組,而是變成64位元組了,這就是常說的SYN小包攻擊,資料包結構如下:
|14位元組乙太網頭部|20位元組IP頭部|20位元組TCP|6位元組填充|4位元組檢驗||目的MAC|源MAC|協議型別| IP頭 |TCP頭|乙太網填充 | CRC檢驗 |
參考資料
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1334334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP header 欄位解釋HTTPHeader
- Oracle中檢視所有表和欄位以及表註釋.欄位註釋Oracle
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- oracle檢視該使用者的所有表名字、表註釋、欄位名、欄位註釋、是否為空、欄位型別Oracle型別
- sql server如何檢視欄位註釋?SQLServer
- SQL Server 查詢表註釋和欄位SQLServer
- Oracle-給表增加欄位和註釋Oracle
- Oracle 增加修改刪除欄位與新增註釋Oracle
- Oracle 檢視 表屬性 :“表名(註釋)/列名(註釋)/欄位是否NULL”OracleNull
- MySQL-新增列,新增或修改欄位的註釋MySql
- 匯出Oracle中的所有表和欄位的註釋Oracle
- IDEA外掛實現根據欄位註釋生成getter/setter方法Javadoc註釋IdeaJava
- MySQL如何檢視新增修改表以及欄位註釋資訊MySql
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- TCP/IP模型的簡單解釋TCP模型
- 建議beego的ORM,可以實現表欄位註釋的新增GoORM
- [SIP01]SIP Header Fields裡面各欄位用途Header
- sqlserver新增查詢 表、欄位註釋,組合查詢所有的使用者、表名、表註釋SQLServer
- MySQL-修改欄位型別、設定預設值,以及新增註釋MySql型別
- TCP/IP模型的一個簡單解釋TCP模型
- 從Sql server 2008獲取表欄位屬性資訊,註釋資訊SQLServer
- MySQL查詢索引的選擇性、索引欄位、註釋等基本資訊的SQLMySql索引
- MySQL 查詢索引的選擇性、索引欄位、註釋等基本資訊的SQLMySql索引
- TCP TCP/IP HTTP HTTPSTCPHTTP
- TCP/IP族TCP
- TCP/IP模型TCP模型
- TCP / IP AT命令TCP
- Retrofit請求引數註解欄位說明
- mysql 用sql語句查詢一個表中的所有欄位型別、註釋MySql型別
- http請求頭個欄位解釋HTTP
- 詳解Buffer Header--DUMP buffer結合X$BH檢視各欄位Header
- 【TCP/IP】TCP詳解筆記TCP筆記
- BIEE header欄新增下拉選單Header
- tcp/ip協議TCP協議
- TCP/IP 筆記TCP筆記
- 面試之TCP/IP面試TCP
- TCP/IP 基礎TCP
- 淺談TCP/IPTCP