TCP三次握手其實(shí),網(wǎng)絡(luò)上的傳輸是沒(méi)有連接的, TCP 是一樣的 TCP 所謂的 “連接”,其實(shí)只不過(guò)是在通信的雙方維護(hù)一個(gè)“連接狀態(tài)”,讓它看上去好像有連接一樣 所以, TCP 的狀態(tài)變換是非常重要的 。
TCP 連接的建立可以簡(jiǎn)單地稱為三次握手,而連接的中止則可以稱為四次揮手。
建立連接 TCP/IP 協(xié)議中, TCP 協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。
第一次握手:建立連接時(shí),客戶端發(fā)送 SYN 包到服務(wù)器,并進(jìn)入 SYN_SEND 狀態(tài),等待服務(wù)器確認(rèn)。
第二次握手:服務(wù)器收到 SYN 包,必須確認(rèn)客戶的 SYN ,同時(shí)自己也發(fā)送一個(gè) SYN 包,即 SYN+ACK 包,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài)。
第三次握手 :客戶端收到服務(wù)器的 SYN + ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入 ESTABLISHE 態(tài)。
完成 三次握手,客戶端與服務(wù)器開(kāi)始傳送數(shù)據(jù),也就是 ESTABLISHED 狀態(tài)。
TCP四次揮手
TCP的連接斷開(kāi)
TCP 一個(gè)特別的概念叫作半關(guān)閉,這個(gè)概念是說(shuō), TCP 的連接是全雙工(可以同時(shí)發(fā)送和接收)連接,因此在關(guān)閉連接的時(shí)候,必須關(guān)閉傳和送兩個(gè)方向上的連接。
客戶機(jī)給服務(wù)器 FIN 的 TCP 報(bào)文,然后服務(wù)器返回給客戶端一個(gè)確認(rèn) ACK 報(bào)文,并且發(fā)送一個(gè)FIN 報(bào)文,當(dāng)客戶機(jī)回復(fù) ACK 報(bào)文后( 四次握手),連接就結(jié)束了。
在建立連接的時(shí)候,通信的雙方要互相確認(rèn)對(duì)方的最大報(bào)文長(zhǎng)度( MSS ),以便通信。
一般這個(gè) SYN 長(zhǎng)度是 MTU 減去固定 IP 首部和 TCP 首部長(zhǎng)度。對(duì)于一個(gè)以太網(wǎng),一般可以達(dá) 1460 Byte 。當(dāng)然如果對(duì)于非本地的 IP ,這個(gè) MSS 可能就只有 536 Byte ,而且,如果中間的傳輸網(wǎng)絡(luò)的 MSS 更加的小的話,這個(gè)值還會(huì)變得更小。
為什么建連接要三次握手,斷連接需要四次揮手?
對(duì)于建連接的三次握手,主要是要初始化 Sequence Number 的初始值。通信的雙方要互相通知對(duì)方自己的初始化的 Sequence Numbe,所以叫 SYN 。
這個(gè)號(hào)要作為以后的數(shù)據(jù)通信的序號(hào),以保證應(yīng)用層接收到的數(shù)據(jù)不會(huì)因?yàn)榫W(wǎng)絡(luò)上的傳輸問(wèn)題而亂序( TCP 會(huì)用這個(gè)序號(hào)來(lái)拼接數(shù)據(jù))。
對(duì)于四次揮手,其實(shí)仔細(xì)看則是兩次,因?yàn)?TCP 是全雙工的,所以,發(fā)送方和接收方都需要 FIN 和 ACK。
只不過(guò),有一方是被動(dòng)的,所以看上去就成了所謂的四次揮手 。如果兩邊同時(shí)斷連接,那就會(huì)就進(jìn)入到 CLOSING 狀態(tài),接著就是TIME_WAIT 狀態(tài)。
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9793瀏覽量
87956 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7815瀏覽量
90933 -
TCP
+關(guān)注
關(guān)注
8文章
1402瀏覽量
81033 -
客戶端
+關(guān)注
關(guān)注
1文章
301瀏覽量
17091
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論