三次握手協議

三次握手協議

服務器端與客戶端的交互
三次握手協議指的是在發送數據的準備階段,服務器端和客戶端之間需要進行三次交互:第一次握手:客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀态,等待服務器确認;第二次握手:服務器收到syn包,必須确認客戶的syn(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀态;第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送确認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀态,完成三次握手。連接建立後,客戶端和服務器就可以開始進行數據傳輸了。 為了提供可靠的傳送,TCP在發送新的數據之前,以特定的順序将數據包的序号,并需要這些包傳送給目标機之後的确認消息。TCP總是用來發送大批量的數據。當應用程序在收到數據後要做出确認時也要用到TCP。
    中文名:三次握手協議 外文名: 所屬學科: 英文名:Three Interaction Protocol 特點:三次交互 應用領域:互聯網

概述

在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀态,等待服務器确認;第二次握手:當服務器接收到一個報文請求之後,同意連接,則發出确認報文,确認報文中包含TCP Flags中的 SYN,ACK 兩位的字段。;第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送确認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀态,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據,在上述過程中,還有一些重要的概念:未連接隊列:在三次握手協議中,服務器維護一個未連接隊列,該隊列為每個客戶端的SYN包(syn=j)開設一個條目,該條目表明服務器已收到SYN包,并向客戶發出确認,正在等待客戶的确認包。這些條目所标識的連接在服務器處于Syn_RECV狀态,當服務器收到客戶的确認包時,删除該條目,服務器進入ESTABLISHED狀态。SYN-ACK重傳次數:服務器發送完SYN-ACK包,如果未收到客戶确認包,服務器進行首次重傳,等待一段時間仍未收到客戶确認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統将該連接信息從半連接隊列中删除。注意,每次重傳等待的時間不一定相同。半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到确認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。

工作原理

由于TCP需要時刻跟蹤,這需要額外開銷,使得TCP的格式有些顯得複雜。下面就讓我們看一個TCP的經典案例,這是後來被稱為MITNICK攻擊中KEVIN開創了兩種攻擊技術:TCP 會話劫持和syn flood(同步洪流)

SYN FLOOD

當客戶端和服務器在網絡中使用TCP協議發起會話時,在服務器内存中會開辟一小塊緩沖區來處理會話過程中消息的“握手”交換。會話建立數據包包含一個SYN片段,用于标識消息交換中的序列号。而SYN FLOOD試圖摧毀這一過程。攻擊者快速發送一連串連接請求,之後并不響應服務器發送回來的應答,造成三次握手無法完成,在服務器上留下半打開的連接,分配給他們的緩存也被保留下來,使其他程序不能使用服務器。盡管緩沖區中的數據包在沒有應答超過一段時間(通常3min)就會被丢棄,但大量虛假請求的後果是用于建立會話的合法請求很難建立。

TCP會話劫持

假設A 為攻擊者,B 為中介跳闆機器(受信任的服務器),C 為目的主機(多是服務器)。會話劫持的常用方法:使用源路由(source Routed)IP數據包,使位于網絡上的A 參與到B與C的連接中。會話劫持的常見類型:中間人攻擊。攻擊者A通過某種類型的數據包嗅探程序偵聽B與C的數據傳輸,可以截獲他想要的任何信息而不打斷會話。會話劫持的方法:攻擊者A向正在通話的B發送大量請求使其無暇響應合法用戶C,此時A預測B的TCP序列号冒充B與C進行會話,騙取C的信任,從而達到攻擊的目的。有效抵禦會話劫持的方法:使用加密傳輸。

相關詞條

相關搜索

其它詞條