TCP面試題之三次握手過程


TCP簡介:

  1、面向連接的、可靠的、基於字節流的傳輸層的通信協議;

  2、將應用層的數據流分割成報文段並發送給目標節點的TCP層;

  3、數據包都有序號,對方收到則發送ACK確認,未收到則重傳;

  4、使用校驗和來檢驗數據在傳輸過程中是否有誤;

TCP標志位(Flags):

  1、URG:緊急指針標志;

  2、ACK:確認序號標志;

  3、PSH:push標志;

  4、RST:重置連接標志;

  5、SYN:同步序號,用於建立連接過程;

  6、FIN:finish標志,用於釋放連接;

TCP三次握手過程:

  1、建立連接時,客戶端發送SYN包到服務器,並進入SYN_SEND狀態,等待服務器確認;

  2、服務器收到SYN包,必須確認客戶的SYN,同時自己也發送一個SYN包,即SYN+ACK包,此時服務器進入SYN_RECV狀態;

  3、客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,此包發送完畢,客戶端和服務器進入established狀態,完成三次握手;

首次握手的隱患------SYN超時問題

問題起因和分析:

  1、服務器收到客戶端的SYN,回復SYN和ACK的時候未收到ACK確認

  2、服務器不斷重試直至超時,Linux默認等待63秒才斷開連接;(重復5次【不包括第一次】,從1秒開始,每次重試都翻倍:1+2+4+8+16+32=63秒)

針對SYN Flood的防護措施:

  1、SYN隊列滿后,通過tcp_syncookies參數會發SYN cookie【源端口+目標端口+時間戳組成】;

  2、若為正常連接則Client會回發SYN Cookie,直接建立連接;

 建立連接后,Client出現故障怎么辦:

保活機制:

  1、向對方發送保活探測報文,如果未收到相應則繼續發送;

  2、嘗試次數達到保活探測數仍未收到相應則中斷連接;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM