TCP三次握手

傳輸控制協議(Transmission Control Protocol,TCP)是一種面向鏈接的、可靠的、基於字節流的運輸層(Transport layer)通訊協議。是專門爲了在不可靠的互聯網絡上提供一個可靠的端到端字節流而設計的。每一次TCP鏈接都須要三個階段:鏈接創建、數據傳送和鏈接釋放。「三次握手」就發生在鏈接創建階段。

 1. TCP鏈接創建過程當中爲何須要「三次握手」    

    目的是爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤。

   「已失效的鏈接請求報文段」的產生在這樣一種狀況下:

     client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client發出確認報文段,贊成創建鏈接。若不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接的請求,所以不會理睬server的確認,也不會向server發送數據。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。例如剛纔那種狀況,client不會向server的確認發出確認。server因爲收不到確認,就知道client並無要求創建鏈接。」

2. TCP三次握手編程

   三次握手(Three-way Handshake)是指創建一個TCP鏈接時,須要客戶端和服務器總共發送3個包。

(1)第一次握手
         客戶端發送一個TCP的SYN標誌位置1的包,指明客戶打算鏈接的服務器的端口,以及初始序號X, 保存在包頭的服務器

         序列號(Sequence Number)字段裏。cookie

(2)第二次握手
         服務器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均爲1同時,將確認序號(Acknowledgement Number)網絡

         設置爲客戶的I S N加1以.即X+1。socket

(3)第三次握手
        客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段tcp

        中發送給對方.而且在數據段放寫ISN的+1post

 

3. SYN攻擊spa

        在三次握手過程當中,服務器發送SYN-ACK以後,收到客戶端的ACK以前的TCP鏈接稱爲半鏈接(half-open connect).此時服務器處於Syn_RECV狀態. 當收到ACK後,服務器轉入ESTABLISHED狀態.設計

        Syn攻擊就是 攻擊客戶端 在短期內僞造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回覆確認包,並等待客戶的確認,因爲源地址是不存在的,服務器須要不斷的重發直至超時,這些僞造的SYN包將長時間佔用未鏈接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引發網絡堵塞甚至系統癱瘓server

        Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊很是的方便,當你在服務器上看到大量的半鏈接狀態時,特別是源IP地址是隨機的,基本上能夠判定這是一次SYN攻擊.在Linux下能夠以下命令檢測是否被Syn攻擊

netstat -n -p TCP | grep SYN_RECV

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

 

4. TCP四次揮手

TCP的鏈接的拆除須要發送四個包,所以稱爲四次揮手(four-way handshake)。客戶端或服務器都可主動發起揮手動做,在socket編程中,任何一方執行close()操做便可產生揮手操做。

相關文章
相關標籤/搜索