TCP建立连接与断开连接的过程
在CS模式的TCP連接建立過程中,客戶端與服務(wù)器端流程如下:
客戶端流程:發(fā)送請求->接收服務(wù)器端確認(rèn)->發(fā)送對服務(wù)器端確認(rèn)的確認(rèn)。
服務(wù)器端流程:接收客戶端的連接建立請求->發(fā)送確認(rèn)->接收客戶端發(fā)送的對確認(rèn)的確認(rèn)。
1、剛開始客戶端和服務(wù)端都處于CLOSED狀態(tài),服務(wù)端開始監(jiān)聽某個端口,進(jìn)入LISTEN狀態(tài)。
2、客戶端發(fā)送連接請求報文,其中包含SYN=1,ACK=0,初始序列號x,進(jìn)入SYN-SENT狀態(tài)。
3、服務(wù)器端接受請求報文后,向客戶端發(fā)送確認(rèn)報文,其中包含SYN=1,ACK=1,確認(rèn)號x+1,自己的初始序列號y,之后服務(wù)器會進(jìn)入SYN-RCVD狀態(tài)。
4、客戶端收到 服務(wù)器端的確認(rèn)報文后,會發(fā)送一個確認(rèn)報文給服務(wù)器,表明已經(jīng)接收到服務(wù)器發(fā)送的確認(rèn)報文。該報文中包含ACK=1,確認(rèn)號y+1,序列號x+1。同時客戶端會進(jìn)入ESTABLISHED狀態(tài)。
5、服務(wù)器收到上述報文后會進(jìn)入ESTABLISHED狀態(tài)。此時客戶端與服務(wù)器的TCP連接建立完成。
為什么TCP連接不是兩次握手?即為什么客戶端最后會向服務(wù)器發(fā)送確認(rèn)報文。
1:假設(shè)只有兩次握手,客戶端發(fā)出了一個連接請求報文A。但是由于網(wǎng)絡(luò)原因,A并未及時到達(dá)服務(wù)器。之后客戶端發(fā)送了連接請求報文B,并到達(dá)了服務(wù)器,隨后雙方建立連接,傳輸數(shù)據(jù),最后斷開連接。此時客戶端進(jìn)入CLOSED狀態(tài),服務(wù)器進(jìn)入LISTEN狀態(tài)。隨后A報文到達(dá)服務(wù)器,由于服務(wù)器處于LISTEN狀態(tài),故服務(wù)器向客戶端發(fā)送確認(rèn)報文后進(jìn)入ESTABLISHED狀態(tài)并等待客戶端發(fā)送數(shù)據(jù)。但是客戶端此時處于CLOSED狀態(tài)。收到服務(wù)器的確認(rèn)報文后會丟棄該報文。服務(wù)器一直等待客戶端傳輸數(shù)據(jù),會造成副武器的資源浪費。
2:TCP的可靠傳輸要求通信雙方判斷自己發(fā)送的數(shù)據(jù)是否被接收到。TCP依靠的就是TCP報文中的序號和確認(rèn)號。因此當(dāng)TCP連接建立時雙方均需要確認(rèn)對方的初始序列號。而第三次握手則是客戶端對服務(wù)器端的初始序列號的確認(rèn)。因此第三次握手是必須的,否則無法保證服務(wù)器端到客戶端的可靠傳輸。
為什么TCP連接不是4次握手?
三次握手已經(jīng)能夠證明客戶端與服務(wù)器端之間的信道是可用的。再增加一次握手無非就是增加一點信道的可靠性,但是無論多少次握手都無法使信道100%可靠,因此也沒有必要增加一次握手。
TCP斷開連接的過程
1、客戶端停止發(fā)送數(shù)據(jù)并發(fā)送連接釋放請求報文,報文含有FIN=1,seq=u,并且進(jìn)入FIN-WAIT-1狀態(tài)。
2、服務(wù)器端接收到該報文后,返回一個連接釋放確認(rèn)報文。包含ACK=1,seq=v,ack=u+1,并進(jìn)入CLOSE-WAIT狀態(tài),此狀態(tài)下服務(wù)器端可能還會向客戶端發(fā)送數(shù)據(jù)。
3、客戶端收到確認(rèn)報文后,進(jìn)入FIN-WAIT-2狀態(tài),等待服務(wù)器發(fā)送連接釋放請求報文,并接收服務(wù)器端可能發(fā)送的數(shù)據(jù)。
4、服務(wù)器端發(fā)送完所有數(shù)據(jù)之后,會發(fā)送連接請求釋放報文。報文包含F(xiàn)IN=1,ACK=1,seq=w,ack=u+1,。之后服務(wù)器進(jìn)入LAST-WAIT狀態(tài),等待客戶端發(fā)來的連接釋放確認(rèn)報文。
5、客戶端收到服務(wù)器的連接釋放報文后,返回,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進(jìn)入了TIME-WAIT(時間等待)狀態(tài),TCP連接此時未釋放,因為不確定服務(wù)器端是否還有數(shù)據(jù)沒有到達(dá)客戶端。因此必須經(jīng)過2MSL(最大報文生存時間)后,才進(jìn)入CLOSED狀態(tài)。
6、服務(wù)器只要收到了客戶端發(fā)出的連接釋放確認(rèn)報文,立即進(jìn)入CLOSED狀態(tài)。
HTTP1.0和HTTP1.1和HTTP2.0的區(qū)別
總結(jié)
以上是生活随笔為你收集整理的TCP建立连接与断开连接的过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收集的一些discuz插件常用插件分享给
- 下一篇: 学会2种方法,小白也能快速产出标准的Ax