1. 程式人生 > >[na]TCP的三次握手四次揮手/SYN泛洪

[na]TCP的三次握手四次揮手/SYN泛洪

同步 阿裏 應用層 保護 才有 運行 cookie medium soc

1、TCP報文格式

技術分享圖片
上圖中有幾個字段需要重點介紹下:

(1)序號:Seq序號,占32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

(2)確認序號:Ack序號,占32位,只有ACK標誌位為1時,確認序號字段才有效,Ack=Seq+1。

(3)標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:
(A)URG:緊急指針(urgent pointer)有效。
(B)ACK:確認序號有效。
(C)PSH:接收方應該盡快將這個報文交給應用層。
(D)RST:重置連接。
(E)SYN:發起一個新連接。
(F)FIN:釋放一個連接。

需要註意的是:

(A)不要將確認序號Ack與標誌位中的ACK搞混了。
(B)確認方Ack=發起方Req+1,兩端配對。

2、TCP三次握手

所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。
三次握手的目的是連接服務器指定端口,建立TCP連接,並同步連接雙方的序列號和確認號並交換 TCP 窗口大小信息.在socket編程中,客戶端執行connect()時。將觸發三次握手

技術分享圖片

第一次握手:

客戶端發送一個TCP的SYN標誌位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段裏。

技術分享圖片

第二次握手:

服務器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即X+1。
技術分享圖片

服務器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即X+1。

第三次握手.

客戶端再次發送確認包(ACK)SYN標誌位為0,ACK標誌位為1.並且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段放寫ISN的+1

技術分享圖片

SYN攻擊

重點閱讀-阿裏雲centos環境之被dos,syn攻擊策略和排查方法,持續更新

參考
技術分享圖片

技術分享圖片

在三次握手過程中,服務器發送SYN-ACK之後,收到客戶端的ACK之前的TCP連接稱為半連接(half-open connect).此時服務器處於Syn_RECV狀態.當收到ACK後,服務器轉入ESTABLISHED狀態.
Syn攻擊就是 攻擊客戶端 在短時間內偽造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直 至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。
Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的方便,當你在服務器上看到大量的半連接狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊

參考

netstat -n -p TCP | grep SYN_RECV #這個centos7已經不好使了.

ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'

一般較新的TCP/IP協議棧都對這一過程進行修正來防範Syn攻擊,修改tcp協議實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連接和縮短超時時間等.
但是不能完全防範syn攻擊。

3、TCP 四次揮手

TCP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。

技術分享圖片

為什麽建立連接是三次握手,而關閉連接卻是四次揮手呢?

這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

TCP的三次握手四次揮手

[na]TCP的三次握手四次揮手/SYN泛洪