天天看點

搞定計算機網絡面試,看這篇就夠了

文章目錄結構:

  •  一 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,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網絡協定。所有的WWW檔案都必須遵守這個标準。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。(百度百科)

2 運輸層

運輸層(transport layer)的主要任務就是負責向兩台主機程序之間的通信提供通用的資料傳輸服務。應用程序利用該服務傳送應用層封包。“通用的”是指并不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由于一台主機可同時運作多個線程,是以運輸層有複用和分用的功能。所謂複用就是指多個應用層程序可同時使用下面運輸層的服務,分用和複用相反,是運輸層把收到的資訊分别傳遞上面應用層中的相應程序。

運輸層主要使用以下兩種協定

  1. 傳輸控制協定TCP(Transmisson Control Protocol)--提供面向連接配接的,可靠的資料傳輸服務。
  2. 使用者資料協定UDP(User Datagram Protocol)--提供無連接配接的,盡最大努力的資料傳輸服務(不保證資料傳輸的可靠性)。

UDP的主要特點

  1. UDP是無連接配接的;
  2. UDP使用盡最大努力傳遞,即不保證可靠傳遞,是以主機不需要維持複雜的連結狀态(這裡面有許多參數);
  3. UDP是面向封包的;
  4. UDP沒有擁塞控制,是以網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視訊會議等);
  5. UDP支援一對一、一對多、多對一和多對多的互動通信;
  6. UDP的首部開銷小,隻有8個位元組,比TCP的20個位元組的首部要短。

TCP的主要特點

  1. TCP是面向連接配接的。(就好像打電話一樣,通話前需要先撥号建立連接配接,通話結束後要挂機釋放連接配接);
  2. 每一條TCP連接配接隻能有兩個端點,每一條TCP連接配接隻能是點對點的(一對一);
  3. TCP提供可靠傳遞的服務。通過TCP連接配接傳送的資料,無差錯、不丢失、不重複、并且按序到達;
  4. TCP提供全雙工通信。TCP允許通信雙方的應用程序在任何時候都能發送資料。TCP連接配接的兩端都設有發送緩存和接收緩存,用來臨時存放雙方通信的資料;
  5. 面向位元組流。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

搞定計算機網絡面試,看這篇就夠了

UDP在傳送資料之前不需要先建立連接配接,遠地主機在收到UDP封包後,不需要給出任何确認。雖然UDP不提供可靠傳遞,但在某些情況下UDP确是一種最有效的工作方式(一般用于即時通信),比如: QQ語音 QQ視訊 、直播等等

TCP提供面向連接配接的服務。在傳送資料之前必須先建立連接配接,資料傳送結束後要釋放連接配接。TCP不提供廣播或多點傳播服務。由于TCP要提供可靠的,面向連接配接的運輸服務(TCP的可靠展現在TCP在傳遞資料之前,會有三次握手來建立連接配接,而且在資料傳遞時,有确認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連接配接用來節約系統資源),這一難以避免增加了許多開銷,如确認,流量控制,計時器以及連接配接管理等。這不僅使協定資料單元的首部增大很多,還要占用許多處理機資源。TCP一般用于檔案傳輸、發送和接收郵件、遠端登入等場景。

  1. 應用資料被分割成TCP認為最适合發送的資料塊。
  2. 逾時重傳: 當TCP發出一個段後,它啟動一個定時器,等待目的端确認收到這個封包段。如果不能及時收到一個确認,将重發這個封包段。
  3. TCP給發送的每一個包進行編号,接收方對資料包進行排序,把有序資料傳送給應用層。
  4. 校驗和: TCP将保持它首部和資料的檢驗和。這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP将丢棄這個封包段和不确認收到此封包段。
  5. TCP的接收端會丢棄重複的資料。
  6. 流量控制: TCP連接配接的每一方都有固定大小的緩沖空間,TCP的接收端隻允許發送端發送接收端緩沖區能接納的我資料。當接收方來不及處理發送方的資料,能提示發送方降低發送的速率,防止包丢失。TCP使用的流量控制協定是可變大小的滑動視窗協定。 (TCP利用滑動視窗實作流量控制)
  7. 擁塞控制: 當網絡擁塞時,減少資料的發送。
  8. 停止等待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)能最有效地工作。當有多個資料資訊包在某一段很短的時間内丢失時,它則不能很有效地工作。 

    搞定計算機網絡面試,看這篇就夠了

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

打開一個網頁,整個過程會使用哪些協定
搞定計算機網絡面試,看這篇就夠了

搞定計算機網絡面試,看這篇就夠了

一般面試官會通過這樣的問題來考察你對計算機網絡知識體系的了解。

搞定計算機網絡面試,看這篇就夠了

在HTTP/1.0中預設使用短連接配接。也就是說,用戶端和伺服器每進行一次HTTP操作,就建立一次連接配接,任務結束就中斷連接配接。當用戶端浏覽器通路的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript檔案、圖像檔案、CSS檔案等),每遇到這樣一個Web資源,浏覽器就會重建立立一個HTTP會話。

而從HTTP/1.1起,預設使用長連接配接,用以保持連接配接特性。使用長連接配接的HTTP協定,會在響應頭加入這行代碼:

  1. 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

繼續閱讀