記、TCB服務(wù)邏輯與TCP斷開(kāi)連接流程介紹)
文章目錄一、TCP雙向分流里的FIN1.FIN信息1.1放置FIN1.1.1處前預(yù)剩發(fā)1.1.2處后被遺漏1.2發(fā)送FIN1.2.1剩余已發(fā)完1.2.2獨(dú)立仍接收1.3接收FIN1.3.1現(xiàn)在已收完1.3.2獨(dú)立仍在發(fā)二、數(shù)據(jù)的需求與TCB的服務(wù)1.數(shù)據(jù)需求TCB的發(fā)收服務(wù)1.1需本端TCB可靠發(fā)送1.2需對(duì)端TCB持續(xù)接收2.TCB服務(wù)數(shù)據(jù)的發(fā)收到達(dá)2.1正常完成2.2異常續(xù)/斷3.數(shù)據(jù)需求與到達(dá)服務(wù)之間的關(guān)系三、TCB對(duì)關(guān)閉的判斷處理1.正常關(guān)閉判理2.異常關(guān)閉判理2.1傳輸層2.1.1被動(dòng)判斷2.1.1.1[只檢ACK超時(shí)異常]2.1.1.1.1ACK有超時(shí)異常檢測(cè)可靠傳輸有重傳的截止2.1.1.2(心跳包補(bǔ)成全局檢測(cè))2.2應(yīng)用層2.2.1主動(dòng)判斷2.2.2調(diào)整盡成2.2.3干預(yù)調(diào)改2.1.2直接關(guān)閉3.具體異常情況的判理過(guò)程(例)3.1我方主機(jī)掉電3.2我方延遲調(diào)用close3.2.1危害3.2.2判理3.2.2.1傳輸層無(wú)能3.2.2.2僅靠應(yīng)用層四、情況的判斷處理1.視角受限1.1傳輸層的被動(dòng)判斷1.2應(yīng)用層的主動(dòng)判斷2.異常的種類時(shí)機(jī)2.1可能不定異常的范圍種類2.2可能不定異常的出現(xiàn)時(shí)機(jī)3.處理法則3.1無(wú)法判斷,囊括處理的事與愿及(例)3.1.1對(duì)方發(fā)送出現(xiàn)問(wèn)題時(shí)3.1.2僅剩收對(duì)方ACK時(shí)通信道路出現(xiàn)問(wèn)題3.1.3只是最后一個(gè)FIN沒(méi)收到3.1.4ACK傳輸延時(shí)的信息差五、四次揮手的順序與揮完1.先后揮順序1.1先揮先斷1.2不同進(jìn)序2.揮不揮得完2.1揮得完2.1.1正常完整四次揮完的過(guò)程2.2揮不完一、TCP雙向分流里的FINTCP連接是全雙工的一條連接里有2條發(fā)送分流:(每方發(fā)向另方流)*2發(fā)送分流與接收分流是共同的一條,A的發(fā)送分流B的接收分流、B的發(fā)送分流A的接收分流4個(gè)緩沖區(qū):(每方接收發(fā)送區(qū))*2發(fā)送分流的發(fā)送通道可以關(guān)閉接收分流的接收通道永不關(guān)閉,只能劃結(jié)尾1.FIN信息每一方的FIN都是排在本方所有發(fā)送數(shù)據(jù)末尾的最后一個(gè)序號(hào)的報(bào)文FIN從己方發(fā)送緩沖區(qū)發(fā)到發(fā)送分流時(shí)劃發(fā)送結(jié)尾傳到對(duì)方接收緩沖區(qū)時(shí)在接收分流劃接收結(jié)尾此端的所有發(fā)送數(shù)據(jù)就是全部地到達(dá)對(duì)方了1.1放置FIN調(diào)用close放FIN到傳輸層的發(fā)送緩沖區(qū)后1.1.1處前預(yù)剩發(fā)放FIN前已放的預(yù)剩發(fā)送數(shù)據(jù),包括還在發(fā)送緩沖區(qū)未發(fā)與已經(jīng)發(fā)在發(fā)送流中未達(dá)的數(shù)據(jù)后面就是繼續(xù)按TCP可靠機(jī)制傳輸?shù)?.1.2處后被遺漏放FIN后,當(dāng)時(shí)還放在應(yīng)用層用戶態(tài)緩沖區(qū)的數(shù)據(jù),即使后面接著把它們放到發(fā)送緩沖區(qū),也已經(jīng)固定會(huì)排在FIN后了就沒(méi)劃為此端的預(yù)剩發(fā)送數(shù)據(jù)后面我方的發(fā)送通道關(guān)閉后才運(yùn)到通道口前,就不能發(fā)出、就算發(fā)出去了,對(duì)方的接收通道關(guān)閉后,最多才送到通道口前,就不能收到就是定為已被遺漏的數(shù)據(jù)了1.2發(fā)送FIN1.2.1剩余已發(fā)完之前我方不想發(fā)數(shù)據(jù)了就調(diào)用close后,就造出FIN放在發(fā)送緩沖區(qū),就劃定了它前面的都是此端的預(yù)剩數(shù)據(jù)把FIN前面的發(fā)送緩沖區(qū)剩余數(shù)據(jù)發(fā)到流完后,FIN也就發(fā)到了流里,就在發(fā)送分流末尾放置劃出了結(jié)束標(biāo)記,就關(guān)閉發(fā)送通道1.2.2獨(dú)立仍接收仍然接收對(duì)方發(fā)送分流發(fā)來(lái)的數(shù)據(jù),直到收到對(duì)方的FIN發(fā)送分流終點(diǎn)標(biāo)記,也劃接收結(jié)尾地收完了1.3接收FIN1.3.1現(xiàn)在已收完接收緩沖區(qū)從接收分流收到FIN終點(diǎn)標(biāo)記,就劃出了接收分流的結(jié)尾,就知道傳輸層接收緩沖區(qū)已經(jīng)收完了所有對(duì)方發(fā)來(lái)的數(shù)據(jù)了后面應(yīng)用層往傳輸層的接收緩沖區(qū)取完,到FIN終點(diǎn)標(biāo)記后再取,應(yīng)用層就會(huì)得到EOF,就知道取完了接收緩沖區(qū)1.3.2獨(dú)立仍在發(fā)沒(méi)想結(jié)束發(fā)送而調(diào)用close前,發(fā)送緩沖區(qū)就不放FIN也沒(méi)劃預(yù)剩數(shù)據(jù),發(fā)送通道就會(huì)一直開(kāi)著等到后面自己不想發(fā)了調(diào)用close再放FIN劃了預(yù)剩數(shù)據(jù)發(fā)完發(fā)送緩沖區(qū)的FIN剩余數(shù)據(jù),才關(guān)閉了發(fā)送通道二、數(shù)據(jù)的需求與TCB的服務(wù)1.數(shù)據(jù)需求TCB的發(fā)收服務(wù)每端所有發(fā)送數(shù)據(jù)即單FIN,到達(dá)對(duì)方前 需要 本端對(duì)端的雙TCB分別的發(fā)送,接收的服務(wù)1.1需本端TCB可靠發(fā)送發(fā)送FIN,就把發(fā)送緩沖區(qū)里的預(yù)剩數(shù)據(jù)全部發(fā)到流上了,隨即關(guān)閉發(fā)送流的發(fā)送通道還在發(fā)送分流上還未到達(dá)對(duì)方接收緩沖區(qū)的路上所有剩余的發(fā)送數(shù)據(jù)需要 我方的TCB開(kāi)著保持發(fā)送服務(wù),繼續(xù)一路重傳保證它們的可靠傳輸,直到全部傳到對(duì)方、1.2需對(duì)端TCB持續(xù)接收需要 對(duì)方的TCB開(kāi)著保持接收服務(wù),持續(xù)到我方的發(fā)送數(shù)據(jù)所有都接收完為止2.TCB服務(wù)數(shù)據(jù)的發(fā)收到達(dá)每端TCB要服務(wù) 本端對(duì)端的所有發(fā)送數(shù)據(jù)即雙FIN分別的發(fā)送,接收的到達(dá)服務(wù) 我方所有數(shù)據(jù)即FIN到達(dá)對(duì)方的可靠發(fā)送對(duì)方所有數(shù)據(jù)即FIN到達(dá)我方的狀態(tài)接收2.1正常完成收到FIN報(bào)文就是確認(rèn)收完對(duì)方所有發(fā)送數(shù)據(jù)的標(biāo)志收到FIN的ACK報(bào)文就是確認(rèn)對(duì)方收完我方所有發(fā)送數(shù)據(jù)的標(biāo)志收到一FIN與另FIN的ACK就是確認(rèn)雙FIN到達(dá) 完成服務(wù)2.2異常續(xù)/斷超時(shí)收不到ACK判斷有異常后靠應(yīng)用層的調(diào)整上限與傳輸層的關(guān)閉下限 繼續(xù)/中斷服務(wù)3.數(shù)據(jù)需求與到達(dá)服務(wù)之間的關(guān)系一個(gè)TCB完成一向數(shù)據(jù)的單個(gè)發(fā)送/接收到達(dá)服務(wù)-同時(shí)另個(gè)TCB的此向數(shù)據(jù)對(duì)應(yīng)的接收/發(fā)送服務(wù)也完成了-同時(shí)此向數(shù)據(jù)的發(fā)送與接收需求都已完成了三、TCB對(duì)關(guān)閉的判斷處理1.正常關(guān)閉判理連續(xù)正常限時(shí)內(nèi)地收完 對(duì)方發(fā)送數(shù)據(jù)與我方發(fā)送數(shù)據(jù)的ACK回復(fù)就能被動(dòng)判斷雙向數(shù)據(jù)都已無(wú)需求,已到達(dá)服務(wù)完就能確定不漏數(shù)據(jù)的需求到達(dá)服務(wù) 地關(guān)閉此方的TCB2.異常關(guān)閉判理2.1傳輸層2.1.1被動(dòng)判斷階段里有超時(shí)沒(méi)收到 發(fā)送數(shù)據(jù)(沒(méi)實(shí)際數(shù)據(jù)發(fā)也有固定的心跳報(bào)文保障有發(fā))的ACK回復(fù)[階段里超時(shí)收不到發(fā)送數(shù)據(jù),可能是對(duì)方主動(dòng)發(fā)數(shù)據(jù)選擇暫時(shí)歇會(huì)了,不能被動(dòng)判斷為異常,但也可以應(yīng)用層干預(yù)寫(xiě)成如果超時(shí)太久而主動(dòng)判斷為異常;但是ACK是對(duì)方被動(dòng)收到數(shù)據(jù)后得立即回的,如果階段里超時(shí)收不到ACK,那就能被動(dòng)判斷為異常]就被動(dòng)判斷出現(xiàn)了異常,并通常只能判排在范圍中2.1.1.1[只檢ACK超時(shí)異常]默認(rèn)的傳輸層TCB對(duì)每階段的發(fā)送數(shù)據(jù)沒(méi)有超時(shí)的時(shí)間限制只對(duì)每階段的接收ACK數(shù)據(jù)有超時(shí)的時(shí)間限制,超時(shí)等待收不到后就關(guān)閉TCB對(duì)比發(fā)送分流的發(fā)送通道可以關(guān)閉接收分流的接收通道永不關(guān)閉,只能劃結(jié)尾2.1.1.1.1ACK有超時(shí)異常檢測(cè)可靠傳輸有重傳的截止收到我方FIN的ACK前對(duì)方即使收到了我方的FIN知道我方的發(fā)送數(shù)據(jù)發(fā)完,發(fā)送通道關(guān)閉了、他收完了我方的發(fā)送數(shù)據(jù),他劃出了我方發(fā)送分流的接收結(jié)尾但是在我方收到,確認(rèn)FIN送到對(duì)方的ACK前還是一直認(rèn)為對(duì)方的接收通道沒(méi)有劃結(jié)尾,仍在接收數(shù)據(jù)就還在進(jìn)行對(duì)發(fā)送了的數(shù)據(jù),計(jì)時(shí)等收,對(duì)方接收后會(huì)被動(dòng)返A(chǔ)CK,多次超時(shí)重傳還收不到,而判斷有異常的檢測(cè)把就算對(duì)方能收到FIN后,也可能存在的,返回ACK時(shí)出現(xiàn)的對(duì)方發(fā)送/我方接收/通信道路 也納入檢測(cè)使得ACK異常檢測(cè) 全程完整仍在進(jìn)行,我方?jīng)]收到ACK的發(fā)送數(shù)據(jù)的重傳即使對(duì)方已經(jīng)收到FIN,收完我方所有的發(fā)送數(shù)據(jù),劃了接收通道結(jié)尾,只是ACK返回丟失,我方事實(shí)過(guò)頭的數(shù)據(jù)重傳造成了重復(fù)浪費(fèi)但是過(guò)頭地就能保障到,我方發(fā)送數(shù)據(jù)的到達(dá)完整2.1.1.2(心跳包補(bǔ)成全局檢測(cè))如果是我方發(fā)送出現(xiàn)異?;蛭曳綗o(wú)實(shí)際數(shù)據(jù)要發(fā)時(shí)心跳包的固定會(huì)發(fā)送 讓這段時(shí)間也是正常的,在計(jì)時(shí)收ACK,依舊能通過(guò)收ACK判斷是否有異常2.2應(yīng)用層應(yīng)用層用自己寫(xiě)的2.2.1主動(dòng)判斷能否主動(dòng)測(cè)查出其一異常并修復(fù)能否主動(dòng)判斷出雙向數(shù)據(jù)還有無(wú)需求,都已無(wú)到達(dá)服務(wù)完地2.2.2調(diào)整盡成在本應(yīng)用層,調(diào)整扶持繼續(xù)服務(wù)或盡力完成結(jié)束服務(wù)2.2.3干預(yù)調(diào)改往下傳輸層,干預(yù)調(diào)改TCB的應(yīng)對(duì)處理比如異常已測(cè)查出并修復(fù)TCB就繼續(xù)服務(wù)不去關(guān)閉了異常無(wú)法解決要關(guān)閉TCB時(shí)讓TCB在應(yīng)用層盡成服務(wù)完,它管的數(shù)據(jù)需求與到達(dá)服務(wù)后,再關(guān)閉讓TCB超時(shí)等待收不到ACK而關(guān)閉的時(shí)間,按實(shí)際情況與性能需求縮短一點(diǎn)覆蓋用應(yīng)用層自己實(shí)現(xiàn)快周期發(fā)的心跳包,選擇用更頻繁的報(bào)文消耗量換取更短時(shí)間的等待判斷性能2.1.2直接關(guān)閉傳輸層默認(rèn)已寫(xiě)用 不管知不知道,不管還有無(wú)漏數(shù)據(jù)到達(dá)需求 都直接關(guān)閉TCB可被應(yīng)用層干預(yù)地調(diào)改成其它的處理3.具體異常情況的判理過(guò)程(例)3.1我方主機(jī)掉電(1)我方的傳輸層沒(méi)有被動(dòng)判斷異常(2)我方的應(yīng)用層沒(méi)有主動(dòng)測(cè)查異常與判斷數(shù)據(jù)的需求到達(dá)服務(wù)、沒(méi)有調(diào)整與盡成地 服務(wù)被中斷、沒(méi)有向下干預(yù)調(diào)改 TCB的處理(3)我方的傳輸層TCB中斷地被關(guān)[1]對(duì)方的傳輸層超時(shí)收不到ACK,被動(dòng)判斷出有異常[2]對(duì)方的應(yīng)用層主動(dòng)測(cè)查異常與判斷數(shù)據(jù)的需求到達(dá)服務(wù)、調(diào)整無(wú)果后盡成地結(jié)束服務(wù)、向下干預(yù)調(diào)改TCB的處理[3]我方的傳輸層在盡成服務(wù)完后再異常關(guān)閉TCB3.2我方延遲調(diào)用close3.2.1危害調(diào)用close異?;蛲浾{(diào)用close 而延遲的時(shí)間會(huì)使本方多開(kāi)了一段,無(wú)發(fā)數(shù)據(jù)的發(fā)送通道開(kāi)啟,浪費(fèi)一段TCB的發(fā)送干耗維護(hù)會(huì)使對(duì)方多開(kāi)一段,無(wú)收數(shù)據(jù)的接收通道開(kāi)啟,浪費(fèi)一段TCB的接收干耗維護(hù)3.2.2判理延遲的這段時(shí)間里3.2.2.1傳輸層無(wú)能我方傳輸層對(duì)每階段發(fā)送數(shù)據(jù)(調(diào)用close發(fā)送FIN數(shù)據(jù)),本身沒(méi)有超時(shí)限制,不能被動(dòng)檢出異常不管 對(duì)方是否已發(fā)FIN發(fā)送通道關(guān)閉、FIN是否傳到我方使我方劃出接收結(jié)尾、收到我方返回的ACK而結(jié)束ACK超時(shí)異常的檢測(cè)我方始終還未發(fā)送FIN關(guān)閉發(fā)送通道、對(duì)方始終是還沒(méi)收到我方還未發(fā)的FIN,接收通道就仍沒(méi)劃結(jié)尾地在收、我方也還沒(méi)收到自己還未發(fā)的FIN的ACK而結(jié)束ACK的異常檢測(cè)因此我方還有數(shù)據(jù)發(fā)送過(guò)去,對(duì)方也還有收地會(huì)返A(chǔ)CK回來(lái)所以如果只是我方調(diào)用close出現(xiàn)異常,我方無(wú)法觸發(fā)ACK超時(shí)判斷到有異常對(duì)方即使在對(duì)方FIN還沒(méi)發(fā),對(duì)方發(fā)送通道沒(méi)關(guān)、我方?jīng)]收FIN沒(méi)劃接收通道、我方?jīng)]返A(chǔ)CK,對(duì)方?jīng)]收ACK而還有超時(shí)ACK的異常檢測(cè) 前對(duì)方發(fā)送數(shù)據(jù)過(guò)來(lái),我方接收通道還沒(méi)劃結(jié)尾,收了就會(huì)返A(chǔ)CK所以ACK無(wú)法超時(shí)而檢測(cè)出,只是我方調(diào)用close的異常一直到后面對(duì)方發(fā)了FIN并收到返回的ACK,結(jié)束超時(shí)ACK的異常檢測(cè)3.2.2.2僅靠應(yīng)用層所以close異常延遲的這段時(shí)間里對(duì)方與我方的傳輸層都無(wú)法被動(dòng)判斷出有異常而雙方干耗著維護(hù)這段延遲時(shí)間內(nèi)的TCB會(huì)累積這段延遲時(shí)間的CLOSED_WAIT此時(shí)就靠雙方的應(yīng)用層寫(xiě)有的,觀察到大量CLOSED_WAIT而主動(dòng)測(cè)查出,有調(diào)用close延遲的異常四、情況的判斷處理1.視角受限每方處在 相比上帝全局視角下的 單方受限且不同視角下每一方判斷的數(shù)據(jù)需求與到達(dá)服務(wù)與事實(shí)、與對(duì)方是獨(dú)立的,且能差異在無(wú)法判斷全局視角下在雙向FIN到達(dá)前的TCB關(guān)閉,都是異常關(guān)閉的單方視角下沒(méi)有判斷確認(rèn)到雙向FIN到達(dá)而視為的異常關(guān)閉實(shí)際上可能雙向FIN已到達(dá)的正常關(guān)閉1.1傳輸層的被動(dòng)判斷傳輸層原生已寫(xiě)好的被動(dòng)判斷異常的判排范圍小、判排出有異常后,在傳輸層是設(shè)計(jì)成保底的,直接去關(guān)閉TCB的,沒(méi)去寫(xiě)數(shù)據(jù)需求與到達(dá)服務(wù)的判斷(交給在應(yīng)用層進(jìn)一步處理寫(xiě)了)1.2應(yīng)用層的主動(dòng)判斷應(yīng)用層自己增去寫(xiě)的主動(dòng)判斷擴(kuò)增有測(cè)查異常的判排范圍、增有查用當(dāng)現(xiàn)情況地判斷,數(shù)據(jù)需求與到達(dá)服務(wù)2.異常的種類時(shí)機(jī)2.1可能不定異常的范圍種類收不到ACK的異常不定的范圍種類可以是對(duì)方發(fā)送出現(xiàn)問(wèn)題對(duì)方接收出現(xiàn)問(wèn)題我方發(fā)送出現(xiàn)問(wèn)題我方接收出現(xiàn)問(wèn)題通信道路出現(xiàn)問(wèn)題2.2可能不定異常的出現(xiàn)時(shí)機(jī)收不到ACK的異常不定的出現(xiàn)時(shí)機(jī)可以在完成哪個(gè)方向數(shù)據(jù)需求的前完成哪個(gè)方向數(shù)據(jù)需求的后完成哪個(gè)方向數(shù)據(jù)到達(dá)的前完成哪個(gè)方向數(shù)據(jù)到達(dá)的后完成哪個(gè)TCB服務(wù)的前完成哪個(gè)TCB服務(wù)的后3.處理法則來(lái)自我方,環(huán)境,對(duì)方的能判斷到精確情況的就針對(duì)處理僅判斷到范圍情況的就囊括處理3.1無(wú)法判斷,囊括處理的事與愿及(例)3.1.1對(duì)方發(fā)送出現(xiàn)問(wèn)題時(shí)如果是對(duì)方發(fā)送出現(xiàn)問(wèn)題,接收沒(méi)有問(wèn)題我方收不到ACK判斷異常,也無(wú)法修復(fù)就盡成把我方TCB的所有要發(fā)送數(shù)據(jù)與RST報(bào)文發(fā)完后,再異常關(guān)閉TCB我方可以判斷確認(rèn) 對(duì)方的發(fā)送數(shù)據(jù)沒(méi)有全到達(dá)我方,我方TCB沒(méi)有完成接收到達(dá)服務(wù)、對(duì)方的發(fā)送數(shù)據(jù)還有發(fā)送與接收需求雖然我方無(wú)法判斷確認(rèn) 我方的發(fā)送數(shù)據(jù)是否全部已經(jīng)到達(dá),我方TCB是否完成發(fā)送到達(dá)服務(wù)、我方的發(fā)送數(shù)據(jù)是否還有發(fā)送與接收需求但是如果出在對(duì)方發(fā)送出題問(wèn)題的這種異常情況下,囊括處理后的事實(shí)是 我方的所有發(fā)送數(shù)據(jù)與RST報(bào)文都已到達(dá)了對(duì)方,我方TCB完成了發(fā)送到達(dá)服務(wù)、我方的發(fā)送數(shù)據(jù)都已無(wú)發(fā)送與接收需求這樣我方的TCB的異常關(guān)閉,其中它管的也就只漏掉了對(duì)方發(fā)送數(shù)據(jù)的接收需求與接收到達(dá)服務(wù)3.1.2僅剩收對(duì)方ACK時(shí)通信道路出現(xiàn)問(wèn)題如果在對(duì)方已經(jīng)發(fā)完它方的所有發(fā)送數(shù)據(jù)并收完它們的ACK、收完我方所有的發(fā)送數(shù)據(jù)后,返回ACK時(shí)通信道路此時(shí)出現(xiàn)異常對(duì)方會(huì)已完成雙FIN送達(dá)地正常關(guān)閉它的TCB我方收不到ACK判斷異常我方里面可以判斷確認(rèn) 對(duì)方的發(fā)送數(shù)據(jù)已全部到達(dá)我方,我方TCB完成了接收到達(dá)服務(wù)、對(duì)方的發(fā)送數(shù)據(jù)已無(wú)發(fā)送與接收需求(我方返回的ACK是不知道對(duì)方有沒(méi)有收到,而無(wú)法知道在對(duì)方的視角下的對(duì)方的發(fā)送數(shù)據(jù)是否還有發(fā)送需求但那是在對(duì)方視角里的判斷,與我方視角里的對(duì)方發(fā)送數(shù)據(jù)已無(wú)發(fā)送需求的判斷是無(wú)關(guān)獨(dú)立的)我方無(wú)法判斷確認(rèn) 我方的發(fā)送數(shù)據(jù)是否已全部送達(dá)對(duì)方,我方TCB是否完成發(fā)送到達(dá)服務(wù)、我方的發(fā)送數(shù)據(jù)是否還有發(fā)送與接收需求地異常關(guān)閉TCB但如果是在對(duì)方收完所有數(shù)據(jù)返回ACK時(shí)出現(xiàn)的異常囊括處理后的事實(shí)是 我方的所有發(fā)送數(shù)據(jù)都已全部送達(dá),我方TCB也完成發(fā)送到達(dá)服務(wù)、我方的發(fā)送數(shù)據(jù)也都已無(wú)發(fā)送與接收需求這樣無(wú)法判斷確認(rèn)的看似異常的TCB關(guān)閉,實(shí)則上可能也是完成雙FIN的正常關(guān)閉3.1.3只是最后一個(gè)FIN沒(méi)收到如果我方收對(duì)方發(fā)送數(shù)據(jù)就只是最后一個(gè)FIN沒(méi)收到然后發(fā)送的數(shù)據(jù)出現(xiàn)超時(shí)ACK,傳輸層被動(dòng)判斷有異常應(yīng)用層主動(dòng)判斷數(shù)據(jù)需求與到達(dá)服務(wù)時(shí)對(duì)于里面的對(duì)方發(fā)送數(shù)據(jù),可以自己靈活寫(xiě)的主動(dòng)判斷為 此時(shí)對(duì)方所有的發(fā)送數(shù)據(jù)都已到達(dá),我方TCB完成了接收到達(dá)服務(wù)and對(duì)方TCB完成了發(fā)送到達(dá)服務(wù)、對(duì)方發(fā)送數(shù)據(jù)已無(wú)發(fā)送與接收需求 的實(shí)際事實(shí)3.1.4ACK傳輸延時(shí)的信息差我方發(fā)送FIN,一直到收到它的ACK前都無(wú)法判斷確認(rèn) 對(duì)方的接收通道是否已經(jīng)關(guān)閉而事實(shí)是 在我方發(fā)送的FIN到達(dá)對(duì)方時(shí),對(duì)方的接收通道就已經(jīng)關(guān)閉了還需要到后面ACK傳輸返回到時(shí),我方才已知道五、四次揮手的順序與揮完1.先后揮順序1.1先揮先斷雙方的close可以互不關(guān)聯(lián)地按各自節(jié)奏發(fā)先揮方的定義是FIN先達(dá)對(duì)方者為FIN1(先發(fā)FIN2的可能后到達(dá)對(duì)方,后發(fā)FIN1的可能先到達(dá)對(duì)方),會(huì)先完成單斷1、如果對(duì)方的FIN2較返回的ACK1先到達(dá)我方那么我方會(huì)先收到對(duì)方的FIN2最后等的是 先到達(dá)對(duì)方FIN1的ACK1與此同時(shí)后揮方會(huì)先收到更早到的FIN1最后等的是 后到達(dá)我方FIN2的ACK2所以相比后揮方最后收ACK2先揮方會(huì)更早收到最后ACK1先完成單揮2、如果對(duì)方的FIN2較返回的ACK1后到達(dá)我方(通常就是Socket.hasNext嵌套Socket.close判斷條件寫(xiě)法下,必須先收FIN1先返A(chǔ)CK1后,再進(jìn)入判斷里去執(zhí)行close后發(fā)FIN2,導(dǎo)致的)那么我方會(huì)先收到 先到達(dá)對(duì)方FIN1的ACK1最后等的是 后到達(dá)我方的FIN2與此同時(shí)后揮方會(huì)先收到更早到的FIN1最后等的是 后到達(dá)我方FIN2的ACK2所以先揮方會(huì)先收到最后的FIN2,先完成單揮接著后揮方再收到最后的,先揮方最后收到FIN2后返回的ACK2,后完成單揮1.2不同進(jìn)序四次揮手雙方有先有后地參與進(jìn)流程,雙方展開(kāi)的報(bào)文收發(fā)順序會(huì)不同導(dǎo)致先揮者在 收到對(duì)方FIN后,確認(rèn)到雙FIN送達(dá),正常關(guān)閉TCB后揮者在 收到回復(fù)ACK后,確認(rèn)到雙FIN送達(dá),正常關(guān)閉TCB2.揮不揮得完關(guān)閉TCB釋放連接狀態(tài)有兩種方式2.1揮得完正常,有序用FIN關(guān)閉完整四次地?fù)]完手每方都是 有作FIN劃定好預(yù)剩發(fā)送數(shù)據(jù)、確認(rèn)雙向數(shù)據(jù)都已無(wú)對(duì)已方TCB需求、確認(rèn)雙向數(shù)據(jù)FIN都已到達(dá)對(duì)方,完成己方TCB服務(wù)地 正常關(guān)閉TCB2.1.1正常完整四次揮完的過(guò)程能不超時(shí)收ACK異常地完整四次揮完,兩端正常地關(guān)閉TCB,釋放連接狀態(tài)的過(guò)程AESTABLISHEDBESTABLISHEDclose()↓FIN1發(fā)到流----------------FIN_WAIT_1我端的預(yù)剩發(fā)送數(shù)據(jù)已經(jīng)全部發(fā)到流里了我也就把我這端發(fā)送分流的發(fā)送通道關(guān)閉了收到FIN1確認(rèn)到對(duì)方的所有發(fā)送數(shù)據(jù)全部到達(dá)我方也就給接收分流劃上了接收結(jié)尾----------------回ACK1CLOSE_WAIT我端可能還沒(méi)調(diào)用close,FIN2可能還沒(méi)做也就還沒(méi)劃預(yù)剩發(fā)送數(shù)據(jù),或者已做劃了預(yù)剩發(fā)送數(shù)據(jù),但在發(fā)送緩沖區(qū)里沒(méi)發(fā)完現(xiàn)在就沒(méi)關(guān)發(fā)送通道地,繼續(xù)從發(fā)送緩沖區(qū)源放數(shù)據(jù)到發(fā)送分流頭,沒(méi)斷頭地發(fā)送數(shù)據(jù)收到ACK1FIN_WAIT2確認(rèn)到我方的FIN1到達(dá)對(duì)方,我端的所有發(fā)送數(shù)據(jù)全部到達(dá)對(duì)方B應(yīng)用層什么時(shí)候決定關(guān)閉close()↓----------------FIN2發(fā)到流LAST_ACK我端的所有發(fā)送數(shù)據(jù)也已經(jīng)全部發(fā)到發(fā)送分流里了我也把我這端發(fā)送分流的發(fā)送通道關(guān)閉了收到FIN2回ACK2-------------------------TIME_WAIT收到FIN2確認(rèn)到對(duì)方的所有發(fā)送數(shù)據(jù)全部到達(dá)我方也就給接收分流劃上了接收結(jié)尾【到此時(shí)我方就確認(rèn)到 雙FIN都已到達(dá),雙方的所有發(fā)送數(shù)據(jù)都全部到達(dá)對(duì)方就確定雙向數(shù)據(jù)都已無(wú)對(duì)本端TCB需求、雙向數(shù)據(jù)全已到達(dá),完成了本端TCB的服務(wù) 地正常關(guān)閉本端的TCB】等待2MSL↓CLOSED收到ACK2確認(rèn)到我方的FIN2到達(dá)對(duì)方,我端的所有發(fā)送數(shù)據(jù)全部到達(dá)對(duì)方【到此時(shí)我方就確認(rèn)到 雙FIN都已到達(dá),雙方的所有發(fā)送數(shù)據(jù)都全部到達(dá)對(duì)方就確定雙向數(shù)據(jù)都已無(wú)對(duì)本端TCB需求、雙向數(shù)據(jù)全已到達(dá),完成了本端TCB的服務(wù) 地正常關(guān)閉本端的TCB】↓CLOSED2.2揮不完異常,立即用RST中止超時(shí)ACK四次揮手無(wú)法揮完的至少有一方判斷有異常,它的應(yīng)用層與傳輸層調(diào)整無(wú)果,盡力服務(wù)完后無(wú)法判斷全,它管的 雙向數(shù)據(jù)對(duì)它的需求、雙向數(shù)據(jù)是否已到達(dá),它的服務(wù)是否完成 地結(jié)束TCB服務(wù),異常關(guān)閉TCB