日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TCP 协议的三次握手、四次分手

發(fā)布時(shí)間:2023/11/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP 协议的三次握手、四次分手 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

詳細(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í),客戶端 A 發(fā)送 SYN 包(SYN=j)到服務(wù)器 B,并進(jìn)入 SYN_SEND狀態(tài),等待服務(wù)器 B 確認(rèn)。 【A 向 B 請(qǐng)求連接:“我想給你發(fā)數(shù)據(jù),可以嗎?”】
  • 服務(wù)器 B 收到 SYN 包,必須確認(rèn)客戶端 A 的 SYN(ACK=j+1),同時(shí)自己也發(fā)送一個(gè) SYN 包(SYN=k),即 SYN+ACK 包,此時(shí)服務(wù)器B進(jìn)入SYN_RECV 狀態(tài)。 【B 回應(yīng) A:“好的,你來吧”】
  • 客戶端 A 收到服務(wù)器 B 的 SYN+ACK 包,向服務(wù)器 B 發(fā)送確認(rèn)包 ACK(ACK=k+1),此包發(fā)送完畢,客戶端 A 和服務(wù)器 B 進(jìn)入 ESTABLISHED 狀態(tài),完成三次握手。 【A 回應(yīng) B:“好的,我來也,你接著吧!”】
  • 三次“握手”的目的是使數(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)閉。

  • 客戶端 A 發(fā)送一個(gè) FIN 給服務(wù)器 B,用來關(guān)閉客戶端 A 到服務(wù)器 B 的數(shù)據(jù)傳送。【A 對(duì) B 說:“我傳完了”】
  • 服務(wù)器 B 收到這個(gè) FIN,它發(fā)回一個(gè) ACK,確認(rèn)序號(hào)為收到的序號(hào)加1(報(bào)文段5)。和 SYN 一樣,一個(gè) FIN 將占用一個(gè)序號(hào)。 【B 回應(yīng) A:“好的”】
  • 服務(wù)器 B 關(guān)閉與客戶端 A 的連接,發(fā)送一個(gè) FIN 給客戶端 A。 【B 對(duì) A 說:“我也傳完了”】
  • 客戶端 A 發(fā)回 ACK 報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。 【A回應(yīng)B:“好的,我走了”】
  • 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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。