1. 程式人生 > >TCP連接的建立和終止。

TCP連接的建立和終止。

告訴 調試 序列號 ont 進行 分享 數據 信息 sha

為幫助大家理解connect,accept和close函數並使用netstat 調試TCP應用程序,我們必須了解如何建立和終止TCP連接以及TCP的狀態轉換圖.這是一個通過加深了解底層網絡協議以幫助我們編寫網絡程序的例子。

模擬三路握手:

下述步驟建立一個TCP連接

1.服務器必須準備好接受外來的連接。通過調用socket,bind 和 listen函數來完成,稱為被動打開(passive open)。

2.客戶通過調用connect進行主動打開(active open)。這引起客戶TCP發送一個SYN分節(表示同步),它告訴服務器客戶將在(待建立的)連接中發送的數據的初始序列號。一般情況下SYN分節不攜帶數據。它只含有一個IP頭部,一個TCP頭部及可能的TCP選項。

技術分享

就是說 第一次握手 client端發送SYN報文, syn=1,SEQ也就是說序列號為 J---->4bytes,其他位置為0.

第二次握手 server端回復client端報文ACK報文 SYN=1,ACK=1,SEQ=Y,確認SEQ=J+1.

第三次握手 client端 SYN=1,SEQ=J+1,確認SEQ=Y+1。---->SEQ=第二次握手----> 確認SEQ---->第三次SEQ

=======================================================================================================

TCP機制的缺陷 DOS攻擊缺陷,大量虛假IP的SYN報文攻擊,服務器耗費大量的cpu與內存。

SYN攻擊屬於DDoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網絡系統,事實上SYN攻擊並不管目標是什麽系統,只要這些系統打開TCP服務就可以實施。

服務器接收到連接請求(syn= j),將此信息加入未連接隊列,並發送請求包給客戶(syn=k,ack=j+1),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。

配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。

3.服務器必須確認客戶的SYN,同時自己也得發送一個SYN分節,它包含服務器將在同一個連接中發送的數據初始序列號。服務器以單個分節向客戶發送SYN和對客戶SYN的ACK。

4.客戶必須確認服務器的SYN。

連接建立過程至少需要交換三個分節--->TCP的三路握手(three-way hand-shake)。我們在圖2.2中展示這三個分節。

圖2.2.給出的客戶的初始序列號為J,而服務器的初始序列號為K。在ACK裏確認號為發送這個ACK的一方所期待的對方的下一個序列號。因為SYN只占一個字節的序列號空間,所以每一個SYN的ACK中的確認號都是相應的初始序列號加1.類似的每一個FIN的ACK中的確認號為FIN的序列號加1.

TCP連接的建立和終止。