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、嘗試次數達到保活探測數仍未收到相應則中斷連接;