本文接上期內(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ù)視頻分享給大家宰衙。