TCP三次握手:
第一次握手:Client將標(biāo)志位SYN置為1雳攘,隨機產(chǎn)生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給Server状知,Client進入SYN_SENT狀態(tài)耙箍,等待Server確認。
第二次握手:?Server?收到數(shù)據(jù)包后由標(biāo)志位?SYN=1?知道?Client?請求建立連接,?Server?將標(biāo)志位?SYN?和?ACK?都置為?1?故慈,?ack=J+1?板熊,隨機產(chǎn)生一個值?seq=K?,并將該數(shù)據(jù)包發(fā)送給?Client?以確認連接請求察绷,?Server?進入?SYN_RCVD?狀態(tài)干签。
第三次握手:?Client?收到確認后,檢查?ack?是否為?J+1?拆撼,?ACK?是否為?1?容劳,如果正確則將標(biāo)志位?ACK?置為?1?,?ack=K+1?闸度,并將該數(shù)據(jù)包發(fā)送給?Server?竭贩,?Server?檢查?ack?是否為?K+1?,?ACK?是否為?1?莺禁,如果正確則連接建立成功留量,?Client?和?Server?進入?ESTABLISHED?狀態(tài),完成三次握手哟冬,隨后?Client?與?Server?之間可以開始傳輸數(shù)據(jù)了楼熄。
簡單來說,就是
第一次:建立連接時浩峡,客戶端發(fā)送SYN包(SYN=i)到服務(wù)器可岂,并進入到SYN-SEND狀態(tài),等待服務(wù)器確認红符。
第二次:服務(wù)器收到?SYN?包青柄,必須確認客戶的?SYN?(?ack=i+1?)?,?同時自己也發(fā)送一個?SYN?包(?SYN=k?)?,?即?SYN+ACK?包,此時服務(wù)器進入?SYN-RECV?狀態(tài)预侯。
第三次:客戶端收到服務(wù)器的?SYN+ACK?包,向服務(wù)器發(fā)送確認報?ACK?(?ack=k+1?)?,?此包發(fā)送完畢峰锁,客戶端和服務(wù)器進入?ESTABLISHED?狀態(tài)萎馅,完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)虹蒋。
TCP四次揮手:
第一次揮手:Client發(fā)送一個FIN糜芳,用來關(guān)閉Client到Server的數(shù)據(jù)傳送,Client進入FIN_WAIT_1狀態(tài)魄衅。
第二次揮手:?Server?收到?FIN?后峭竣,發(fā)送一個?ACK?給?Client?,確認序號為收到序號?+1?(與?SYN?相同晃虫,一個?FIN?占用一個序號)皆撩,?Server?進入?CLOSE_WAIT?狀態(tài)。
第三次揮手:?Server?發(fā)送一個?FIN?,用來關(guān)閉?Server?到?Client?的數(shù)據(jù)傳送扛吞,?Server?進入?LAST_ACK?狀態(tài)呻惕。
第四次揮手:?Client?收到?FIN?后,?Client?進入?TIME_WAIT?狀態(tài)滥比,接著發(fā)送一個?ACK?給?Server?亚脆,確認序號為收到序號?+1?,?Server?進入?CLOSED?狀態(tài)盲泛,完成四次揮手濒持。
簡單總結(jié)
三次握手:
1、客戶端向服務(wù)器發(fā)送請求寺滚,請求建立連接
2柑营、服務(wù)器接收到客戶端請求之后,如果同意鏈接玛迄,發(fā)送確認報文給客戶端
3由境、客戶端接收確認報文之后,再次發(fā)送確認報文給服務(wù)器蓖议,完成連接虏杰。
四次揮手:
第一次揮手:客戶端想分手,發(fā)送消息給服務(wù)器
第二次揮手:服務(wù)器通知客戶端已經(jīng)接受到分手請求勒虾,但還沒做好分手準(zhǔn)備
第三次回收:服務(wù)器已經(jīng)做好分手準(zhǔn)備纺阔,通知客戶端
第四次揮手:客戶端發(fā)送消息給服務(wù)器,確定分手修然,服務(wù)器關(guān)閉連接