HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    tcp調(diào)整器安卓版(tcp參數(shù)調(diào)優(yōu))

    發(fā)布時(shí)間:2023-03-19 04:45:24     稿源: 創(chuàng)意嶺    閱讀: 105        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于tcp調(diào)整器安卓版的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    tcp調(diào)整器安卓版(tcp參數(shù)調(diào)優(yōu))

    一、如何偵服務(wù)器的tcp返回?cái)?shù)據(jù)

    在平時(shí)的開發(fā)中,經(jīng)常會(huì)碰到一些需要檢測(cè)tcp連接是否正常的場(chǎng)景。比如一個(gè)分布式的應(yīng)用,一個(gè)調(diào)度任務(wù)的節(jié)點(diǎn)管理一堆用來跑業(yè)務(wù)的節(jié)點(diǎn)。當(dāng)調(diào)度節(jié)點(diǎn)進(jìn)行調(diào)度的時(shí)候,需要把任務(wù)分發(fā)給它認(rèn)為正常的業(yè)務(wù)節(jié)點(diǎn)去執(zhí)行。業(yè)務(wù)節(jié)點(diǎn)是否正常,一個(gè)重要的參考依據(jù)就是調(diào)度節(jié)點(diǎn)和業(yè)務(wù)節(jié)點(diǎn)之間的tcp連接是否正常。這時(shí)候就需要調(diào)度節(jié)點(diǎn)主動(dòng)地去檢測(cè)tcp連接。常見的檢測(cè)方法有以下幾種

    方案一、通過TCP協(xié)議的返回值進(jìn)行判斷

    <1> 利用select,把socket設(shè)置為非阻塞。然后使用select等待該socket的可讀事件。如果socket可讀,但是recv的返回值是0,則說明socket已經(jīng)被對(duì)端斷開,這時(shí)候就可以調(diào)用close關(guān)閉socket。這里還要注意一點(diǎn),recv還可能返回負(fù)數(shù),這個(gè)代表socket操作出錯(cuò)。但是仍然應(yīng)該判斷一下errno是否為EINTR。如果errno是EINTR,則說明recv函數(shù)是被信號(hào)中斷返回的,這時(shí)候不能判斷socket的連接是否正常,也不應(yīng)該調(diào)用close關(guān)閉socket。

    <2> 利用poll的事件。poll本身提供了POLLHUP,POLLERR, POLLNVAL三個(gè)事件。如果文件描述符是socket,則POLLHUP代表socket已經(jīng)斷開了連接,在TCP底層就是已經(jīng)收到了FIN報(bào)文。POLLERR表示socket出現(xiàn)了錯(cuò)誤,一般情況下是收到了rst報(bào)文,或者已經(jīng)發(fā)送了rst報(bào)文。這兩種情況都應(yīng)該調(diào)用close關(guān)閉socket。POLLNVAL代表socket沒有打開,這時(shí)不能使用close關(guān)閉它,而應(yīng)該根據(jù)自己的業(yè)務(wù)做一些其他的操作。因?yàn)殛P(guān)閉一個(gè)未打開的socket會(huì)出錯(cuò)。

    這兩種方法都可以很精確地判斷tcp連接是否正常,但是仍然有很明顯的缺陷。就是它只可以根據(jù)TCP操作的返回值來進(jìn)行判斷。如果TCP四次握手沒有正常被執(zhí)行呢?比如連接對(duì)端機(jī)器直接掛了,那么就不會(huì)發(fā)送FIN報(bào)文給這一端,select不會(huì)返回socket可讀,poll不會(huì)返回socket異常。那么這個(gè)死鏈接將會(huì)永遠(yuǎn)檢測(cè)不到。直到寫這個(gè)socket的時(shí)候,對(duì)端直接返回一個(gè)ret報(bào)文,這時(shí)才知道這個(gè)連接已經(jīng)斷掉了。這就意味著tcp連接異??赡苡肋h(yuǎn)檢測(cè)不到,或者檢測(cè)到的延遲非常大。這對(duì)于一些資源寶貴而且要求高性能的服務(wù)器是不能接受的,比如游戲服務(wù)器,比如搜索服務(wù)器。

    方案二、在第一種方案的基礎(chǔ)上設(shè)置socket的 keep alive 機(jī)制

    方案一的主要缺陷在于檢測(cè)不及時(shí),或者根本檢測(cè)不到。TCP協(xié)議提供了keep alive機(jī)制。如果開啟了這個(gè)特性(暫時(shí)稱開啟了keep alive的一端為開啟端),在默認(rèn)情況下,開啟的著一端的socket相關(guān)結(jié)構(gòu)中會(huì)維護(hù)一個(gè)定時(shí)器,默認(rèn)是2小時(shí)。如果在2小時(shí)內(nèi)兩端沒有數(shù)據(jù)往來,那么開啟端就會(huì)給另一端發(fā)送一個(gè)ack空?qǐng)?bào)文。這時(shí)候分幾種情況:

    <1> 對(duì)端機(jī)器可達(dá),而且TCP相關(guān)組件運(yùn)行正常。那么對(duì)端就會(huì)給開啟端發(fā)送一個(gè)ack空?qǐng)?bào)文。這時(shí)開啟端就知道對(duì)端是正常的,意味著tcp連接也沒有問題。開啟端會(huì)重新初始化定時(shí)器,等待下一個(gè)超時(shí)的到來。需要注意的是,如果兩端之間有數(shù)據(jù)往來,定時(shí)器也會(huì)被重新初始化為2個(gè)小時(shí)。

    <2> 對(duì)端掛了,或者正在重啟,還沒有完全起來?;蛘邔?duì)端服務(wù)器不可達(dá)。 這種狀態(tài)的對(duì)端是不會(huì)響應(yīng)這個(gè)ack的。開啟端的 keep alive 機(jī)制會(huì)把這種情況當(dāng)探測(cè)超時(shí)來處理,并且重新發(fā)送ack到對(duì)端。當(dāng)超時(shí)次數(shù)超過一定限制,keep alive 就認(rèn)為這個(gè)tcp連接有問題。典型值是每次75秒,超時(shí)9次。

    <3> 對(duì)端掛過,但是已經(jīng)重啟完成。這時(shí)候發(fā)送這個(gè)ack和寫已經(jīng)關(guān)閉的socket是一種情況,對(duì)端會(huì)返回一個(gè)rst報(bào)文,這樣開啟端就知道tcp連接出問題了。

    可以看出 keep alive 機(jī)制彌補(bǔ)了方案一種不能判斷沒有進(jìn)行正常四次揮手連接出現(xiàn)問題的缺陷。默認(rèn)的發(fā)送超時(shí)和發(fā)送間隔都是可以調(diào)整的。

    tcp_keepalive_time: KeepAlive的空閑時(shí)長,默認(rèn)是2小時(shí)

    tcp_keepalive_intvl: KeepAlive探測(cè)包的發(fā)送間隔,默認(rèn)是75s 

    tcp_keepalive_probes: 在tcp_keepalive_time之后,沒有接收到對(duì)方確認(rèn),繼續(xù)發(fā)送?;钐綔y(cè)包次數(shù),默認(rèn)是9次

    這3個(gè)參數(shù)使用 setsockopt函數(shù)都是可以配置的。

    方案二看似已經(jīng)完美了,能夠比較精確而且及時(shí)地發(fā)現(xiàn)有問題的連接。但是還有2個(gè)缺點(diǎn)。第一個(gè)是 keep alive 機(jī)制看似牛逼,但是很多人不建議使用。因?yàn)樯厦嬲f的3個(gè)參數(shù)很難根據(jù)業(yè)務(wù)場(chǎng)景給出合適的值,設(shè)置不好很容易對(duì)tcp連接狀態(tài)發(fā)生誤判,關(guān)閉了一個(gè)本來正常的連接。而且沒有一個(gè)主動(dòng)通知應(yīng)用層的方式。比如socket連接出錯(cuò)了,TCP協(xié)議接到了rst,fin,或者keep alive判斷出socket有問題了,但是并不會(huì)主動(dòng)去通知應(yīng)用層,必須我們自己 recv socket或者等待錯(cuò)誤事件才能得到這個(gè)錯(cuò)誤。第二個(gè)是很多場(chǎng)景下,keep alive 檢測(cè)仍然不夠及時(shí),比如對(duì)端掛了,最長需要等待 tcp_keepalive_intvl * tcp_keepalive_probes時(shí)間才可以檢測(cè)出來,而且這兩個(gè)值還不能設(shè)置得太小,太小了容易誤判。

    方案三、應(yīng)用層的心跳

    這種形式的心跳設(shè)計(jì)就比較多樣化了,而且靈活,可以很好地適應(yīng)業(yè)務(wù)場(chǎng)景。唯一的缺點(diǎn)就是要自己寫代碼。我目前接觸到的就是定期進(jìn)行RPC調(diào)用??碦PC調(diào)用是否正常,如果返回錯(cuò)誤或者拋出異常,就說明連接有問題。

    二、關(guān)閉路由器tcp時(shí)間戳

    1、登錄無線路由器,找到節(jié)能設(shè)置。

    2、設(shè)置無線使用時(shí)間段。

    3、解除無線網(wǎng)絡(luò)定時(shí)關(guān)閉,將時(shí)間設(shè)定為全天即可。

    4、最后把路由器插在定時(shí)插座來控制路由器電源供電,也可將定時(shí)插座時(shí)間進(jìn)行調(diào)整關(guān)閉路由器tcp時(shí)間戳。

    三、圖解TCP/IP

    計(jì)算機(jī)使用模式的演變:

    20世紀(jì)50年代 批處理時(shí)代

    20世紀(jì)60年代 分時(shí)系統(tǒng)時(shí)代

    20世紀(jì)70年代 計(jì)算機(jī)間通信時(shí)代

    20世紀(jì)80年代 計(jì)算機(jī)網(wǎng)絡(luò)時(shí)代

    20世紀(jì)90年代 互聯(lián)網(wǎng)普及時(shí)代

    2000年 以互聯(lián)網(wǎng)為中心的時(shí)代

    2010年 無論何時(shí)何地地一切皆TCP/IP的網(wǎng)絡(luò)時(shí)代

    在計(jì)算機(jī)網(wǎng)絡(luò)與信息通信領(lǐng)域,人們經(jīng)常提及 “協(xié)議” 。簡(jiǎn)單來說。 協(xié)議 就是計(jì)算機(jī)與計(jì)算機(jī)之間通過網(wǎng)絡(luò)實(shí)現(xiàn)通信時(shí)事先達(dá)成的一種“約定”。這種“約定”使那些由不同廠商的設(shè)備、不同的CPU以及不同的操作系統(tǒng)組成的計(jì)算機(jī)之間,只要遵循相同的協(xié)議就能實(shí)現(xiàn)通信。換句話說, 協(xié)議 就是計(jì)算機(jī)之間的通信語言,只有支持相同的協(xié)議,計(jì)算機(jī)之間才能相互通信。

    計(jì)算機(jī)通信也會(huì)在每一個(gè)分組中附加上源主機(jī)地址和目標(biāo)主機(jī)地址送給通信線路。這些發(fā)送端地址、接收端地址以及分組序號(hào)寫入的部分稱為 “報(bào)文首部” 。

    TCP/IP協(xié)議并非ISO(國際標(biāo)準(zhǔn)化組織)所制定的某種國際標(biāo)準(zhǔn),而是由IETF(Internet Engineering Task Force國際互聯(lián)網(wǎng)工程任務(wù)組)所建議的、致力于推進(jìn)器標(biāo)準(zhǔn)化作業(yè)的一種協(xié)議。

    OSI參考模型

    應(yīng)用層 :針對(duì)特定應(yīng)用的協(xié)議。以電子郵件為例,用戶A在主機(jī)A上新建一封電子郵件,指定收件人為B,并輸入郵件內(nèi)容為“早上好”。應(yīng)用層協(xié)議會(huì)在所要傳遞數(shù)據(jù)的前端附加一個(gè)首部(標(biāo)簽)信息,該首部標(biāo)明了郵件內(nèi)容為“早上好”和收件人為B。

    表示層 :設(shè)備固有數(shù)據(jù)格式和網(wǎng)絡(luò)標(biāo)準(zhǔn)數(shù)據(jù)格式的轉(zhuǎn)換。用戶A和用戶B使用的郵件客戶端一致,便能夠順利收取和閱讀郵件,不一致時(shí)表示層就發(fā)揮作用了:將數(shù)據(jù)從“某個(gè)計(jì)算機(jī)特定的數(shù)據(jù)格式”轉(zhuǎn)換為“網(wǎng)絡(luò)通用的標(biāo)準(zhǔn)數(shù)據(jù)格式”后再發(fā)送出去,接收端也進(jìn)行相應(yīng)處理。表示層與表示層之間為了識(shí)別編碼格式也會(huì)附加首部信息,從而將實(shí)際傳輸?shù)臄?shù)據(jù)轉(zhuǎn)交給下一層處理。

    會(huì)話層 :通信管理。負(fù)責(zé)建立和斷開通信連接(數(shù)據(jù)流動(dòng)的邏輯通路)。管理傳輸層以下的分層。假定用戶A新建了5封電子郵件準(zhǔn)備發(fā)送給用戶B,是建立一次連接一起發(fā)送,還是分別建立5次連接各自發(fā)送,都是會(huì)話層決定的,會(huì)話層和表示層一樣,也會(huì)在數(shù)據(jù)前段附加首部或標(biāo)簽信息再轉(zhuǎn)發(fā)給下一層。而這些首部或標(biāo)簽中記錄著數(shù)據(jù)傳送順序的信息。

    傳輸層 :管理兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸。負(fù)責(zé)可靠傳輸(確保數(shù)據(jù)被可靠傳送到目標(biāo)地址)。用主機(jī)A將“早上好”這一數(shù)據(jù)發(fā)送給主機(jī)B,期間可能因?yàn)槟承┰驅(qū)е聰?shù)據(jù)損壞,主機(jī)B只收到“早上”,此時(shí)也會(huì)將這一事實(shí)告訴主機(jī)A,主機(jī)A得知情況會(huì)將后面的“好”重發(fā)給主機(jī)B。保證數(shù)據(jù)傳輸?shù)目煽啃允莻鬏攲拥囊粋€(gè)重要作用。為了確??煽啃裕@一層所要傳輸?shù)臄?shù)據(jù)附加首部以識(shí)別這一分層的數(shù)據(jù)。然而,實(shí)際上將數(shù)據(jù)傳輸給對(duì)端的處理是由網(wǎng)絡(luò)層來完成的。

    網(wǎng)絡(luò)層 :地址管理與路由選擇。兩端主機(jī)之間雖然有眾多數(shù)據(jù)鏈路,但能夠?qū)?shù)據(jù)從主機(jī)A送到主機(jī)B也都是網(wǎng)絡(luò)層的功勞。相當(dāng)于TCP/IP協(xié)議中的IP協(xié)議,網(wǎng)絡(luò)層不能保證數(shù)據(jù)的可達(dá)性,所以需要傳輸層TCP協(xié)議確??蛇_(dá)性,所以TCP/IP協(xié)議實(shí)現(xiàn)了可靠傳輸。

    數(shù)據(jù)鏈路層 :互連設(shè)備之間傳送和識(shí)別數(shù)據(jù)幀。網(wǎng)絡(luò)層負(fù)責(zé)將整個(gè)數(shù)據(jù)發(fā)送給最終目標(biāo)地址,而數(shù)據(jù)鏈路層則只負(fù)責(zé)發(fā)送一個(gè)分段內(nèi)的數(shù)據(jù)。

    物理層 :以“0”、“1”代表電壓的高低、燈光的閃滅。界定連接器和網(wǎng)線的規(guī)格。將數(shù)據(jù)的0、1轉(zhuǎn)換為電壓和脈沖光傳輸給物理的傳輸介質(zhì)。

    計(jì)算機(jī)之間的網(wǎng)絡(luò)連接通過 電纜 相互連接。任何一臺(tái)計(jì)算機(jī)連接網(wǎng)絡(luò)時(shí),必須要使用 網(wǎng)卡 (網(wǎng)絡(luò)適配器、NIC、LAN卡), 中繼器 的作用是將電纜傳過來的信號(hào)調(diào)整和放大再傳給另一個(gè)電纜,可以完成不同媒介之間的連接工作。 網(wǎng)橋 是數(shù)據(jù)鏈路層面上連接兩個(gè)網(wǎng)絡(luò)的設(shè)備,提供的是傳遞數(shù)據(jù)幀的作用,并且還具備自學(xué)機(jī)制。 路由器 是在網(wǎng)絡(luò)層面上(OSI七層模型網(wǎng)絡(luò)層)連接兩個(gè)網(wǎng)絡(luò)、并對(duì)分組報(bào)文進(jìn)行轉(zhuǎn)發(fā)的設(shè)備。 網(wǎng)橋 是根據(jù)物理地址(MAC地址)進(jìn)行處理,而路由器/3層交換機(jī)則是根據(jù)IP地址進(jìn)行處理的。由此,TCP/IP中網(wǎng)絡(luò)層的地址就成為了IP地址。對(duì)于并發(fā)訪問量非常大的一個(gè)企業(yè)級(jí)Web站點(diǎn),使用一臺(tái)服務(wù)器不足以滿足前端的訪問需求,這時(shí)通常會(huì)架設(shè)多臺(tái)服務(wù)器來分擔(dān)。這些服務(wù)器的訪問的入口地址通常只有一個(gè),為了能通過同一個(gè)URL將前端訪問分發(fā)到后臺(tái)多個(gè)服務(wù)器上,可以將這些服務(wù)器的前端加一個(gè)負(fù)載均衡器。這種負(fù)載均衡器就是4-7層交換機(jī)的一種。 網(wǎng)關(guān) 是OSI參考模型中負(fù)責(zé)將從傳輸層到應(yīng)用層的數(shù)據(jù)進(jìn)行轉(zhuǎn)換和轉(zhuǎn)發(fā)的設(shè)備。在兩個(gè)不能進(jìn)行直接通信的協(xié)議之間進(jìn)行翻譯,最終實(shí)現(xiàn)兩者的通信。非常典型的例子就是互聯(lián)網(wǎng)郵件和手機(jī)郵件之間的轉(zhuǎn)換服務(wù)。防火墻也是一款通過網(wǎng)關(guān)通信,針對(duì)不用應(yīng)用提高安全性的產(chǎn)品。

    美國軍方利用分組交換技術(shù)組件的ARPANET網(wǎng)絡(luò)是互聯(lián)網(wǎng)的鼻祖。而BSD UNIX操作系統(tǒng)實(shí)現(xiàn)了TCP/IP協(xié)議,隨著UNIX系統(tǒng)的普及,TCP/IP協(xié)議開始盛行。TCP/IP可以單純的指這兩種協(xié)議,然而在很多情況下,它指的是包含HTTP、SMTP、FTP、TCP、UDP、IP、ARP等很多協(xié)議的 網(wǎng)際協(xié)議族

    發(fā)送數(shù)據(jù)包的過程,和上節(jié)OSI參考模型中介紹的差不多。數(shù)據(jù)鏈路層是由網(wǎng)絡(luò)接口(以太網(wǎng)驅(qū)動(dòng))來處理的,它會(huì)改數(shù)據(jù)附加上 以太網(wǎng)首部 , 以太網(wǎng)首部 中包含接收端的MAC地址、發(fā)送端MAC地址以及標(biāo)志以太網(wǎng)類型的以太網(wǎng)數(shù)據(jù)的協(xié)議。

    在以太網(wǎng)普及之初,一般多臺(tái)終端使用同一根同軸電纜的 共享介質(zhì)型 連接方式,訪問控制一般以半雙工通信為前提采用CSMA/CD方式。隨著ATM交換技術(shù)的進(jìn)步和CAT5 UTP電纜的普及很快發(fā)生了變化,逐漸采用像 非共享介質(zhì)網(wǎng)絡(luò) 那樣直接與交換機(jī)連接的方式。

    網(wǎng)絡(luò)層與數(shù)據(jù)鏈路層的關(guān)系

    某人要去一個(gè)很遠(yuǎn)的地方旅行,并計(jì)劃先后乘坐飛機(jī)、火車、公交車到達(dá)目的地。旅行社不僅幫他預(yù)訂好了飛機(jī)票和火車票,甚至還為他指定了一個(gè)詳細(xì)的行程表,詳細(xì)到幾點(diǎn)幾分需要乘坐飛機(jī)或火車都一目了然。機(jī)票和火車票只能夠在某一限定區(qū)間內(nèi)移動(dòng),此處的“區(qū)間內(nèi)”就如同通信網(wǎng)絡(luò)上的數(shù)據(jù)鏈路。這個(gè)區(qū)間內(nèi)的出發(fā)地點(diǎn)和目的地點(diǎn)就如同某一個(gè)數(shù)據(jù)鏈路的源地址和目標(biāo)地址等首部信息。整個(gè)行程表的作用就相當(dāng)于網(wǎng)絡(luò)層。

    DNS :將域名和IP地址相匹配。

    ARP :以目標(biāo)IP地址為線索,用來定位下一個(gè)應(yīng)該接受數(shù)據(jù)分包的網(wǎng)絡(luò)設(shè)備對(duì)應(yīng)的MAC地址。ARP只適用于IPv4,IPv6可以用ICMPv6替代ARP發(fā)送鄰居探索消息。

    ICMP :在IP通信中如果某個(gè)IP包因?yàn)槟撤N原因未能送達(dá)目標(biāo)地址,那么這個(gè)具體的原因?qū)⒂蒊CMP負(fù)責(zé)通知。

    DHCP :使用移動(dòng)設(shè)備時(shí),每移動(dòng)到一個(gè)新地方,都要重新設(shè)置IP地址,為了實(shí)現(xiàn)自動(dòng)設(shè)置IP地址、統(tǒng)一管理IP地址分配,就產(chǎn)生了DHCP協(xié)議。

    NAT :是用于在本地網(wǎng)絡(luò)中使用私有地址,在連接互聯(lián)網(wǎng)時(shí)轉(zhuǎn)而使用全局IP地址的技術(shù)。

    IP隧道 :IPv4和IPv6之間進(jìn)行通信的技術(shù)就是IP隧道。

    TCP用于低速可靠傳輸

    UDP用于高速不可靠傳輸

    端口號(hào)就是用來識(shí)別同一臺(tái)計(jì)算機(jī)中進(jìn)行通信的不同應(yīng)用程序,也被稱為程序地址。

    TCP傳輸利用 窗口控制 提高速度,無需等到每次應(yīng)答來進(jìn)行下一次發(fā)送,而是有個(gè)窗口進(jìn)行緩沖,來提高吞吐量。

    TCP擁塞控制,利用擁塞窗口來調(diào)節(jié)發(fā)送的數(shù)據(jù)量,擁塞時(shí)減小窗口,流暢是增大窗口來控制吞吐量。

    我們?nèi)粘>W(wǎng)絡(luò)訪問的 http 用的是 tcp ,那還是看一下這個(gè)過程吧

    tcp 可以提供全雙工的數(shù)據(jù)流傳輸服務(wù),全雙工說白了,就是同一時(shí)間 A 可以發(fā)信息給 B , B 也可以發(fā)消息給 A ,倆人同時(shí)都可以給對(duì)方發(fā)消息;半雙工就是某個(gè)時(shí)間段 A 可以發(fā)給 B ,但 B 不能給 A ,換個(gè)時(shí)間段,就反過來了。

    這個(gè)過程理解起來,就像兩人在喊話:

    A:喂,有人嗎,我想建立連接

    B:有哇,你建立吧,等你吆

    A:好噠,我來啦

    然后倆人就建立連接了...

    一定要三次握手么,兩次行不行?

    這么一個(gè)場(chǎng)景:

    A->B: 洞幺洞幺,我是洞拐,收到請(qǐng)回復(fù)。

    B->A: 洞拐洞拐,洞幺收到。

    請(qǐng)問根據(jù)以上對(duì)話判斷:

    1、B是否能收到A的信息? (答案是肯定的)

    2、A是否能收到B的信息? (你猜?)

    tcp的核心思想是保證數(shù)據(jù)可靠傳輸,如果 2 次,顯然不行,但 3 次就一定行么?未必,可能第三次的時(shí)候網(wǎng)絡(luò)中斷了,然后 A 就認(rèn)為 B 收到了,然后一通發(fā)消息,其實(shí) B 沒收到,但這是無法完全保證的。無論握手多少次都不能滿足傳輸?shù)慕^對(duì)可靠,為了效率跟相對(duì)可靠而看, 3 次剛剛好,所以就 3 次了(正好 AB 相互確認(rèn)了一次)。

    舉個(gè)栗子:把客戶端比作男孩,服務(wù)器比作女孩。通過他們的分手來說明“四次揮手”過程:

    "第一次揮手" :日久見人心,男孩發(fā)現(xiàn)女孩變成了自己討厭的樣子,忍無可忍,于是決定分手,隨即寫了一封信告訴女孩。

    “第二次揮手” :女孩收到信之后,知道了男孩要和自己分手,怒火中燒,心中暗罵:你算什么東西,當(dāng)初你可不是這個(gè)樣子的!于是立馬給男孩寫了一封回信:分手就分手,給我點(diǎn)時(shí)間,我要把你的東西整理好,全部還給你!男孩收到女孩的第一封信之后,明白了女孩知道自己要和她分手。隨后等待女孩把自己的東西收拾好。

    “第三次揮手” :過了幾天,女孩把男孩送的東西都整理好了,于是再次寫信給男孩:你的東西我整理好了,快把它們拿走,從此你我恩斷義絕!

    “第四次揮手” :男孩收到女孩第二封信之后,知道了女孩收拾好東西了,可以正式分手了,于是再次寫信告訴女孩:我知道了,這就去拿回來!

    為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手?

    答:因?yàn)楫?dāng) Server端 收到 Client端 的 SYN 連接請(qǐng)求報(bào)文后,可以直接發(fā)送 SYN+ACK報(bào)文 。其中 ACK報(bào)文 是用來應(yīng)答的, SYN報(bào)文 是用來同步的。但是關(guān)閉連接時(shí),當(dāng) Server端 收到 FIN報(bào)文 時(shí),很可能并不會(huì)立即 關(guān)閉SOCKET ,所以只能先回復(fù)一個(gè) ACK報(bào)文 ,告訴 Client端 ,"你發(fā)的 FIN報(bào)文 我收到了"。只有等到我 Server端 所有的報(bào)文都發(fā)送完了,我才能發(fā)送 FIN報(bào)文 ,因此不能一起發(fā)送。故需要四步握手。

    靜態(tài)路由 是指事先設(shè)置好路由器和主機(jī)中并將路由信息固定的一種方法。缺點(diǎn)是某個(gè)路由器發(fā)生故障,基本上無法自動(dòng)繞過發(fā)生故障的節(jié)點(diǎn),只有在管理員手工設(shè)置以后才能恢復(fù)正常。

    動(dòng)態(tài)路由 是管理員先設(shè)置好路由協(xié)議,其設(shè)定過程的復(fù)雜程度與具體要設(shè)置路由協(xié)議的類型有直接關(guān)系。在路由器個(gè)數(shù)較多的網(wǎng)絡(luò),采用動(dòng)態(tài)路由顯然能夠減輕管理員負(fù)擔(dān)。網(wǎng)絡(luò)發(fā)生故障,只要有一個(gè)可繞的其他路徑,數(shù)據(jù)包會(huì)自動(dòng)選擇這個(gè)路徑,但路由器需要定期相互交換必要的路由控制信息,會(huì)增加一定程度的負(fù)荷。

    根據(jù)路由控制范圍分為 IGP (內(nèi)部網(wǎng)關(guān)協(xié)議)和 EGP (外部網(wǎng)關(guān)協(xié)議)

    路由算法分為 距離向量算法 鏈路狀態(tài)算法

    距離向量算法 :通過距離與方向確定通往目標(biāo)網(wǎng)絡(luò)的路徑

    鏈路狀態(tài)算法 :鏈路狀態(tài)中路由器知道網(wǎng)絡(luò)的連接狀態(tài),并根據(jù)鏈路信息確定通往目標(biāo)網(wǎng)絡(luò)的路徑。

    IGP包含RIP、RIP2、OSPF

    EGP包含EGP、BGP

    RIP是距離向量型的一種路由協(xié)議,廣泛應(yīng)用于LAN

    RIP2是RIP的第二版。新增以下特點(diǎn):使用多播、支持子網(wǎng)掩碼、路由選擇域、外部路由標(biāo)志、身份驗(yàn)證密鑰

    OSPF是一種鏈路狀態(tài)型路由協(xié)議。

    在RIP和OSPF中利用IP的網(wǎng)絡(luò)地址部分進(jìn)行著路由控制,然而BGP則需要放眼整個(gè)互聯(lián)網(wǎng)進(jìn)行路由控制。BGP的最終路由控制表有網(wǎng)絡(luò)地址和下一站的路由器組來表示,不過它會(huì)根據(jù)所要經(jīng)過的AS個(gè)數(shù)進(jìn)行路由控制。有了AS編號(hào)的域,就相當(dāng)于有了自己一個(gè)獨(dú)立的“國家”。AS的代表可以決定AS內(nèi)部的網(wǎng)絡(luò)運(yùn)營和相關(guān)政策。與其他AS相連的時(shí)候,可以像一位“外交官”一樣簽署合約再進(jìn)行連接。正是有了這些不同地區(qū)的AS通過簽約的相互連接,才有了今天全球范圍內(nèi)的互聯(lián)網(wǎng)。

    轉(zhuǎn)發(fā)IP數(shù)據(jù)包的過程中除了使用路由技術(shù)外,還在使用標(biāo)記交換技術(shù)。最有代表性的就是多協(xié)議標(biāo)記交換技術(shù)(MPLS)。

    MPLS的標(biāo)記不像MAC地址直接對(duì)應(yīng)到硬件設(shè)備。因此,MPLS不需要具備以外網(wǎng)或ATM等數(shù)據(jù)鏈路層協(xié)議的作用,而只需要關(guān)注它與下面一層IP層之間的功能和協(xié)議即可。

    MPLS優(yōu)點(diǎn):

    1.轉(zhuǎn)發(fā)速度快

    2.利用標(biāo)記生成虛擬路徑,并在它的上面實(shí)現(xiàn)IP等數(shù)據(jù)包的通信。

    四、網(wǎng)絡(luò)編程(五)TCP詳解

    考慮最簡(jiǎn)單的情況:兩臺(tái)主機(jī)之間的通信。這個(gè)時(shí)候只需要一條網(wǎng)線把兩者連起來,規(guī)定好彼此的硬件接口,如都用 USB、電壓 10v、頻率 2.4GHz 等, 這一層就是物理層,這些規(guī)定就是物理層協(xié)議 。

    我們當(dāng)然不滿足于只有兩臺(tái)電腦連接,因此我們可以使用交換機(jī)把多個(gè)電腦連接起來,如下圖:

    這樣連接起來的網(wǎng)絡(luò),稱為局域網(wǎng),也可以稱為以太網(wǎng)(以太網(wǎng)是局域網(wǎng)的一種)。在這個(gè)網(wǎng)絡(luò)中,我們需要標(biāo)識(shí)每個(gè)機(jī)器,這樣才可以指定要和哪個(gè)機(jī)器通信。這個(gè)標(biāo)識(shí)就是硬件地址 MAC。

    硬件地址隨機(jī)器的生產(chǎn)就被確定,永久性唯一。在局域網(wǎng)中,我們需要和另外的機(jī)器通信時(shí),只需要知道他的硬件地址,交換機(jī)就會(huì)把我們的消息發(fā)送到對(duì)應(yīng)的機(jī)器。

    這里我們可以不管底層的網(wǎng)線接口如何發(fā)送,把物理層抽離,在他之上創(chuàng)建一個(gè)新的層次,這就是 數(shù)據(jù)鏈路層 。

    我們依然不滿足于局域網(wǎng)的規(guī)模,需要把所有的局域網(wǎng)聯(lián)系起來,這個(gè)時(shí)候就需要用到路由器來連接兩個(gè)局域網(wǎng):

    但是如果我們還是使用硬件地址來作為通信對(duì)象的唯一標(biāo)識(shí),那么當(dāng)網(wǎng)絡(luò)規(guī)模越來越大,需要記住所有機(jī)器的硬件地址是不現(xiàn)實(shí)的;

    同時(shí),一個(gè)網(wǎng)絡(luò)對(duì)象可能會(huì)頻繁更換設(shè)備,這個(gè)時(shí)候硬件地址表維護(hù)起來更加復(fù)雜。這里使用了一個(gè)新的地址來標(biāo)記一個(gè)網(wǎng)絡(luò)對(duì)象: IP 地址 。

    通過一個(gè)簡(jiǎn)單的寄信例子來理解 IP 地址。

    我住在北京市,我朋友 A 住在上海市,我要給朋友 A 寫信:

    因此,這里 IP 地址就是一個(gè)網(wǎng)絡(luò)接入地址(朋友 A 的住址),我只需要知道目標(biāo) IP 地址,路由器就可以把消息給我?guī)У健?strong> 在局域網(wǎng)中,就可以動(dòng)態(tài)維護(hù)一個(gè) MAC 地址與 IP 地址的映射關(guān)系,根據(jù)目的 IP 地址就可以尋找到機(jī)器的 MAC 地址進(jìn)行發(fā)送 。

    這樣我們不需管理底層如何去選擇機(jī)器,我們只需要知道 IP 地址,就可以和我們的目標(biāo)進(jìn)行通信。這一層就是 網(wǎng)絡(luò)層 。網(wǎng)絡(luò)層的核心作用就是 提供主機(jī)之間的邏輯通信

    這樣,在網(wǎng)絡(luò)中的所有主機(jī),在邏輯上都連接起來了,上層只需要提供目標(biāo) IP 地址和數(shù)據(jù),網(wǎng)絡(luò)層就可以把消息發(fā)送到對(duì)應(yīng)的主機(jī)。

    一個(gè)主機(jī)有多個(gè)進(jìn)程,進(jìn)程之間進(jìn)行不同的網(wǎng)絡(luò)通信,如邊和朋友開黑邊和女朋友聊微信。我的手機(jī)同時(shí)和兩個(gè)不同機(jī)器進(jìn)行通信。

    那么當(dāng)我的手機(jī)收到數(shù)據(jù)時(shí),如何區(qū)分是微信的數(shù)據(jù),還是王者的數(shù)據(jù)?那么就必須在網(wǎng)絡(luò)層之上再添加一層: 運(yùn)輸層

    運(yùn)輸層通過 socket(套接字),將網(wǎng)絡(luò)信息進(jìn)行進(jìn)一步的拆分,不同的應(yīng)用進(jìn)程可以獨(dú)立進(jìn)行網(wǎng)絡(luò)請(qǐng)求,互不干擾。

    這就是運(yùn)輸層的最本質(zhì)特點(diǎn): 提供進(jìn)程之間的邏輯通信 。這里的進(jìn)程可以是主機(jī)之間,也可以是同個(gè)主機(jī),所以在 android 中,socket 通信也是進(jìn)程通信的一種方式。

    現(xiàn)在不同的機(jī)器上的應(yīng)用進(jìn)程之間可以獨(dú)立通信了,那么我們就可以在計(jì)算機(jī)網(wǎng)絡(luò)上開發(fā)出形形式式的應(yīng)用:如 web 網(wǎng)頁的 http,文件傳輸 ftp 等等。這一層稱為 應(yīng)用層 。

    應(yīng)用層還可以進(jìn)一步拆分出表示層、會(huì)話層,但他們的本質(zhì)特點(diǎn)都沒有改變: 完成具體的業(yè)務(wù)需求 。和下面的四層相比,他們并不是必須的,可以歸屬到應(yīng)用層中。

    最后對(duì)計(jì)網(wǎng)分層進(jìn)行小結(jié):

    這里需要注意的是,分層并不是在物理上的分層,而是邏輯上的分層。通過對(duì)底層邏輯的封裝,使得上層的開發(fā)可以直接依賴底層的功能而無需理會(huì)具體的實(shí)現(xiàn),簡(jiǎn)便了開發(fā)。

    這種分層的思路,也就是責(zé)任鏈設(shè)計(jì)模式,通過層層封裝,把不同的職責(zé)獨(dú)立起來,更加方便開發(fā)、維護(hù)等等。

    TCP 并不是把應(yīng)用層傳輸過來的數(shù)據(jù)直接加上首部然后發(fā)送給目標(biāo),而是把數(shù)據(jù)看成一個(gè)字節(jié) 流,給他們標(biāo)上序號(hào)之后分部分發(fā)送。這就是 TCP 的 面向字節(jié)流 特性:

    面向字節(jié)流的好處是無需一次存儲(chǔ)過大的數(shù)據(jù)占用太多內(nèi)存,壞處是無法知道這些字節(jié)代表的意義,例如應(yīng)用層發(fā)送一個(gè)音頻文件和一個(gè)文本文件,對(duì)于 TCP 來說就是一串字節(jié)流,沒有意義可言,這會(huì)導(dǎo)致粘包以及拆包問題,后面講。

    前面講到,TCP 是可靠傳輸協(xié)議,也就是,一個(gè)數(shù)據(jù)交給他,他肯定可以完整無誤地發(fā)送到目標(biāo)地址,除非網(wǎng)絡(luò)炸了。他實(shí)現(xiàn)的網(wǎng)絡(luò)模型如下:

    對(duì)于應(yīng)用層來說,他就是一個(gè)可靠傳輸?shù)牡讓又С址?wù);而運(yùn)輸層底層采用了網(wǎng)絡(luò)層的不可靠傳輸。雖然在網(wǎng)絡(luò)層甚至數(shù)據(jù)鏈路層就可以使用協(xié)議來保證數(shù)據(jù)傳輸?shù)目煽啃?,但這樣網(wǎng)絡(luò)的設(shè)計(jì)會(huì)更加復(fù)雜、效率會(huì)隨之降低。把數(shù)據(jù)傳輸?shù)目煽啃员WC放在運(yùn)輸層,會(huì)更加合適。

    可靠傳輸原理的重點(diǎn)總結(jié)一下有: 滑動(dòng)窗口、超時(shí)重傳、累積確認(rèn)、選擇確認(rèn)、連續(xù) ARQ 。

    停止等待協(xié)議

    要實(shí)現(xiàn)可靠傳輸,最簡(jiǎn)便的方法就是:我發(fā)送一個(gè)數(shù)據(jù)包給你,然后你跟我回復(fù)收到,我繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)包。傳輸模型如下:

    這種“一來一去”的方法來保證傳輸可靠就是 停止等待協(xié)議 (stop-and-wait)。不知道還記不記得前面 TCP 首部有一個(gè) ack 字段,當(dāng)他設(shè)置為 1 的時(shí)候,表示這個(gè)報(bào)文是一個(gè)確認(rèn)收到報(bào)文。

    然后再來考慮另一種情況:丟包。網(wǎng)絡(luò)環(huán)境不可靠,導(dǎo)致每一次發(fā)送的數(shù)據(jù)包可能會(huì)丟失,如果機(jī)器 A 發(fā)送了數(shù)據(jù)包丟失了,那么機(jī)器 B 永遠(yuǎn)接收不到數(shù)據(jù),機(jī)器 A 永遠(yuǎn)在等待。

    解決這個(gè)問題的方法是: 超時(shí)重傳 。當(dāng)機(jī)器 A 發(fā)出一個(gè)數(shù)據(jù)包時(shí)便開始計(jì)時(shí),時(shí)間到還沒收到確認(rèn)回復(fù),就可以認(rèn)為是發(fā)生了丟包,便再次發(fā)送,也就是重傳。

    但重傳會(huì)導(dǎo)致另一種問題:如果原先的數(shù)據(jù)包并沒有丟失,只是在網(wǎng)絡(luò)中待的時(shí)間比較久,這個(gè)時(shí)候機(jī)器 B 會(huì)受到兩個(gè)數(shù)據(jù)包,那么機(jī)器 B 是如何辨別這兩個(gè)數(shù)據(jù)包是屬于同一份數(shù)據(jù)還是不同的數(shù)據(jù)?

    這就需要前面講過的方法: 給數(shù)據(jù)字節(jié)進(jìn)行編號(hào) 。這樣接收方就可以根據(jù)數(shù)據(jù)的字節(jié)編號(hào),得出這些數(shù)據(jù)是接下來的數(shù)據(jù),還是重傳的數(shù)據(jù)。

    在 TCP 首部有兩個(gè)字段:序號(hào)和確認(rèn)號(hào),他們表示發(fā)送方數(shù)據(jù)第一個(gè)字節(jié)的編號(hào),和接收方期待的下一份數(shù)據(jù)的第一個(gè)字節(jié)的編號(hào)。

    停止等待協(xié)議的優(yōu)點(diǎn)是簡(jiǎn)單,但缺點(diǎn)是 信道利用率 太低。

    假定AB之間有一條直通的信道來傳送分組

    這里的TD是A發(fā)送分組所需要的時(shí)間(顯然TD = 分組長度 / 數(shù)據(jù)速率)再假定TA是B發(fā)送確認(rèn)分組所需要的時(shí)間(A和B處理分組的時(shí)間都忽略不計(jì))那么A在經(jīng)過TD+RTT+TA時(shí)間后才能發(fā)送下一個(gè)分組,這里的RTT是往返時(shí)間,因?yàn)橹挥蠺D是采用來傳輸有用的數(shù)據(jù)(這個(gè)數(shù)據(jù)包括了分組首部,如果可以知道傳輸更精確的數(shù)據(jù)的時(shí)間,可以計(jì)算的更精確),所有信道利用率為

    為了提高傳輸效率,發(fā)送方可以不使用低效率的停止等待協(xié)議,而是采用 流水線傳輸 :就是發(fā)送方可以 連續(xù)的發(fā)送多個(gè)分組 ,不必每發(fā)完一個(gè)分組就停下來等待對(duì)方的確認(rèn)。這樣可使信道上一直有數(shù)據(jù)不間斷地在傳送。顯然這種傳輸方式可以獲得很高的信道利用率

    停止等待協(xié)議已經(jīng)可以滿足可靠傳輸了,但有一個(gè)致命缺點(diǎn): 效率太低 。發(fā)送方發(fā)送一個(gè)數(shù)據(jù)包之后便進(jìn)入等待,這個(gè)期間并沒有干任何事,浪費(fèi)了資源。解決的方法是: 連續(xù)發(fā)送數(shù)據(jù)包 。

    也就是下面介紹的 連續(xù)ARQ協(xié)議 滑動(dòng)窗口協(xié)議

    連續(xù) ARQ 協(xié)議

    模型如下:

    和停止等待最大的不同就是,他會(huì)源源不斷地發(fā)送,接收方源源不斷收到數(shù)據(jù)之后,逐一進(jìn)行確認(rèn)回復(fù)。這樣便極大地提高了效率。但同樣,帶來了一些額外的問題:

    發(fā)送是否可以無限發(fā)送直到把緩沖區(qū)所有數(shù)據(jù)發(fā)送完?不可以。因?yàn)樾枰紤]接收方緩沖區(qū)以及讀取數(shù)據(jù)的能力。如果發(fā)送太快導(dǎo)致接收方無法接受,那么只是會(huì)頻繁進(jìn)行重傳,浪費(fèi)了網(wǎng)絡(luò)資源。所以發(fā)送方發(fā)送數(shù)據(jù)的范圍,需要考慮到接收方緩沖區(qū)的情況。這就是 TCP 的 流量控制

    解決方法是: 滑動(dòng)窗口 ?;灸P腿缦拢?/p>

    在 TCP 的首部有一個(gè)窗口大小字段,他表示接收方的剩余緩沖區(qū)大小,讓發(fā)送方可以調(diào)整自己的發(fā)送窗口大小。通過滑動(dòng)窗口,就可以實(shí)現(xiàn) TCP 的流量控制,不至于發(fā)送太快,導(dǎo)致太多的數(shù)據(jù)丟失。

    連續(xù) ARQ 帶來的第二個(gè)問題是:網(wǎng)絡(luò)中充斥著和發(fā)送數(shù)據(jù)包一樣數(shù)據(jù)量的確認(rèn)回復(fù)報(bào)文,因?yàn)槊恳粋€(gè)發(fā)送數(shù)據(jù)包,必須得有一個(gè)確認(rèn)回復(fù)。提高網(wǎng)絡(luò)效率的方法是: 累積確認(rèn) 。

    接收方不需要逐個(gè)進(jìn)行回復(fù),而是累積到一定量的數(shù)據(jù)包之后,告訴發(fā)送方,在此數(shù)據(jù)包之前的數(shù)據(jù)全都收到。例如,收到 1234,接收方只需要告訴發(fā)送方我收到 4 了,那么發(fā)送方就知道 1234 都收到了。

    第三個(gè)問題是:如何處理丟包情況。在停止等待協(xié)議中很簡(jiǎn)單,直接一個(gè)超時(shí)重傳就解決了。但,連續(xù) ARQ 中不太一樣。

    例如:接收方收到了 123 567,六個(gè)字節(jié),編號(hào)為 4 的字節(jié)丟失了。按照累積確認(rèn)的思路,只能發(fā)送 3 的確認(rèn)回復(fù),567 都必須丟掉,因?yàn)榘l(fā)送方會(huì)進(jìn)行重傳。這就是 GBN(go-back-n) 思路。

    但是我們會(huì)發(fā)現(xiàn),只需要重傳 4 即可,這樣不是很浪費(fèi)資源,所以就有了: 選擇確認(rèn) SACK 。在 TCP 報(bào)文的選項(xiàng)字段,可以設(shè)置已經(jīng)收到的報(bào)文段,每一個(gè)報(bào)文段需要兩個(gè)邊界來進(jìn)行確定。這樣發(fā)送方,就可以根據(jù)這個(gè)選項(xiàng)字段只重傳丟失的數(shù)據(jù)了。

    第四個(gè)問題是:擁塞控制的問題

    也是通過窗口的大小來控制的,但是檢測(cè)網(wǎng)絡(luò)滿不滿是個(gè)挺難的事情,所以 TCP 發(fā)送包經(jīng)常被比喻成往誰管理灌水,所以擁塞控制就是在不堵塞,不丟包的情況下盡可能的發(fā)揮帶寬。

    水管有粗細(xì),網(wǎng)絡(luò)有帶寬,即每秒鐘能發(fā)送多少數(shù)據(jù);水管有長度,端到端有時(shí)延。理想狀態(tài)下,水管里面的水 = 水管粗細(xì) * 水管長度。對(duì)于網(wǎng)絡(luò)上,通道的容量 = 帶寬 * 往返時(shí)延。

    如果我們?cè)O(shè)置發(fā)送窗口,使得發(fā)送但未確認(rèn)的包為通道的容量,就能撐滿整個(gè)管道。

    如圖所示,假設(shè)往返時(shí)間為 8 秒,去 4 秒,回 4 秒,每秒發(fā)送一個(gè)包,已經(jīng)過去了 8 秒,則 8 個(gè)包都發(fā)出去了,其中前四個(gè)已經(jīng)到達(dá)接收端,但是 ACK 還沒返回,不能算發(fā)送成功,5-8 后四個(gè)包還在路上,還沒被接收,這個(gè)時(shí)候,管道正好撐滿,在發(fā)送端,已發(fā)送未確認(rèn)的 8 個(gè)包,正好等于帶寬,也即每秒發(fā)送一個(gè)包,也即每秒發(fā)送一個(gè)包,乘以來回時(shí)間 8 秒。

    如果在這個(gè)基礎(chǔ)上調(diào)大窗口,使得單位時(shí)間可以發(fā)送更多的包,那么會(huì)出現(xiàn)接收端處理不過來,多出來的包會(huì)被丟棄,這個(gè)時(shí)候,我們可以增加一個(gè)緩存,但是緩存里面的包 4 秒內(nèi)肯定達(dá)不到接收端課,它的缺點(diǎn)會(huì)增加時(shí)延,如果時(shí)延達(dá)到一定程度就會(huì)超時(shí)重傳

    TCP 擁塞控制主要來避免兩種現(xiàn)象,包丟失和超時(shí)重傳,一旦出現(xiàn)了這些現(xiàn)象說明發(fā)送的太快了,要慢一點(diǎn)。

    具體的方法就是發(fā)送端慢啟動(dòng),比如倒水,剛開始倒的很慢,漸漸變快。然后設(shè)置一個(gè)閾值,當(dāng)超過這個(gè)值的時(shí)候就要慢下來

    慢下來還是在增長,這時(shí)候就可能水滿則溢,出現(xiàn)擁塞,需要降低倒水的速度,等水慢慢滲下去。

    擁塞的一種表現(xiàn)是丟包,需要超時(shí)重傳,這個(gè)時(shí)候,采用快速重傳算法,將當(dāng)前速度變?yōu)橐话?。所以速度還是在比較高的值,也沒有一夜回到解放前。

    到這里關(guān)于 TCP 的可靠傳輸原理就已經(jīng)介紹得差不多。最后進(jìn)行一個(gè)小結(jié):

    當(dāng)然,這只是可靠傳輸?shù)谋揭唤?,感興趣可以再深入去研究

    以上就是關(guān)于tcp調(diào)整器安卓版相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    chatGPT手機(jī)驗(yàn)證碼(驗(yàn)證碼captcha)

    ChatGPT需要多少算力(1btc需要多少算力)

    ChatGP有中文版嗎(chatcraftpro下載)

    景觀設(shè)計(jì)實(shí)戰(zhàn)(景觀設(shè)計(jì)初學(xué)者實(shí)戰(zhàn)寶典)

    學(xué)景觀設(shè)計(jì)考研嗎(景觀設(shè)計(jì)專業(yè)考研可以考什么方向)