日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
6張動(dòng)態(tài)圖輕松學(xué)習(xí)TCP三次握手和四次揮手

本篇嘗試使用動(dòng)畫(huà)來(lái)對(duì)這個(gè)知識(shí)點(diǎn)進(jìn)行講解,期望讀者們可以更加簡(jiǎn)單的理解 TCP 交互的本質(zhì)。

創(chuàng)新互聯(lián)建站是專業(yè)的伊美網(wǎng)站建設(shè)公司,伊美接單;提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行伊美網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

TCP 三次握手

TCP 三次握手就好比兩個(gè)人在街上隔著 50 米看見(jiàn)了對(duì)方,但是因?yàn)殪F霾等原因不能 100% 確認(rèn),所以要通過(guò)招手的方式相互確定對(duì)方是否認(rèn)識(shí)自己。

因動(dòng)圖過(guò)大,查看動(dòng)圖,請(qǐng)點(diǎn)擊此處

張三首先向李四招手(syn),李四看到張三向自己招手后,向?qū)Ψ近c(diǎn)了點(diǎn)頭擠出了一個(gè)微笑(ack)。

張三看到李四微笑后確認(rèn)了李四成功辨認(rèn)出了自己(進(jìn)入 estalished 狀態(tài))。

但是李四還有點(diǎn)狐疑,向四周看了一看,有沒(méi)有可能張三是在看別人呢,他也需要確認(rèn)一下。

所以李四也向張三招了招手(syn),張三看到李四向自己招手后知道對(duì)方是在尋求自己的確認(rèn)。

于是也點(diǎn)了點(diǎn)頭擠出了微笑(ack),李四看到對(duì)方的微笑后確認(rèn)了張三就是在向自己打招呼(進(jìn)入 established 狀態(tài))。

于是兩人加快步伐,走到了一起,相互擁抱。

因動(dòng)圖過(guò)大,查看動(dòng)圖,請(qǐng)點(diǎn)擊此處

我們看到這個(gè)過(guò)程中一共是如下四個(gè)動(dòng)作:

  • 張三招手
  • 李四點(diǎn)頭微笑
  • 李四招手
  • 張三點(diǎn)頭微笑

其中李四連續(xù)進(jìn)行了 2 個(gè)動(dòng)作,先是點(diǎn)頭微笑(回復(fù)對(duì)方),然后再次招手(尋求確認(rèn)),實(shí)際上可以將這兩個(gè)動(dòng)作合一,招手的同時(shí)點(diǎn)頭和微笑(syn+ack)。

于是四個(gè)動(dòng)作就簡(jiǎn)化成了三個(gè)動(dòng)作,張三招手→李四點(diǎn)頭微笑并招手→張三點(diǎn)頭微笑。這就是三次握手的本質(zhì),中間的一次動(dòng)作是兩個(gè)動(dòng)作的合并。

我們看到有兩個(gè)中間狀態(tài),syn_sent 和 syn_rcvd,這兩個(gè)狀態(tài)叫做「半打開(kāi)」?fàn)顟B(tài),就是向?qū)Ψ秸惺至?,但是還沒(méi)來(lái)得及看到對(duì)方的點(diǎn)頭微笑。

syn_sent 是主動(dòng)打開(kāi)方的「半打開(kāi)」?fàn)顟B(tài),syn_rcvd 是被動(dòng)打開(kāi)方的「半打開(kāi)」?fàn)顟B(tài)??蛻舳耸侵鲃?dòng)打開(kāi)方,服務(wù)器是被動(dòng)打開(kāi)方。

 
 
 
 
  1. syn_sent:syn package has been sent  
  2. syn_rcvd:syn package has been received 

TCP 數(shù)據(jù)傳輸

TCP 數(shù)據(jù)傳輸就是兩個(gè)人隔空對(duì)話,差了一點(diǎn)距離,所以需要對(duì)方反復(fù)確認(rèn)聽(tīng)見(jiàn)了自己的話。

因動(dòng)圖過(guò)大,查看動(dòng)圖,請(qǐng)點(diǎn)擊此處

張三喊了一句話(data),李四聽(tīng)見(jiàn)了之后要向張三回復(fù)自己聽(tīng)見(jiàn)了(ack)。

如果張三喊了一句,半天沒(méi)聽(tīng)到李四回復(fù),張三就認(rèn)為自己的話被大風(fēng)吹走了,李四沒(méi)聽(tīng)見(jiàn),所以需要重新喊話,這就是 TCP 重傳。

也有可能是李四聽(tīng)到了張三的話,但是李四向張三的回復(fù)被大風(fēng)吹走了,以至于張三沒(méi)聽(tīng)見(jiàn)李四的回復(fù)。

張三并不能判斷究竟是自己的話被大風(fēng)吹走了還是李四的回復(fù)被大風(fēng)吹走了,張三也不用管,重傳一下就是。

既然會(huì)重傳,李四就有可能同一句話聽(tīng)見(jiàn)了兩次,這就是「去重」?!钢貍鳌购汀溉ブ亍构ぷ髟诓僮飨到y(tǒng)的網(wǎng)絡(luò)內(nèi)核模塊都已經(jīng)幫我們處理好了,用戶層是不用關(guān)心的。

張三可以向李四喊話,同樣李四也可以向張三喊話,因?yàn)?TCP 鏈接是「雙工的」,雙方都可以主動(dòng)發(fā)起數(shù)據(jù)傳輸。

不過(guò)無(wú)論是哪方喊話,都需要收到對(duì)方的確認(rèn)才能認(rèn)為對(duì)方收到了自己的喊話。

張三可能是個(gè)高射炮,一連說(shuō)了八句話,這時(shí)候李四可以不用一句一句回復(fù),而是連續(xù)聽(tīng)了這八句話之后,一起向?qū)Ψ交貜?fù)說(shuō)前面你說(shuō)的八句話我都聽(tīng)見(jiàn)了,這就是批量 ACK。

但是張三也不能一次性說(shuō)太多話,李四的腦子短時(shí)間可能無(wú)法消化太多,兩人之間需要有協(xié)商好的合適的發(fā)送和接受速率,這個(gè)就是「TCP 窗口大小」。

網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)交互同人類之間的對(duì)話還要復(fù)雜一些,它存在數(shù)據(jù)包亂序的現(xiàn)象。

同一個(gè)來(lái)源發(fā)出來(lái)的不同數(shù)據(jù)包在「網(wǎng)際路由」上可能會(huì)走過(guò)不同的路徑,最終達(dá)到同一個(gè)地方時(shí),順序就不一樣了。

操作系統(tǒng)的網(wǎng)絡(luò)內(nèi)核模塊會(huì)負(fù)責(zé)對(duì)數(shù)據(jù)包進(jìn)行排序,到用戶層時(shí)順序就已經(jīng)完全一致了。

TCP 四次揮手

TCP 斷開(kāi)鏈接的過(guò)程和建立鏈接的過(guò)程比較類似,只不過(guò)中間的兩步并不總是會(huì)合成一步走。

所以它分成了如下 4 個(gè)動(dòng)作:

  • 張三揮手(fin)
  • 李四傷感地微笑(ack)
  • 李四揮手(fin)
  • 張三傷感地微笑(ack)

因動(dòng)圖過(guò)大,查看動(dòng)圖,請(qǐng)點(diǎn)擊此處

之所以中間的兩個(gè)動(dòng)作沒(méi)有合并,是因?yàn)?TCP 存在「半關(guān)閉」?fàn)顟B(tài),也就是單向關(guān)閉。

張三已經(jīng)揮了手,可是人還沒(méi)有走,只是不再說(shuō)話,但是耳朵還是可以繼續(xù)聽(tīng),李四呢繼續(xù)喊話。

等待李四累了,也不再說(shuō)話了,朝張三揮了揮手,張三傷感地微笑了一下,才徹底結(jié)束了。

因動(dòng)圖過(guò)大,查看動(dòng)圖,請(qǐng)點(diǎn)擊此處

上面有一個(gè)非常特殊的狀態(tài) time_wait,它是主動(dòng)關(guān)閉的一方在回復(fù)完對(duì)方的揮手后進(jìn)入的一個(gè)長(zhǎng)期狀態(tài)。

這個(gè)狀態(tài)標(biāo)準(zhǔn)的持續(xù)時(shí)間是 4 分鐘,4 分鐘后才會(huì)進(jìn)入到 Closed 狀態(tài),釋放套接字資源。不過(guò)在具體實(shí)現(xiàn)上這個(gè)時(shí)間是可以調(diào)整的。

它就好比主動(dòng)分手方要承擔(dān)的責(zé)任,是你提出的要分手,你得付出代價(jià)。這個(gè)后果就是持續(xù) 4 分鐘的 time_wait 狀態(tài),不能釋放套接字資源(端口),就好比守寡期,這段時(shí)間內(nèi)套接字資源(端口)不得回收利用。

它的作用是重傳***一個(gè) ack 報(bào)文,確保對(duì)方可以收到。因?yàn)槿绻麑?duì)方?jīng)]有收到 ack 的話,會(huì)重傳 fin 報(bào)文,處于 time_wait 狀態(tài)的套接字會(huì)立即向?qū)Ψ街匕l(fā) ack 報(bào)文。

同時(shí)在這段時(shí)間內(nèi),該鏈接在對(duì)話期間于網(wǎng)際路由上產(chǎn)生的殘留報(bào)文(因?yàn)槁窂竭^(guò)于崎嶇,數(shù)據(jù)報(bào)文走的時(shí)間太長(zhǎng),重傳的報(bào)文都收到了,原始報(bào)文還在路上)傳過(guò)來(lái)時(shí),都會(huì)被立即丟棄掉。

4 分鐘的時(shí)間足以使得這些殘留報(bào)文徹底消逝。不然,當(dāng)新的端口被重復(fù)利用時(shí),這些殘留報(bào)文可能會(huì)干擾新的鏈接。

4 分鐘就是 2 個(gè) MSL,每個(gè) MSL 是 2 分鐘。MSL 就是 Maximum Segment Lifetime——最長(zhǎng)報(bào)文壽命。

這個(gè)時(shí)間是由官方 RFC 協(xié)議規(guī)定的。至于為什么是 2 個(gè) MSL 而不是 1 個(gè) MSL,我還沒(méi)有看到一個(gè)非常滿意的解釋。

四次揮手也并不總是四次揮手,中間的兩個(gè)動(dòng)作有時(shí)候是可以合并一起進(jìn)行的。

這個(gè)時(shí)候就成了三次揮手,主動(dòng)關(guān)閉方就會(huì)從 fin_wait_1 狀態(tài)直接進(jìn)入到 time_wait 狀態(tài),跳過(guò)了 fin_wait_2 狀態(tài)。

總結(jié)

TCP 狀態(tài)轉(zhuǎn)換是一個(gè)非常復(fù)雜的過(guò)程,本文僅對(duì)一些簡(jiǎn)單的基礎(chǔ)知識(shí)點(diǎn)進(jìn)行了類比講解。

關(guān)于 TCP 的更多知識(shí)還需要讀者去搜尋相關(guān)技術(shù)文章進(jìn)入深入學(xué)習(xí)。如果讀者對(duì) TCP 的基礎(chǔ)知識(shí)掌握得比較牢固,高級(jí)的知識(shí)理解起來(lái)就不會(huì)太過(guò)于吃力。

錢(qián)文品(老錢(qián)),互聯(lián)網(wǎng)分布式高并發(fā)技術(shù)十年老兵,目前任掌閱服務(wù)端技術(shù)專家。熟練使用 Java、Python、Golang 等多種計(jì)算機(jī)語(yǔ)言,開(kāi)發(fā)過(guò)游戲,制作過(guò)網(wǎng)站,寫(xiě)過(guò)消息推送系統(tǒng)和 MySQL 中間件,實(shí)現(xiàn)過(guò)開(kāi)源的 ORM 框架、Web 框架、RPC 框架等。運(yùn)營(yíng)個(gè)人公眾號(hào)碼洞(ID:codehole)。


網(wǎng)頁(yè)題目:6張動(dòng)態(tài)圖輕松學(xué)習(xí)TCP三次握手和四次揮手
標(biāo)題鏈接:http://www.dlmjj.cn/article/dhoeijh.html