TCP 协议的三次握手、四次分手
詳細(xì)描述了 TCP 協(xié)議的連接和關(guān)閉的整個(gè)過程。解釋了為什么 TCP 協(xié)議是面向連接的、可靠的數(shù)據(jù)傳輸協(xié)議。
TCP
在互聯(lián)網(wǎng)上之間的通信交流,一般是基于 TCP (Transmission Control Protocol,傳輸控制協(xié)議) 或者 UDP (User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議) 。兩者的一個(gè)重要區(qū)別是,TCP 是面向連接提供端到端可靠的數(shù)據(jù)流(flow of data)。
“面向連接”就是在正式通信前必須要與對(duì)方建立起連接。比如你給別人打電話,必須等線路接通了、對(duì)方拿起話筒才能相互通話。
三次握手
TCP 是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè) TCP 連接必須要經(jīng)過三次“握手”才能建立起來,簡(jiǎn)單的講就是:
三次“握手”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對(duì)話”之后,主機(jī) A 才向主機(jī) B 正式發(fā)送數(shù)據(jù)。
四次分手
由于 TCP 連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這個(gè)原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè) FIN 來終止這個(gè)方向的連接。收到一個(gè) FIN 只意味著這一方向上沒有數(shù)據(jù)流動(dòng),一個(gè) TCP 連接在收到一個(gè) FIN 后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。
TCP 采用四次分手關(guān)閉連接如圖2所示。
為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?
這是因?yàn)榉?wù)端的 LISTEN 狀態(tài)下的 SOCKET 當(dāng)收到 SYN 報(bào)文的建連請(qǐng)求后,它可以把 ACK 和 SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一個(gè)報(bào)文里來發(fā)送。但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的 FIN 報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可以未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送 FIN 報(bào)文給對(duì)方來表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的 ACK 報(bào)文和 FIN 報(bào)文多數(shù)情況下都是分開發(fā)送的。 【收到2個(gè)“好的”才算完成。大家好才是真的好】
為什么 TIME_WAIT 狀態(tài)還需要等 2MSL 后才能返回到 CLOSED 狀態(tài)?
這是因?yàn)殡m然雙方都同意關(guān)閉連接了,而且握手的4個(gè)報(bào)文也都協(xié)調(diào)和發(fā)送完畢,按理可以直接回到 CLOSED 狀態(tài)(就好比從 SYN_SEND 狀態(tài)到 ESTABLISH 狀態(tài)那樣);但是因?yàn)槲覀儽仨氁傧刖W(wǎng)絡(luò)是不可靠的,你無法保證你最后發(fā)送的ACK報(bào)文會(huì)一定被對(duì)方收到,因此對(duì)方處于 LAST_ACK 狀態(tài)下的 SOCKET 可能會(huì)因?yàn)槌瑫r(shí)未收到 ACK 報(bào)文,而重發(fā) FIN 報(bào)文,所以這個(gè) TIME_WAIT 狀態(tài)的作用就是用來重發(fā)可能丟失的 ACK 報(bào)文
控制信息字段
- SYN: 同步序列編號(hào)(Synchronize Sequence Numbers)
- ACK: 確認(rèn)字段
- FIN: 發(fā)送方已經(jīng)傳完數(shù)據(jù)
- PSH: 推送功能
- RST: 重置連接
- URG: 緊急指針
總結(jié)
以上是生活随笔為你收集整理的TCP 协议的三次握手、四次分手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到眼镜坏了怎么回事
- 下一篇: 您不能在64-位可执行文件上设置DEP属