點擊上方“程序員江湖”,選擇“置頂或者星標”
你關注的就是我關心的!
文章目錄結構:
-
一 OSI與TCP/IP各層的結構與功能,都有哪些協議
-
運輸層主要使用以下兩種協議:
-
UDP的主要特點:
-
TCP的主要特點:
-
域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)
-
HTTP協議
-
五層協議的體系結構
-
1 應用層(application layer)
-
2 運輸層(transport layer)
-
3 網絡層(network layer)
-
4 數據鏈路層(data link layer)
-
5 物理層(physical layer)
-
-
二 TCP三次握手和四次揮手(面試常客)
-
為什么要三次握手?
-
為什么要傳回SYN(發起一個新鏈接)?
-
傳了SYN,為啥還要傳ACK(確認序號有效)?
-
為什么要四次揮手?
-
-
三 TCP、UDP協議的區別
-
四 TCP協議如何保證可靠傳輸
-
超時重傳
-
停止等待協議
-
滑動窗口
-
流量控制
-
擁塞控制
-
五 在瀏覽器中輸入url地址 ->> 顯示主頁的過程(面試常客)
-
六 狀態碼
-
七 各種協議與HTTP協議之間的關系
-
八 HTTP長連接、短連接
-
-
寫在最后
-
計算機網絡常見問題回顧
-
建議
-
一 OSI與TCP/IP各層的結構與功能,都有哪些協議
五層協議的體系結構
學習計算機網絡時我們一般采用折中的辦法,也就是中和OSI和TCP/IP的優點,采用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚。
結合互聯網的情況,自上而下地,非常簡要的介紹一下各層的作用。
1 應用層
應用層(application-layer)的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。對於不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如域名系統DNS,支持萬維網應用的HTTP協議,支持電子郵件的SMTP協議等等。我們把應用層交互的數據單元稱為報文。
域名系統
域名系統(Domain Name System縮寫DNS,Domain Name被譯為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。(百度百科)例如:一個公司的Web網站可看作是它在網上的門戶,而域名就相當於其門牌地址,通常域名都使用該公司的名稱或簡稱。例如上面提到的微軟公司的域名,類似的還有:IBM公司的域名是www.ibm.com、Oracle公司的域名是www.oracle.com、Cisco公司的域名是www.cisco.com等。
HTTP協議
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標准。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。(百度百科)
2 運輸層
運輸層(transport layer)的主要任務就是負責向兩台主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。“通用的”是指並不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由於一台主機可同時運行多個線程,因此運輸層有復用和分用的功能。所謂復用就是指多個應用層進程可同時使用下面運輸層的服務,分用和復用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。
運輸層主要使用以下兩種協議
-
傳輸控制協議TCP(Transmisson Control Protocol)--提供面向連接的,可靠的數據傳輸服務。
-
用戶數據協議UDP(User Datagram Protocol)--提供無連接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。
UDP的主要特點
-
UDP是無連接的;
-
UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態(這里面有許多參數);
-
UDP是面向報文的;
-
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等);
-
UDP支持一對一、一對多、多對一和多對多的交互通信;
-
UDP的首部開銷小,只有8個字節,比TCP的20個字節的首部要短。
TCP的主要特點
-
TCP是面向連接的。(就好像打電話一樣,通話前需要先撥號建立連接,通話結束后要掛機釋放連接);
-
每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的(一對一);
-
TCP提供可靠交付的服務。通過TCP連接傳送的數據,無差錯、不丟失、不重復、並且按序到達;
-
TCP提供全雙工通信。TCP允許通信雙方的應用進程在任何時候都能發送數據。TCP連接的兩端都設有發送緩存和接收緩存,用來臨時存放雙方通信的數據;
-
面向字節流。TCP中的“流”(stream)指的是流入進程或從進程流出的字節序列。“面向字節流”的含義是:雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序交下來的數據僅僅看成是一連串的無結構的字節流。
3 網絡層
網絡層(network layer)負責為分組交換網上的不同主機提供通信服務。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在TCP/IP體系結構中,由於網絡層使用IP協議,因此分組也叫IP數據報,簡稱數據報。
這里要注意:不要把運輸層的“用戶數據報UDP”和網絡層的“IP數據報”弄混。另外,無論是哪一層的數據單元,都可籠統地用“分組”來表示。
網絡層的另一個任務就是選擇合適的路由,使源主機運輸層所傳下來的分株,能通過網絡層中的路由器找到目的主機。
這里強調指出,網絡層中的“網絡”二字已經不是我們通常談到的具體網絡,而是指計算機網絡體系結構模型中第三層的名稱.
互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接起來的。互聯網使用的網絡層協議是無連接的網際協議(Intert Prococol)和許多路由選擇協議,因此互聯網的網絡層也叫做網際層或IP層。
4 數據鏈路層
數據鏈路層(data link layer)通常簡稱為鏈路層。兩台主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝程幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。
在接收數據時,控制信息使接收端能夠知道一個幀從哪個比特開始和到哪個比特結束。這樣,數據鏈路層在收到一個幀后,就可從中提出數據部分,上交給網絡層。控制信息還使接收端能夠檢測到所收到的幀中有誤差錯。如果發現差錯,數據鏈路層就簡單地丟棄這個出了差錯的幀,以避免繼續在網絡中傳送下去白白浪費網絡資源。如果需要改正數據在鏈路層傳輸時出現差錯(這就是說,數據鏈路層不僅要檢錯,而且還要糾錯),那么就要采用可靠性傳輸協議來糾正出現的差錯。這種方法會使鏈路層的協議復雜些。
5 物理層
在物理層上所傳送的數據單位是比特。物理層(physical layer)的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么。“透明傳送比特流”表示經實際電路傳送后的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。
在互聯網使用的各種協中最重要和最著名的就是TCP/IP兩個協議。現在人們經常提到的TCP/IP並不一定單指TCP和IP這兩個具體的協議,而往往表示互聯網所使用的整個TCP/IP協議族。
上面我們對計算機網絡的五層體系結構有了初步的了解,下面附送一張七層體系結構圖總結一下。
圖片來源:
https://blog.csdn.net/yaopeng_2005/article/details/7064869
二 TCP三次握手和四次揮手(面試常客)
為了准確無誤地把數據送達目標處,TCP協議采用了三次握手策略。
漫畫圖解:
圖片來源:《圖解HTTP》
簡單示意圖:
-
客戶端–發送帶有SYN標志的數據包–一次握手–服務端
-
服務端–發送帶有SYN/ACK標志的數據包–二次握手–客戶端
-
客戶端–發送帶有帶有ACK標志的數據包–三次握手–服務端
為什么要三次握手
三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數據的發送與接收,而三次握手最主要的目的就是雙方確認自己與對方的發送與接收是正常的。
第一次握手:Client什么都不能確認;Server確認了對方發送正常
第二次握手:Client確認了:自己發送、接收正常,對方發送、接收正常;Server確認了:自己接收正常,對方發送正常
第三次握手:Client確認了:自己發送、接收正常,對方發送、接收正常;Server確認了:自己發送、接收正常,對方發送接收正常
所以三次握手就能確認雙發收發功能都正常,缺一不可。
為什么要傳回syn
接收端傳回發送端所發送的SYN是為了告訴發送端,我接收到的信息確實就是你所發送的信號了。
傳了SYN,為啥還要傳ACK
雙方通信無誤必須是兩者互相發送信息都無誤。傳了SYN,證明發送方到接收方的通道沒有問題,但是接收方到發送方的通道還需要ACK信號來進行驗證。
斷開一個TCP連接則需要“四次揮手”:
-
客戶端-發送一個FIN,用來關閉客戶端到服務器的數據傳送
-
服務器-收到這個FIN,它發回一個ACK,確認序號為收到的序號加1 。和SYN一樣,一個FIN將占用一個序號
-
服務器-關閉與客戶端的連接,發送一個FIN給客戶端
-
客戶端-發回ACK報文確認,並將確認序號設置為收到序號加1
為什么要四次揮手
任何一方都可以在數據傳送結束后發出連接釋放的通知,待對方確認后進入半關閉狀態。當另一方也沒有數據再發送的時候,則發出連接釋放通知,對方確認后就完全關閉了TCP連接。
舉個例子:A和B打電話,通話即將結束后,A說“我沒啥要說的了”,B回答“我知道了”,但是B可能還會有要說的話,A不能要求B跟着自己的節奏結束通話,於是B可能又巴拉巴拉說了一通,最后B說“我說完了”,A回答“知道了”,這樣通話才算結束。
上面講的比較概括,推薦一篇講的比較細致的文章:https://blog.csdn.net/qzcsu/article/details/72861891
三 TCP、UDP協議的區別
UDP在傳送數據之前不需要先建立連接,遠地主機在收到UDP報文后,不需要給出任何確認。雖然UDP不提供可靠交付,但在某些情況下UDP確是一種最有效的工作方式(一般用於即時通信),比如: QQ語音 QQ視頻 、直播等等
TCP提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。TCP不提供廣播或多播服務。由於TCP要提供可靠的,面向連接的運輸服務(TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源),這一難以避免增加了許多開銷,如確認,流量控制,計時器以及連接管理等。這不僅使協議數據單元的首部增大很多,還要占用許多處理機資源。TCP一般用於文件傳輸、發送和接收郵件、遠程登錄等場景。
四 TCP協議如何保證可靠傳輸
-
應用數據被分割成TCP認為最適合發送的數據塊。
-
超時重傳: 當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
-
TCP給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。
-
校驗和: TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。
-
TCP的接收端會丟棄重復的數據。
-
流量控制: TCP連接的每一方都有固定大小的緩沖空間,TCP的接收端只允許發送端發送接收端緩沖區能接納的我數據。當接收方來不及處理發送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP使用的流量控制協議是可變大小的滑動窗口協議。 (TCP利用滑動窗口實現流量控制)
-
擁塞控制: 當網絡擁塞時,減少數據的發送。
-
停止等待ARQ協議(stop and wait) 也是為了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認后再發下一個分組。
超時重傳
停止等待協議中超時重傳是指只要超過一段時間仍然沒有收到確認,就重傳前面發送過的分組(認為剛才發送過的分組丟失了)。因此每發送完一個分組需要設置一個超時計時器,其重轉時間應比數據在分組傳輸的平均往返時間更長一些。這種自動重傳方式常稱為自動重傳請求ARQ。另外在停止等待協議中若收到重復分組,就丟棄該分組,但同時還要發送確認。連續ARQ協議可提高信道利用率。發送維持一個發送窗口,凡位於發送窗口內的分組可連續發送出去,而不需要等待對方確認。接收方一般采用累積確認,對按序到達的最后一個分組發送確認,表明到這個分組位置的所有分組都已經正確收到了。
停止等待協議
-
停止等待協議是為了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認后再發下一個分組。
-
為了提高傳輸效率,發送方可以不使用低效率的停止等待協議,而是采用流水線傳輸。流水線傳輸就是發送方可連續發送多個分組,不必每發完一個分組就停下來等待對方確認。這樣可使信道上一直有數據不間斷的在傳送。這種傳輸方式可以明顯提高信道利用率。
滑動窗口
TCP利用滑動窗口實現流量控制的機制。
發送窗口里面的序號表示允許發送的序號。發送窗口后沿的后面部分表示已發送且已收到確認,而發送窗口前沿的前面部分表示不暈與發送。發送窗口后沿的變化情況有兩種可能,即不動(沒有收到新的確認)和前移(收到了新的確認)。發送窗口的前沿通常是不斷向前移動的。一般來說,我們總是希望數據傳輸更快一些。但如果發送方把數據發送的過快,接收方就可能來不及接收,這就會造成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。
流量控制
流量控制是為了控制發送方發送速率,保證接收方來得及接收。
接收方發送的確認報文中的窗口字段可以用來控制發送方窗口大小,從而影響發送方的發送速率。將窗口字段設置為 0,則發送方不能發送數據。
擁塞控制
在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞。這種情況就叫擁塞。擁塞控制就是為了防止過多的數據注入到網絡中,這樣就可以使網絡中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提,就是網絡能夠承受現有的網絡負荷。擁塞控制是一個全局性的過程,涉及到所有的主機,所有的路由器,以及與降低網絡傳輸性能有關的所有因素。相反,流量控制往往是點對點通信量的控制,是個端到端的問題。流量控制所要做到的就是抑制發送端發送數據的速率,以便使接收端來得及接收。
為了進行擁塞控制,TCP發送方要維持一個 擁塞窗口(cwnd) 的狀態變量。擁塞控制窗口的大小取決於網絡的擁塞程度,並且動態變化。發送方讓自己的發送窗口取為擁塞窗口和接收方的接受窗口中較小的一個。
TCP的擁塞控制采用了四種算法,即 慢開始 、 擁塞避免 、快重傳 和 快恢復。在網絡層也可以使路由器采用適當的分組丟棄策略(如主動隊列管理AQM),以減少網絡擁塞的發生。
-
慢開始:
慢開始算法的思路是當主機開始發送數據時,如果立即把大量數據字節注入到網絡,那么可能會引起網絡阻塞,因為現在還不知道網絡的符合情況。經驗表明,較好的方法是先探測一下,即由小到大逐漸增大發送窗口,也就是由小到大逐漸增大擁塞窗口數值。cwnd初始值為1,每經過一個傳播輪次,cwnd加倍。
-
擁塞避免:
擁塞避免算法的思路是讓擁塞窗口cwnd緩慢增大,即每經過一個往返時間RTT就把發送放的cwnd加1.
-
快重傳與快恢復:
在TCP/IP中,快速重傳和恢復(fast retransmit and recovery,FRR)是一種擁塞控制算法,它能快速恢復丟失的數據包。沒有FRR,如果數據包丟失了,TCP將會使用定時器來要求傳輸暫停。在暫停的這段時間內,沒有新的或復制的數據包被發送。有了FRR,如果接收機接收到一個不按順序的數據段,它會立即給發送機發送一個重復確認。如果發送機接收到三個重復確認,它會假定確認件指出的數據段丟失了,並立即重傳這些丟失的數據段。有了FRR,就不會因為重傳時要求的暫停被耽誤。 當有單獨的數據包丟失時,快速重傳和恢復(FRR)能最有效地工作。當有多個數據信息包在某一段很短的時間內丟失時,它則不能很有效地工作。
五 在瀏覽器中輸入url地址 ->> 顯示主頁的過程(面試常客)
百度好像最喜歡問這個問題。
打開一個網頁,整個過程會使用哪些協議
圖片來源:《圖解HTTP》
六 狀態碼
七 各種協議與HTTP協議之間的關系
一般面試官會通過這樣的問題來考察你對計算機網絡知識體系的理解。
圖片來源:《圖解HTTP》
八 HTTP長連接、短連接
在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。
而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:
-
Connection:keep-alive
在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。
HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
—— 《HTTP長連接、短連接究竟是什么?》
寫在最后
計算機網絡常見問題回顧
-
①TCP三次握手和四次揮手、
-
②在瀏覽器中輸入url地址->>顯示主頁的過程
-
③HTTP和HTTPS的區別
-
④TCP、UDP協議的區別
-
⑤常見的狀態碼。
建議
非常推薦大家看一下 《圖解HTTP》 這本書,這本書頁數不多,但是內容很是充實,不管是用來系統的掌握網絡方面的一些知識還是說純粹為了應付面試都有很大幫助。下面的一些文章只是參考。大二學習這門課程的時候,我們使用的教材是 《計算機網絡第七版》(謝希仁編著),不推薦大家看這本教材,書非常厚而且知識偏理論,不確定大家能不能心平氣和的讀完。
參考:
《計算機網絡第七版》(謝希仁編著)
https://blog.csdn.net/qq_16209077/article/details/52718250
https://blog.csdn.net/zixiaomuwu/article/details/60965466
文能碼字,武能coding,是我黃小斜,不是黃老邪噢。
推薦閱讀:
喜歡本文的話,就點一下“在看”吧