URG:(Urgent Pointer field significant)緊急游標。用到的時候值為1,用來處理避免TCP資料流中斷
ACK:(Acknowledgment field significant)置1時表示驗證號(Acknowledgment Number)為合法,為0的時候表示資料段不包含驗證信息,驗證號被忽略。
PSH:(Push Function),PUSH標誌的資料,置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒絕非法資料和請求。如果接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1,ACK=0,連接回應時, SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。
FIN:(No more data from sender)用來釋放連接,表明傳送方已經沒有資料傳送。
TCP傳輸協定連接的三次握手程序是這樣的:
首先客戶端(請求方)在連接請求中,傳送SYN=1,ACK=0的TCP資料包給伺服器端(接收請求端),表示要求同伺服器端建立一個連接;然後如果伺服器端回應這個連接,就返回一個SYN=1,ACK=1的資料報給客戶端,表示伺服器端同意這個連接,並要求客戶端驗證;最後客戶端就再傳送SYN=0,ACK=1的資料包給伺服器端,表示驗證建立連接。
/////////////////////////////////////////////////////////////////
有關TCP協議的東西
TCP(transmission control protocol,傳輸控制協議),是用來在不可靠的因特網上 提供可靠的、端到端的字節流通訊協議,在RFC793中有正式定義,還有一些解決錯誤的 東西在RFC 1122中有記錄,RFC 1323則有TCP的功能擴展。
我們常見到的TCP/IP協議中,IP層不保證將數據報正確傳送到目的地,TCP則從本地機 器接受用戶的數據流,將其分成不超過64K字節的數據片段,將每個數據片段作為單獨 的IP數據包發送出去,最後在目的地機器中再組合成完整的字節流,TCP協議必須保證 可靠性。
發送和接收方的TCP傳輸以數據段的形式交換數據,一個數據段包括一個固定的20字節 頭,加上可選部分,後面再跟上數據,TCP協議從發送方傳送一個數據段的時候,還要 啟動計時器,當數據段到達目的地後,接收方還要發送回一個數據段,其中有一個確認 序號,它等於希望收到的下一個數據段的順序號,如果計時器在確認信息到達前超時 了,發送方會重新發送這個數據段。
上面,我們總體上瞭解一點TCP協議,重要的是要熟悉TCP的數據頭(header)。因為數 據流的傳輸最重要的就是header裡面的東西,至於發送的數據,只是header附帶上的。 客戶端和服務端的服務響應就是同header裡面的數據相關,兩端的信息交流和交換是根 據header中的內容實施的,因此,要實現DOS,就必須對header中的內容非常熟悉。
下面是TCP數據段頭格式。
Source Port和 Destination Port :是本地端口和目標端口 Sequence Number 和 Acknowledgment Number :是順序號和確認號,確認號是希望接 收的字節號。這都是32位的,在TCP流中,每個數據字節都被編號。
Data offset :表明TCP頭包含多少個32位字,用來確定頭的長度,因為頭中可選字段長度是不定的。
Reserved : 保留的6位,現在沒用,都是0 接下來是6個1位的標誌,這是兩個計算機數據交流的信息標誌。接收和發送斷根據這些 標誌來確定信息流的種類。
下面是一些介紹:
URG:(Urgent Pointer field significant)緊急指針。用到的時候值為1,用來處理避免TCP數據流中斷
ACK: (Acknowledgment field significant)置1時表示確認號(Acknowledgment Number) 為合法,為0的時候表示數據段不包含確認信息,確認號被忽略。
PSH:(Push Function),PUSH標誌的數據,置1時請求的數據段在接收方得到後就可 直接送到應用程序,而不必等到緩衝區滿時才傳送。
RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒 絕非法數據和請求。如果 接收到RST位時候,通常發生了某些錯誤。
SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1, CK=0,連接響應時,SYN=1, ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。 FIN:(No more data from sender)用來釋放連接,表明發送方已經沒有數據發送。
知道這重要的6個指示標誌後,我們繼續來。
16位的WINDOW字段:表示確認了字節後還可以發送多少字節。可以為0,表示已經收到 包括確認號減1(即已發送所有數據) 在內的所有數據段。
接下來是16位的Checksum字段,用來確保可靠性的。 16位的Urgent Pointer,和下面的字段我們這裡不解釋了。不然太多了。呵呵,偷懶 啊。
我們進入比較重要的一部分:TCP連接握手過程。這個過程簡單地分為三步。在沒有連 接中,接受方(我們針對服務器),服務器處於LISTEN狀態,等待其他機器發送連接請 求。
第一步:客戶端發送一個帶SYN位的請求,向服務器表示需要連接,比如發送包假設請 求序號為10,那麼則為:SYN=10,ACK=0,然後等待服務器的響應。
第二步:服務器接收到這樣的請求後,查看是否在LISTEN的是指定的端口,不然,就發 送RST=1應答,拒絕建立連接。如果接收連接,那麼服務器發送確認,SYN為服務器的一 個內碼,假設為100,ACK位則是客戶端的請求序號加1,本例中發送的數據是: SYN=100,ACK=11,用這樣的數據發送給客戶端。向客戶端表示,服務器連接已經準備 好了,等待客戶端的確認這時客戶端接收到消息後,分析得到的信息,準備發送確認連 接信號到服務器
第三步:客戶端發送確認建立連接的消息給服務器。確認信息的SYN位是服務器發送的 ACK位,ACK位是服務器發送的SYN位加1。即:SYN=11,ACK=101。 這時,連接已經建立。然後發送數據,。這是一個基 本的請求和連接過程。需要注意的是這些標誌位的關係,比如SYN、ACK。
/////////////////////////////////////////////////////////////////
wikipedia:
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
http://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed.svg

/////////////////////////////////////////////////////////////////
Digested from:
(阻斷式攻擊的防禦理論以及瞭解)
http://www.geego.com.tw/tech/11.html
TCP連線的建立及結束
在瞭解TCP的連線建立及結束前,讀者們必須先對TCP表頭的各個領域的功能稍作瞭解,在此提供TCP的表頭,並且簡單的解釋一下其中的一些領域功能:


所謂的旗標(Code或是Flag),下面的表格解釋部分旗標的功能:

建立TCP連線的建立大致上可以分為三個部分:
1.連線的建立 - 三向交握 (Three-Way Handshake)。
2.傳輸資料。
3.結束連線。
如下圖所示: