十年架構(gòu)師教你:如何搞定計(jì)算機(jī)網(wǎng)絡(luò)面試(終結(jié)篇)

本文接上期內(nèi)容添诉。

TCP 協(xié)議如何保證可靠傳輸


1梢褐、應(yīng)用數(shù)據(jù)被分割成 TCP 認(rèn)為最適合發(fā)送的數(shù)據(jù)塊旺遮。

2、TCP 給發(fā)送的每一個包進(jìn)行編號盈咳,接收方對數(shù)據(jù)包進(jìn)行排序耿眉,把有序數(shù)據(jù)傳送給應(yīng)用層。

3猪贪、校驗(yàn)和:?TCP 將保持它首部和數(shù)據(jù)的檢驗(yàn)和跷敬,這是一個端到端的檢驗(yàn)和讯私,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化热押。如果收到段的檢驗(yàn)和有差錯,TCP 將丟棄這個報(bào)文段和不確認(rèn)收到此報(bào)文段斤寇。

4桶癣、TCP 的接收端會丟棄重復(fù)的數(shù)據(jù)。

5娘锁、流量控制:?TCP 連接的每一方都有固定大小的緩沖空間牙寞,TCP的接收端只允許發(fā)送端發(fā)送接收端緩沖區(qū)能接納的數(shù)據(jù)。當(dāng)接收方來不及處理發(fā)送方的數(shù)據(jù)莫秆,能提示發(fā)送方降低發(fā)送的速率间雀,防止包丟失。TCP 使用的流量控制協(xié)議是可變大小的滑動窗口協(xié)議(TCP 利用滑動窗口實(shí)現(xiàn)流量控制)镊屎。

6惹挟、擁塞控制:?當(dāng)網(wǎng)絡(luò)擁塞時,減少數(shù)據(jù)的發(fā)送缝驳。

7连锯、停止等待協(xié)議:為了實(shí)現(xiàn)可靠傳輸归苍,它的基本原理是每發(fā)完一個分組就停止發(fā)送,等待對方確認(rèn)运怖,在收到確認(rèn)后再發(fā)下一個分組拼弃。

8、超時重傳:?當(dāng) TCP 發(fā)出一個段后摇展,它啟動一個定時器吻氧,等待目的端確認(rèn)收到這個報(bào)文段;如果不能及時收到一個確認(rèn)咏连,將重發(fā)這個報(bào)文段医男。


停止等待協(xié)議


停止等待協(xié)議是為了實(shí)現(xiàn)可靠傳輸,它的基本原理是每發(fā)完一個分組就停止發(fā)送捻勉,等待對方確認(rèn)镀梭,在收到確認(rèn)后再發(fā)下一個分組;在停止等待協(xié)議中踱启,若接收方收到重復(fù)分組报账,就丟棄該分組,但同時還要發(fā)送確認(rèn)埠偿。

1透罢、無差錯情況:

發(fā)送方發(fā)送分組,接收方在規(guī)定時間內(nèi)收到冠蒋,并且回復(fù)確認(rèn)羽圃,發(fā)送方再次發(fā)送。


2抖剿、出現(xiàn)差錯情況(超時重傳):

停止等待協(xié)議中超時重傳是指只要超過一段時間仍然沒有收到確認(rèn)朽寞,就重傳前面發(fā)送過的分組(認(rèn)為剛才發(fā)送過的分組丟失了)。因此斩郎,每發(fā)送完一個分組需要設(shè)置一個超時計(jì)時器脑融,其重轉(zhuǎn)時間應(yīng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r間更長一些,這種自動重傳方式常稱為自動重傳請求ARQ 缩宜。另外肘迎,在停止等待協(xié)議中若收到重復(fù)分組,就丟棄該分組锻煌,但還要發(fā)送確認(rèn)妓布,連續(xù)ARQ 協(xié)議可提高信道利用率。發(fā)送維持一個發(fā)送窗口宋梧,凡位于發(fā)送窗口內(nèi)的分組可連續(xù)發(fā)送出去匣沼,而不需要等待對方確認(rèn);接收方一般采用累積確認(rèn)乃秀,對按序到達(dá)的最后一個分組發(fā)送確認(rèn)肛著,表明到這個分組位置的所有分組都已經(jīng)正確收到了圆兵。


3、確認(rèn)丟失和確認(rèn)遲到

確認(rèn)丟失:確認(rèn)消息在傳輸過程丟失

當(dāng)A發(fā)送M1消息枢贿,B收到后殉农,B向A發(fā)送了一個M1確認(rèn)消息,但卻在傳輸過程中丟失局荚。而A并不知道超凳,在超時計(jì)時過后,A重傳M1消息耀态,B再次收到該消息后采取以下兩點(diǎn)措施:

1轮傍、丟棄這個重復(fù)的M1消息,不向上層交付首装。

2创夜、向A發(fā)送確認(rèn)消息。(不會認(rèn)為已經(jīng)發(fā)送過了仙逻,就不再發(fā)送驰吓。A能重傳,就證明B的確認(rèn)消息丟失)系奉。

確認(rèn)遲到?:確認(rèn)消息在傳輸過程中遲到

A發(fā)送M1消息檬贰,B收到并發(fā)送確認(rèn)。在超時時間內(nèi)沒有收到確認(rèn)消息缺亮,A重傳M1消息翁涤,B仍然收到并繼續(xù)發(fā)送確認(rèn)消息(B收到了2份M1)。此時萌踱,A收到了B第二次發(fā)送的確認(rèn)消息葵礼,接著發(fā)送其他數(shù)據(jù)。過了一會虫蝶,A收到了B第一次發(fā)送的對M1的確認(rèn)消息(A也收到了2份確認(rèn)消息)章咧。處理如下:

(1)A收到重復(fù)的確認(rèn)后,直接丟棄能真。

(2)B收到重復(fù)的M1后,也直接丟棄重復(fù)的M1扰柠。


自動重傳請求 ARQ 協(xié)議


停止等待協(xié)議中超時重傳是指只要超過一段時間仍然沒有收到確認(rèn)粉铐,就重傳前面發(fā)送過的分組(認(rèn)為剛才發(fā)送過的分組丟失了)。因此每發(fā)送完一個分組需要設(shè)置一個超時計(jì)時器卤档,其重轉(zhuǎn)時間應(yīng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r間更長一些蝙泼。這種自動重傳方式常稱為自動重傳請求ARQ似舵。

優(yōu)點(diǎn):?簡單

缺點(diǎn):?信道利用率低


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


連續(xù) ARQ 協(xié)議可提高信道利用率诚些。發(fā)送方維持一個發(fā)送窗口症脂,凡位于發(fā)送窗口內(nèi)的分組可以連續(xù)發(fā)送出去句占,而不需要等待對方確認(rèn)。接收方一般采用累計(jì)確認(rèn)溪胶,對按序到達(dá)的最后一個分組發(fā)送確認(rèn)搂擦,表明到這個分組為止的所有分組都已經(jīng)正確收到了。

優(yōu)點(diǎn):?信道利用率高哗脖,容易實(shí)現(xiàn)瀑踢,即使確認(rèn)丟失,也不必重傳才避。

缺點(diǎn):?不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息橱夭。 比如:發(fā)送方發(fā)送了 5條 消息,中間第三條丟失(3號)桑逝,這時接收方只能對前兩個發(fā)送確認(rèn)棘劣;發(fā)送方無法知道后三個分組的下落,而只好把后三個全部重傳一次楞遏。這也叫 Go-Back-N(回退 N)呈础,表示需要退回來重傳已經(jīng)發(fā)送過的 N 個消息。


滑動窗口(Sliding window)


1橱健、TCP 利用滑動窗口實(shí)現(xiàn)流量控制的機(jī)制而钞。

2、滑動窗口是一種流量控制技術(shù)拘荡。早期的網(wǎng)絡(luò)通信中臼节,通信雙方不會考慮網(wǎng)絡(luò)的擁擠情況直接發(fā)送數(shù)據(jù)。由于大家不知道網(wǎng)絡(luò)擁塞狀況珊皿,同時發(fā)送數(shù)據(jù)网缝,導(dǎo)致中間節(jié)點(diǎn)阻塞掉包,誰也發(fā)不了數(shù)據(jù)蟋定,所以就有了滑動窗口機(jī)制來解決此問題粉臊。

3、TCP 中采用滑動窗口來進(jìn)行傳輸控制驶兜,滑動窗口的大小意味著接收方還有多大的緩沖區(qū)可以用于接收數(shù)據(jù)扼仲。發(fā)送方可以通過滑動窗口的大小來確定應(yīng)該發(fā)送多少字節(jié)的數(shù)據(jù),當(dāng)滑動窗口為0時抄淑,發(fā)送方一般不能再發(fā)送數(shù)據(jù)報(bào)屠凶。但有兩種情況除外,一種情況是可以發(fā)送緊急數(shù)據(jù)肆资,例如矗愧,允許用戶終止在遠(yuǎn)端機(jī)上的運(yùn)行進(jìn)程;另一種情況是發(fā)送方可以發(fā)送一個1字節(jié)的數(shù)據(jù)報(bào)來通知接收方重新聲明它希望接收的下一字節(jié)及發(fā)送方的滑動窗口大小郑原。


流量控制


1唉韭、TCP 利用滑動窗口實(shí)現(xiàn)流量控制夜涕。

2、流量控制是為了控制發(fā)送方發(fā)送速率属愤,保證接收方來得及接收女器。

3、接收方發(fā)送的確認(rèn)報(bào)文中的窗口字段可以用來控制發(fā)送方窗口大小春塌,從而影響發(fā)送方的發(fā)送速率晓避。將窗口字段設(shè)置為 0,則發(fā)送方不能發(fā)送數(shù)據(jù)只壳。


擁塞控制


在某段時間俏拱,若對網(wǎng)絡(luò)中某一資源的需求超過了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞吼句,這種情況就叫擁塞锅必。擁塞控制是為了防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致過載惕艳。擁塞控制所要做的有一個前提搞隐,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷。擁塞控制是一個全局性的過程远搪,涉及到所有的主機(jī)劣纲、所有的路由器、以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素谁鳍。相反癞季,流量控制往往是點(diǎn)對點(diǎn)通信量的控制,是端到端的問題倘潜,流量控制所要做到的是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率绷柒,以便使接收端來得及接收。

為了進(jìn)行擁塞控制涮因,TCP 發(fā)送方要維持一個擁塞窗口的狀態(tài)變量废睦,擁塞控制窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動態(tài)變化养泡,發(fā)送方讓自己的發(fā)送窗口取為擁塞窗口和接收方的接受窗口中較小的一個嗜湃。

TCP的擁塞控制采用了四種算法,即?慢開始?瓤荔、?擁塞避免?净蚤、快重傳?和?快恢復(fù)。在網(wǎng)絡(luò)層也可以使路由器采用適當(dāng)?shù)姆纸M丟棄策略(如主動隊(duì)列管理 AQM)输硝,以減少網(wǎng)絡(luò)擁塞的發(fā)生。

1程梦、慢開始:?慢開始算法的思路是當(dāng)主機(jī)開始發(fā)送數(shù)據(jù)時点把,如果立即把大量數(shù)據(jù)字節(jié)注入到網(wǎng)絡(luò)橘荠,那么可能會引起網(wǎng)絡(luò)阻塞,因?yàn)楝F(xiàn)在還不知道網(wǎng)絡(luò)的符合情況郎逃。經(jīng)驗(yàn)表明哥童,較好的方法是先探測一下,即由小到大逐漸增大發(fā)送窗口褒翰,也就是由小到大逐漸增大擁塞窗口數(shù)值贮懈。cwnd初始值為1,每經(jīng)過一個傳播輪次优训,cwnd加倍朵你。



2、擁塞避免:?擁塞避免算法的思路是讓擁塞窗口cwnd緩慢增大揣非,即每經(jīng)過一個往返時間RTT就把發(fā)送放的cwnd加1抡医。

3、快重傳與快恢復(fù):?在 TCP/IP 中早敬,快速重傳和恢復(fù)(fast retransmit and recovery忌傻,F(xiàn)RR)是一種擁塞控制算法,它能快速恢復(fù)丟失的數(shù)據(jù)包搞监。沒有 FRR水孩,如果數(shù)據(jù)包丟失了,TCP 將會使用定時器來要求傳輸暫停琐驴,在暫停的這段時間內(nèi)俘种,沒有新的或復(fù)制的數(shù)據(jù)包被發(fā)送。有了 FRR棍矛,如果接收機(jī)接收到一個不按順序的數(shù)據(jù)段安疗,它會立即給發(fā)送機(jī)發(fā)送一個重復(fù)確認(rèn);如果發(fā)送機(jī)接收到三個重復(fù)確認(rèn)够委,它會假定確認(rèn)件指出的數(shù)據(jù)段丟失了荐类,并立即重傳這些丟失的數(shù)據(jù)段。有了 FRR茁帽,就不會因?yàn)橹貍鲿r要求的暫停被耽誤玉罐。當(dāng)有單獨(dú)的數(shù)據(jù)包丟失時,快速重傳和恢復(fù)(FRR)能最有效地工作潘拨;當(dāng)有多個數(shù)據(jù)信息包在某一段很短的時間內(nèi)丟失時吊输,它則不能很有效地工作。



在瀏覽器中輸入url地址 ->> 顯示主頁的過程(面試程罚客)

百度好像最喜歡問這個問題季蚂。

打開一個網(wǎng)頁,整個過程會使用哪些協(xié)議



狀態(tài)碼



各種協(xié)議與HTTP協(xié)議之間的關(guān)系


一般面試官會通過這樣的問題來考察你對計(jì)算機(jī)網(wǎng)絡(luò)知識體系的理解。



HTTP長連接扭屁、短連接


在HTTP/1.0中默認(rèn)使用短連接算谈,也就是說,客戶端和服務(wù)器每進(jìn)行一次HTTP操作料滥,就建立一次連接然眼,任務(wù)結(jié)束就中斷連接。當(dāng)客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件葵腹、圖像文件高每、CSS文件等),每遇到這樣一個Web資源践宴,瀏覽器就會重新建立一個HTTP會話鲸匿。

而從HTTP/1.1起,默認(rèn)使用長連接浴井,用以保持連接特性晒骇,使用長連接的HTTP協(xié)議,會在響應(yīng)頭加入這行代碼:

(1)Connection:keep-alive

(2)復(fù)制代碼

在使用長連接的情況下磺浙,當(dāng)一個網(wǎng)頁打開完成后洪囤,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,客戶端再次訪問這個服務(wù)器時撕氧,會繼續(xù)使用這一條已經(jīng)建立的連接瘤缩。Keep-Alive不會永久保持連接,它有一個保持時間伦泥,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個時間剥啤。實(shí)現(xiàn)長連接需要客戶端和服務(wù)端都支持長連接。

HTTP協(xié)議的長連接和短連接不脯,實(shí)質(zhì)上是TCP協(xié)議的長連接和短連接府怯。

想要看完整的計(jì)算機(jī)網(wǎng)絡(luò)面試可進(jìn)鏈接—十年架構(gòu)師教你:如何搞定計(jì)算機(jī)網(wǎng)絡(luò)面試(一)

http://www.reibang.com/p/b32518236281

如果對java微服務(wù)、分布式防楷、高并發(fā)牺丙、高可用、大型互聯(lián)網(wǎng)架構(gòu)技術(shù)复局、面試經(jīng)驗(yàn)交流等等感興趣的同學(xué)冲簿,可以關(guān)注我,我會不定期免費(fèi)發(fā)放資料鏈接亿昏,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我峦剔,我會注明出處之后分享給大家。歡迎分享角钩,歡迎評論吝沫,歡迎轉(zhuǎn)發(fā)呻澜,需要資料的同學(xué)加入Java后端技術(shù)群:819940388,或關(guān)注微信公眾號:Java資訊庫野舶,回復(fù)“架構(gòu)”易迹,免費(fèi)的大型互聯(lián)網(wǎng)Java技術(shù)視頻分享給大家宰衙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末平道,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子供炼,更是在濱河造成了極大的恐慌一屋,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袋哼,死亡現(xiàn)場離奇詭異冀墨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涛贯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門诽嘉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟翘,你說我怎么就攤上這事虫腋。” “怎么了稀余?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵悦冀,是天一觀的道長。 經(jīng)常有香客問我睛琳,道長盒蟆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任师骗,我火速辦了婚禮历等,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辟癌。我一直安慰自己寒屯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布愿待。 她就那樣靜靜地躺著浩螺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仍侥。 梳的紋絲不亂的頭發(fā)上要出,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音农渊,去河邊找鬼患蹂。 笑死或颊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的传于。 我是一名探鬼主播囱挑,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沼溜!你這毒婦竟也來了平挑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤系草,失蹤者是張志新(化名)和其女友劉穎通熄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體找都,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唇辨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了能耻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏枚。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晓猛,靈堂內(nèi)的尸體忽然破棺而出饿幅,到底是詐尸還是另有隱情,我是刑警寧澤鞍帝,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布诫睬,位于F島的核電站,受9級特大地震影響帕涌,放射性物質(zhì)發(fā)生泄漏摄凡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一蚓曼、第九天 我趴在偏房一處隱蔽的房頂上張望亲澡。 院中可真熱鬧,春花似錦纫版、人聲如沸床绪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癞己。三九已至,卻和暖如春梭伐,著一層夾襖步出監(jiān)牢的瞬間痹雅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工糊识, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绩社,地道東北人摔蓝。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像愉耙,于是被迫代替她去往敵國和親贮尉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361