TCP3次握手:
---------------------------------
是指建立1個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。
3次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換 TCP 窗口大小信息,在socket編程中,客戶端履行connect()時(shí)。將觸發(fā)3次握手。
序號(hào)(seq):本報(bào)文段所發(fā)送的數(shù)據(jù)的第1個(gè)字節(jié)的序號(hào)
確認(rèn)號(hào)(ack):是期望收到對(duì)方下1個(gè)報(bào)文段的第1個(gè)數(shù)據(jù)字節(jié)的序號(hào);若確認(rèn)號(hào)為x,則到序號(hào)x⑴為止(包括x⑴)的所有數(shù)據(jù)都已正確收到
確認(rèn)(ACK):僅當(dāng) ACK=1 時(shí),確認(rèn)號(hào)字段才有效,當(dāng) ACK=0時(shí),確認(rèn)號(hào)無(wú)效;TCP規(guī)定:在連接建立后所有傳送的報(bào)文都必須把ACK置1
同步(SYN):當(dāng) SYN=1 而 ACK=0 時(shí),表明這是1個(gè)連接要求報(bào)文段,若對(duì)方同意建立連接,則應(yīng)在響應(yīng)的報(bào)文中使用 SYN=1 和 ACK=1 ;SYN=1 就表示這是1個(gè)連接要求或連接接受報(bào)文。
終止(FIN):用來(lái)釋放1個(gè)連接。當(dāng) FIN=1 時(shí),表明此報(bào)文的發(fā)送方的數(shù)據(jù)已發(fā)送終了,并要求釋放運(yùn)輸連接。
TCP規(guī)定:
*在連接建立后所有傳送的報(bào)文都必須把ACK置1。
*SYN 報(bào)文段、FIN 報(bào)文段不能攜帶數(shù)據(jù),但要消耗掉1個(gè)序號(hào)。
*ACK 報(bào)文段可以攜帶數(shù)據(jù),但如果不攜帶數(shù)據(jù)則不消耗序號(hào)。
1個(gè)完全的3次握手也就是:要求--應(yīng)對(duì)--再次確認(rèn)
第1次握手:
客戶端進(jìn)程向服務(wù)器進(jìn)程發(fā)出連接要求報(bào)文段,報(bào)文段首部中 (初始)序號(hào)seq=x,同步SYN=1,這時(shí)候客戶端進(jìn)程進(jìn)入SYN-SENT(同步已發(fā)送)狀態(tài)。
第2次握手:
服務(wù)器進(jìn)程收到連接要求報(bào)文段后,若同意建立連接,則向客戶端進(jìn)程發(fā)送響應(yīng)報(bào)文段,報(bào)文段首部中 同步SYN=1,確認(rèn)ACK=1,確認(rèn)號(hào)ack=x+1(注:確認(rèn)號(hào)ack=客戶端進(jìn)程的seq+1),(初始)序號(hào)seq=y,這時(shí)候服務(wù)器進(jìn)程進(jìn)入SYN-RCVD(同步收到)狀態(tài)。
第3次握手:
客戶端進(jìn)程收到服務(wù)器進(jìn)程的響應(yīng)報(bào)文段后,還要想服務(wù)器進(jìn)程發(fā)出確認(rèn)報(bào)文段,報(bào)文段的首部中 同步SYN=0,確認(rèn)ACK=1,確認(rèn)號(hào)ack=y+1,序號(hào)seq=x+1,這時(shí)候TCP連接已建立,客戶端進(jìn)程和服務(wù)器進(jìn)程都進(jìn)入ESTABLISHED(已建立連接)
完成3次握手,主機(jī)A與主機(jī)B開始傳送數(shù)據(jù)
注:序號(hào)seq等于前面已傳送過(guò)的數(shù)據(jù)的最后1個(gè)字節(jié)的序號(hào)+1,在第1次握手中,seq=x,SYN=1(占1個(gè)序號(hào)位,即把 x 這個(gè)序號(hào)位給占了,所以下1次傳送的序號(hào)應(yīng)當(dāng)從x+1開始,揮手時(shí)的FIN也同理)
---------------------------------
TCP 4次揮手
---------------------------------
TCP的連接的撤除需要發(fā)送4個(gè)包,因此稱為4次揮手(four-way handshake)。客戶端或服務(wù)器都可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中,任何1方履行close()操作便可產(chǎn)生揮手操作
第1次揮手:
客戶端進(jìn)程向服務(wù)器段進(jìn)程發(fā)出連接釋放報(bào)文段,并停止再發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接,報(bào)文段首部中 終止FIN=1,序號(hào)seq=u,此時(shí)客戶端進(jìn)程進(jìn)入FIN-WAIT⑴(終止等待1)狀態(tài)
第2次揮手:
服務(wù)器進(jìn)程收到客戶端進(jìn)程的連接釋放報(bào)文段后,向客戶端進(jìn)程發(fā)送確認(rèn)報(bào)文段,報(bào)文段首部中 確認(rèn)ACK=1,確認(rèn)號(hào)ack=u+1,序號(hào)seq=v,此時(shí)服務(wù)器進(jìn)程就進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài),并通知高層利用進(jìn)程。
客戶端進(jìn)程收到服務(wù)器進(jìn)程的確認(rèn)報(bào)文段后,客戶端進(jìn)程就進(jìn)入FIN-WAIT⑵(終止等待2)狀態(tài)。
第3次揮手:
利用進(jìn)程通知服務(wù)器進(jìn)程釋放連接后,服務(wù)器進(jìn)程發(fā)出連接釋放報(bào)文段,報(bào)文段首部中 確認(rèn)ACK=1,F(xiàn)IN=1 ,序號(hào)seq=w(在半關(guān)閉狀態(tài)時(shí)服務(wù)器進(jìn)程可能又發(fā)送了1些數(shù)據(jù)),確認(rèn)號(hào)ack=u+1,此時(shí)服務(wù)器進(jìn)程進(jìn)入LAST-ACK(最后肯定)狀態(tài)。
第4次揮手:
客戶端進(jìn)程收到服務(wù)器進(jìn)程的連接釋放報(bào)文段后,向服務(wù)器進(jìn)程發(fā)送肯定報(bào)文段,報(bào)文段段首部中 確認(rèn)ACK=1,序號(hào)seq=u+1,確認(rèn)號(hào)ack=w+1,此時(shí)客戶端進(jìn)程進(jìn)入到TIME-WAIT(時(shí)間等待)狀態(tài),等到等待時(shí)間過(guò)后,2者才都進(jìn)入到CLOSED(關(guān)閉)狀態(tài)
*>3次握手的目的:
1 要雙方做好發(fā)送數(shù)據(jù)的準(zhǔn)備工作(雙方都知道彼此已準(zhǔn)備好)
2 要雙方就初始序列號(hào)進(jìn)行協(xié)商和肯定
*>3次握手改成兩次握手會(huì)產(chǎn)生死鎖
如果采取兩次握手,有以下情況:A,B兩臺(tái)主機(jī),A發(fā)送連接要求,B給予確認(rèn),則認(rèn)為連接建立,如果B的確認(rèn)包在傳輸?shù)倪M(jìn)程中丟失,對(duì)A而言將1直處于等待B的確認(rèn)狀態(tài),而B認(rèn)為建立以成功,可以傳輸數(shù)據(jù),B傳給A的數(shù)據(jù),A將不予接受,從而B處于等待A的確 認(rèn)狀態(tài),相互等待造成死鎖。
*>SYN攻擊
在3次握手進(jìn)程中,服務(wù)器發(fā)送SYN-ACK以后,收到客戶真?zhèn)€ACK之前的TCP連接稱為半連接(half-open connect).此時(shí)服務(wù)器處于SYN-RCVD狀態(tài).當(dāng)收到ACK后,服務(wù)器轉(zhuǎn)入ESTABLISHED狀態(tài).
SYN攻擊就是 攻擊客戶端 在短時(shí)間內(nèi)捏造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送syn包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn),由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些捏造的SYN包將長(zhǎng)時(shí)間占用未連接隊(duì)列,正常的SYN要求被拋棄,目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者引發(fā)網(wǎng)絡(luò)梗塞乃至系統(tǒng)癱瘓。
SYN攻擊是1個(gè)典型的DDOS攻擊。檢測(cè)SYN攻擊非常的方便,當(dāng)你在服務(wù)器上看到大量的半連接狀態(tài)時(shí),特別是源IP地址是隨機(jī)的,基本上可以判定這是1次SYN攻擊.在Linux下可以以下命令檢測(cè)是不是被Syn攻擊
netstat -n -p TCP | grep SYN_RECV
1般較新的TCP/IP協(xié)議棧都對(duì)這1進(jìn)程進(jìn)行修正來(lái)防范SYN攻擊,修改tcp協(xié)議實(shí)現(xiàn)。主要方法有SynAttackProtect保護(hù)機(jī)制、SYN cookies技術(shù)、增加最大半連接和縮短超時(shí)時(shí)間等.但是不能完全防范syn攻擊