所謂三次握手(three-way handshake)即建立tcp連線,就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket程式設計中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:
(1)第一次握手:client將標誌位syn((同步序列編號(synchronize sequence numbers))置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。
(2)第二次握手:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,ack=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。
(3)第三次握手:client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,client和server進入established狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。
syn攻擊:
在三次握手過程中,server傳送syn-ack之後,收到client的ack之前的tcp連線稱為半連線(half-open connect),此時server處於syn_rcvd狀態,當收到ack後,server轉入established狀態。syn攻擊就是client在短時間內偽造大量不存在的ip位址,並向server不斷地傳送syn包,server回覆確認包,並等待client的確認,由於源位址是不存在的,因此,server需要不斷重發直至超時,這些偽造的syn包將產時間占用未連線佇列,導致正常的syn請求因為佇列滿而被丟棄,從而引起網路堵塞甚至系統癱瘓。syn攻擊時一種典型的ddos攻擊,檢測syn攻擊的方式非常簡單,即當server上有大量半連線狀態且源ip位址是隨機的,則可以斷定遭到syn攻擊了,使用如下命令可以讓之現行:
#netstat -nap | grep syn_recv
解析TCP三次握手
三次握手又是什麼?tcp是面向連線的,無論哪一方向另一方傳送資料之前,都必須先在雙方之間建立一條連線。在tcp ip協議中,tcp協議提供可靠的連線服務,連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp視窗大小資訊。這就是面試中經常會被問到的tcp三次握手。...
TCP三次握手過程
幾個概念 ack 僅當ack 1時確認欄位才有效,當ack 0時確認字段無效,並且tcp規定,在連線建立後所有的傳送報文段都必須要把ack置為1 syn 同步序列號,用來發起乙個連線。當syn 1而ack 0時表明這是乙個請求報文段 若對方同意連線,則響應報文中syn 1,ack 1 tcp三次握手...
TCP三次握手過程
握手過程主要使用tcp協議的標誌flag syn和ack 傳送端 將乙個標有syn synchronize 的資料報傳送至接收端。接收端 接收到帶有syn的資料報後,返回乙個標有syn ack acknowledgement 的資料報 傳送端 收到後傳送標有ack的資料報,代表握手結束。如果握手過程...