国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

TCP為什么是三次握手和四次揮手以及可能出現(xiàn)的問題

這篇具有很好參考價值的文章主要介紹了TCP為什么是三次握手和四次揮手以及可能出現(xiàn)的問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

TCP為啥設(shè)定為三次握手(兩個角度分析)

如果是4次,多了一次沒啥意義還慢了,如果是兩次握手邏輯可能存在下列問題:

(這兩個方面也可以理解為握手過程中可能出現(xiàn)的問題)

不可靠

TCP協(xié)議是可靠的,那么建立的連接也需要確保是雙向,可靠的; 根據(jù)連接過程分析,只有一方收到了另一方的ack確認(rèn)報文,才能證明那一方的接收功能都正常。

舉下面這個確認(rèn)序號的例子說明 完整的接,收能力的重要性:

(這個抽象的接收功能,在下圖握手過程中實際交換seq初始序號的過程中能體現(xiàn))

tcp四次揮手 少一次,Linux,計算機網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò),服務(wù)器

第二次握手時,s端發(fā)完ack報文就默認(rèn)進(jìn)入establish建立成功狀態(tài),假設(shè)這個ack報文半路丟了呢?

c端壓根就沒有拿到ack也沒有拿到s端的初始序號,顯然這個鏈接是不可靠的!無法完成后續(xù)數(shù)據(jù)的交互;

產(chǎn)生無效鏈接浪費服務(wù)器資源

假定C端向S端發(fā)送了一個請求,但是該請求因為網(wǎng)絡(luò)原因,在網(wǎng)路中逗留了一會兒,未及時送達(dá)。此時C將再次向S發(fā)送請求,Server接收到請求,發(fā)送確認(rèn)包,完成連接并開始進(jìn)行數(shù)據(jù)傳輸,直到數(shù)據(jù)傳輸完成后,斷開連接。

之后,之前逗留的鏈接到了S端,這就尷尬了,S拿到syn請求,并回應(yīng)了ACK應(yīng)答,然后進(jìn)入establish建立完成狀態(tài),這個鏈接無疑是不合法的,c端早已離去,剩下這個空連接,維持他消耗著S端的資源;

(c端:s端一般是n:1,如果存在上述問題,試想大量空連接有可能被維護(hù),服務(wù)器資源會越來越吃緊從而導(dǎo)致更嚴(yán)重的問題)

TCP為啥四次揮手

客戶端或服務(wù)器均可主動發(fā)起揮手動作,調(diào)用close()即可,為了方便理解,假設(shè)C端先發(fā)起,S端作為被動斷開的一方;

tcp四次揮手 少一次,Linux,計算機網(wǎng)絡(luò),tcp/ip,網(wǎng)絡(luò),服務(wù)器

其實我們?nèi)挝帐值倪^程中的第二次,是將四次揮手中的中間兩次合并優(yōu)化了,那為啥TCP是四次揮手?其實這個說法有歧義,因為TCP多數(shù)情況下是4次揮手,但是也存在3次揮手的情況:

服務(wù)端有剩余數(shù)據(jù)需要發(fā)送–四次揮手(多數(shù)情況)

因為多數(shù)情況下,當(dāng)c端主動與s端斷開之后,s端不一定立即就與c端斷開連接,可能還會有一些數(shù)據(jù)要發(fā)給c端,所以還會保持鏈接一段時間;

(當(dāng)然TCP有?;顧C制,會通過設(shè)定時間間隔反復(fù)發(fā)送活性探測數(shù)據(jù)包,如果一段時間內(nèi)沒有響應(yīng)或者一定的次數(shù)之后,就會斷開這個鏈接釋放資源)

服務(wù)端無剩余數(shù)據(jù)發(fā)送–捎帶應(yīng)答–四次變?nèi)?少數(shù)情況)

在少數(shù)情況下,c端主動斷開,s端恰巧也沒啥要發(fā)的,也需要立即斷開,那么TCP的捎帶應(yīng)答機制,就將四次揮手的中間兩次進(jìn)行合并,這時候四次揮手就變成了三次揮手;

四次揮手可能出現(xiàn)的問題

客戶端或服務(wù)器均可主動發(fā)起揮手動作,調(diào)用close()即可,為了方便理解,假設(shè)C端先發(fā)起,S端作為被動斷開的一方;

可能出現(xiàn)大量的TIME_WAIT

TIME_WAIT狀態(tài)是C端收到了S端主動發(fā)送fin請求后,向S端發(fā)回了ACK確認(rèn)斷開報文之后出現(xiàn)的,需要保持2*MSL時間確保最后一個ACK報文能夠到達(dá)S端,雙方正常關(guān)閉; (設(shè)計成2*MSL的原因是確保響應(yīng)ACK的傳輸時間和如果這個ACK丟失,S端重新發(fā)送FIN請求斷開的時間)可見,msl一定是大于超時重傳的時間的;

解決:

一臺主機出現(xiàn)大量的TIME_WAIT證明這臺主機上發(fā)起大量的主動關(guān)閉連接(常見于一些爬蟲服務(wù)器)

這時候我們應(yīng)該調(diào)整TIME_WAIT的等待時間(linux centos當(dāng)時測試默認(rèn)是60s),或者開啟套接字地址重用選項

(否則這個端口號就被占用了,這個主機其他的服務(wù)就用不了這個端口號了…Bind Error)

可能出現(xiàn)大量的CLOSE_WAIT

CLOSE_WAIT是S端同意C端的fin請求之后進(jìn)入的狀態(tài),等待上層程序進(jìn)一步處理(比如發(fā)送剩余數(shù)據(jù));

解決:

如果S端產(chǎn)生大量的CLOSE_WAIT,可能是內(nèi)核斷開連接后,S端忘記調(diào)用close,這就是我們程序員的疏忽了,寫了個小bug;文章來源地址http://www.zghlxwxcb.cn/news/detail-777890.html

到了這里,關(guān)于TCP為什么是三次握手和四次揮手以及可能出現(xiàn)的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • TCP為什么要三次握手,而不是兩次或四次?

    TCP為什么要三次握手,而不是兩次或四次?

    TCP連接時用于保證可靠性和流量控制維護(hù)的某些狀態(tài)信息,這些信息的組合,包括 Socket,序列號和窗口大小 稱為連接。 以上三個方面分析三次握手原因: 首要原因為了防止舊的重復(fù)連接初始化造成混亂 網(wǎng)絡(luò)堵塞情況下,如果一個舊的SYN報文比新的SYN報文早到達(dá)了服務(wù)端,

    2023年04月26日
    瀏覽(28)
  • TCP實現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以?

    TCP實現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以?

    TCP實現(xiàn)原理和為什么需要三次握手?兩次握手不可以?四次握手不可以? 1. 什么是TCP協(xié)議? TCP:Transmission Control Protocol翻譯過來就是傳輸控制協(xié)議,TCP協(xié)議是一個面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議 RFC 793對TCP連接的定義 Connections: The reliability and flow control mechanisms descri

    2024年02月16日
    瀏覽(32)
  • TCP為什么需要三次握手進(jìn)行連接,二次或四次不可以嗎?

    為了確認(rèn)雙方具有接收和發(fā)送的能力。 1.?可以阻止重復(fù)歷史連接的初始化(主要原因)。 2.?可以同步雙方的初始序列號。 3. 可以避免資源的浪費。 1.?為了防止舊的重復(fù)連接初始化造成混亂。 當(dāng)客戶端發(fā)送了一個 SYN 報文后,突然宕機了,并且這個 SYN 報文還被網(wǎng)絡(luò)阻塞了

    2024年02月16日
    瀏覽(24)
  • 什么是三次握手與四次揮手( 一篇文章講清楚TCP協(xié)議與UDP協(xié)議)

    什么是三次握手與四次揮手( 一篇文章講清楚TCP協(xié)議與UDP協(xié)議)

    ? ? 關(guān)于TCP協(xié)議和UDP協(xié)議大家應(yīng)該都有所耳聞,我們常用的網(wǎng)絡(luò)通訊。比如瀏覽網(wǎng)頁、軟件聊天、以及你看到的這篇文章,都是通過這兩種協(xié)議來進(jìn)行數(shù)據(jù)傳輸?shù)摹?到底他們是如何工作的?這兩種協(xié)議的區(qū)別又是什么呢?請隨武漢海翎光電的小編一起耐心看完這篇文章,你一

    2024年02月09日
    瀏覽(23)
  • TCP 三次握手和四次揮手

    TCP 三次握手和四次揮手

    1 TCP 三次握手漫畫圖解 如下圖所示,下面的兩個機器人通過3次握手 確定了對方能正確接收和發(fā)送消息 (圖片來源網(wǎng)絡(luò))。 簡單示意圖: 客戶端–發(fā)送帶有 SYN 標(biāo)志的數(shù)據(jù)包–一次握手–服務(wù)端 服務(wù)端–發(fā)送帶有 SYN/ACK 標(biāo)志的數(shù)據(jù)包–二次握手–客戶端 客戶端–發(fā)送帶有帶有

    2024年02月22日
    瀏覽(36)
  • TCP三次握手和四次揮手

    TCP三次握手和四次揮手

    序列號:建立連接時計算機隨機生成的隨機數(shù)作為初始值,通過SYN包傳給接收端主機,每發(fā)送一次數(shù)據(jù)就累加一次該數(shù)據(jù)字節(jié)數(shù)的大小。 用來解決網(wǎng)絡(luò)包亂序問題 。 確認(rèn)應(yīng)答號:指下一次期望收到的數(shù)據(jù)的序列號,發(fā)送端收到這個確認(rèn)應(yīng)答以后認(rèn)為在這個序號以前的數(shù)據(jù)都

    2023年04月11日
    瀏覽(33)
  • TCP 的三次握手和四次揮手

    TCP 的三次握手和四次揮手

    Java 面試題 第一次握手 :客戶端向服務(wù)端發(fā)送SYN包。報文中標(biāo)志位SYN=1,序列號seq=x(x為隨機整數(shù))。此時客戶端進(jìn)入了? SYN_SEND 同步已發(fā)送狀態(tài)。 第二次握手 :服務(wù)端回復(fù)客戶端SYN+ACK包。報文中標(biāo)志位SYN=1,標(biāo)志位ACK=1,序列號seq=y(y為隨機整數(shù)),確認(rèn)號ack=x+1(x為客戶

    2024年01月20日
    瀏覽(24)
  • TCP的三次握手和四次揮手

    TCP的三次握手和四次揮手

    既然我們文章要說的是TCP的三次握手,和四次揮手,那么肯定是說的連接,也不是說的不其他的。那么它這個連接的過程說的是什么呢? 我們還是從圖中理解,這樣比較好理解, TCP第一次握手:服務(wù)端的TCP進(jìn)程先創(chuàng)建傳輸控制塊TCB,準(zhǔn)備接受客戶端進(jìn)程的連接請求,然后服

    2024年02月01日
    瀏覽(25)
  • TCP為什么三次握手?

    TCP為什么三次握手?

    參考:公眾號 小林coding 常見回答:三次握手保證雙方都具有接受和發(fā)送數(shù)據(jù)的能力。 主要原因: 1. 防止重復(fù)歷史連接的初始化 2.同步雙方初始序列號 3.避免資源的浪費 序列號seq標(biāo)記已發(fā)送數(shù)據(jù)的位置,確認(rèn)號ack表示數(shù)據(jù)已接受,期望下一次數(shù)據(jù)序列號seq = ack 當(dāng)因為網(wǎng)絡(luò)擁

    2023年04月27日
    瀏覽(26)
  • TCP的三次握手和四次揮手······詳解

    TCP的三次握手和四次揮手······詳解

    三次握手是 建立連接 的過程 如圖大致為三次握手的流程圖: 當(dāng)客戶端對服務(wù)端發(fā)起連接時,會 先發(fā)一個包 連接請求數(shù)據(jù),去詢問能否建立連接,該數(shù)據(jù)包稱為 “SYN”包 然后,如果對方同意連接,那么對方將會回復(fù)一個 “SYN+ACK”包 客戶端收到后,回復(fù)一個 “ACK”包 ,連

    2024年02月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包