成都網(wǎng)站建設(shè)-中國(guó)互聯(lián)公司建網(wǎng)站多少錢
TCP連接管理
TCP(傳輸控制協(xié)議)是面向連接的協(xié)議,在數(shù)據(jù)傳輸之前需要建立連接,在數(shù)據(jù)傳輸完成后需要斷開連接。TCP連接的建立和斷開都遵循特定的規(guī)則,分別稱為三次握手(Three-Way Handshake)和四次揮手(Four-Way Handshake)。它們確保雙方能夠可靠地建立和關(guān)閉連接。
三次握手(TCP連接的建立)
三次握手是為了在客戶端和服務(wù)器之間建立可靠的TCP連接。這個(gè)過程確保雙方都能發(fā)送和接收數(shù)據(jù),并且雙方的緩沖區(qū)準(zhǔn)備好接收數(shù)據(jù)。
三次握手的過程:
-
第一次握手:客戶端發(fā)送SYN包(同步標(biāo)志位),告訴服務(wù)器客戶端請(qǐng)求建立連接。
- 客戶端 -> 服務(wù)器:SYN = 1, seq = X(X為隨機(jī)生成的序列號(hào))
這一步表示客戶端請(qǐng)求連接,并初始化一個(gè)序列號(hào)X。
-
第二次握手:服務(wù)器收到SYN包后,向客戶端發(fā)送SYN-ACK包,表示愿意建立連接,并且確認(rèn)收到客戶端的請(qǐng)求。
- 服務(wù)器 -> 客戶端:SYN = 1, ACK = 1, seq = Y(服務(wù)器隨機(jī)生成的序列號(hào)), ack = X + 1(確認(rèn)號(hào),表示服務(wù)器已收到客戶端的SYN包)
服務(wù)器會(huì)發(fā)送一個(gè)SYN包來(lái)表示自己準(zhǔn)備好了,同時(shí)確認(rèn)客戶端的SYN包。
-
第三次握手:客戶端收到服務(wù)器的SYN-ACK包后,向服務(wù)器發(fā)送ACK包,確認(rèn)收到服務(wù)器的響應(yīng),并且連接建立。
- 客戶端 -> 服務(wù)器:ACK = 1, seq = X + 1, ack = Y + 1
客戶端向服務(wù)器確認(rèn)自己的序列號(hào),并最終完成連接建立。
至此,客戶端和服務(wù)器之間的連接建立完成,可以開始數(shù)據(jù)傳輸。
四次揮手(TCP連接的斷開)
四次揮手是為了安全地?cái)嚅_TCP連接,確保雙方的通信都已結(jié)束。這個(gè)過程確保數(shù)據(jù)能夠完全傳輸,并且雙方都能正常關(guān)閉連接。
四次揮手的過程:
-
第一次揮手:客戶端發(fā)送FIN包,表示它已經(jīng)完成數(shù)據(jù)的發(fā)送請(qǐng)求,準(zhǔn)備關(guān)閉連接。
- 客戶端 -> 服務(wù)器:FIN = 1, seq = A
客戶端告訴服務(wù)器自己已經(jīng)沒有數(shù)據(jù)發(fā)送了,要求關(guān)閉連接。
-
第二次揮手:服務(wù)器收到FIN包后,發(fā)送ACK包,確認(rèn)客戶端的關(guān)閉請(qǐng)求,并且自己仍然可以繼續(xù)接收數(shù)據(jù)。
- 服務(wù)器 -> 客戶端:ACK = 1, seq = B, ack = A + 1
服務(wù)器確認(rèn)客戶端的連接關(guān)閉請(qǐng)求,并且告知客戶端自己準(zhǔn)備好關(guān)閉連接。
-
第三次揮手:服務(wù)器發(fā)送FIN包,表示它已經(jīng)完成數(shù)據(jù)的發(fā)送,也準(zhǔn)備關(guān)閉連接。
- 服務(wù)器 -> 客戶端:FIN = 1, seq = C
服務(wù)器告訴客戶端自己已經(jīng)沒有數(shù)據(jù)發(fā)送了,準(zhǔn)備關(guān)閉連接。
-
第四次揮手:客戶端收到服務(wù)器的FIN包后,發(fā)送ACK包,確認(rèn)收到服務(wù)器的關(guān)閉請(qǐng)求,完成連接的斷開。
- 客戶端 -> 服務(wù)器:ACK = 1, seq = A + 1, ack = C + 1
客戶端確認(rèn)服務(wù)器的關(guān)閉請(qǐng)求,最后斷開連接。
至此,雙方的連接關(guān)閉完成。
三次握手和四次揮手的區(qū)別
- 三次握手用于連接的建立,四次揮手用于連接的斷開。
- 三次握手是為了確??蛻舳撕头?wù)器都準(zhǔn)備好開始數(shù)據(jù)傳輸,而四次揮手是為了確保數(shù)據(jù)傳輸完畢并且雙方都關(guān)閉連接。
- 在三次握手過程中,連接的狀態(tài)是全雙工的,雙方可以發(fā)送數(shù)據(jù)。而在四次揮手過程中,雖然雙方在不同的時(shí)間關(guān)閉連接,但都確保了數(shù)據(jù)可以可靠地傳輸完畢。
四次揮手什么時(shí)候斷開
- 如果使用?HTTP/1.1?或?HTTP/2,且啟用了長(zhǎng)連接(默認(rèn)情況下啟用),則 TCP 連接 只會(huì)建立一次。它只會(huì)在第一次請(qǐng)求時(shí)建立一次,后續(xù)請(qǐng)求會(huì)復(fù)用該連接,直到超時(shí)或主動(dòng)關(guān)閉連接。
- 如果使用?HTTP/1.0?且沒有啟用長(zhǎng)連接,則每次請(qǐng)求會(huì)建立一個(gè)新的 TCP 連接。