1. 程式人生 > >計算機網路常考面試題整理(不定期更新)

計算機網路常考面試題整理(不定期更新)

計算機網路體系結構

這裡寫圖片描述

  1. 七層協議
    圖上圖(a)所示,其中表示層和會話層用途如下:

    • 表示層:資訊的語法、語義以及它們的關聯,如加密解密、轉換翻譯、壓縮解壓縮
    • 會話層:不同機器上的使用者之間建立及管理會話
  2. 五層協議

    • 應用層:為特定應用程式提供資料傳輸服務,例如HTTP、DNS等。資料單位為報文
    • 運輸層:提供的是程序間的通用資料傳輸服務。由於應用層協議很多,定義通用的運輸層協議就可以支援不斷增多的應用層協議。運輸層包括兩種協議:傳輸控制協議TCP。提供面向連線、可靠的資料傳輸服務,資料單位為報文段;使用者資料報協議UDP,提供無連線、盡最大努力的資料傳輸服務,資料單位為使用者資料報。TCP主要提供完整性服務,UDP主要提供及時性服務
    • 網路層:為主機之間提供資料傳輸服務,而運輸層協議是為主機中的程序提供服務。網路層把運輸層傳遞下來的報文段或者使用者資料報封裝成分組
    • 資料鏈路層:網路層針對的還是主機之間的資料傳輸服務,而主機之間可以有很多鏈路,鏈路層協議就是為同一鏈路的結點提供服務。資料鏈路層把網路層傳來的分組封裝成幀
    • 物理層:考慮的是怎樣在傳輸媒體上傳輸資料位元流,而不是指具體的傳輸媒體。物理層的作用是儘可能遮蔽傳輸媒體和通訊手段的差異,使資料鏈路感覺不到這些差異
  3. 資料在各層之間的傳遞過程
    在向下的過程中,需要新增下層協議所需要的首部或者尾部,而在向上的過程中不斷拆開首部和尾部
    路由器只有下面三層協議,因為路由器位於網路核心中,不需要為程序或者應用程式提供服務,因此也就不需要運輸層和應用層。
    這裡寫圖片描述

  4. TCP/IP 體系結構
    它只有四層,相當於五層協議中資料鏈路層和物理層合併為網路介面層。
    現在的TCP/IP體系結構不嚴格遵循OSI分層概念,應用層可能會直接使用IP層或者網路介面層
    這裡寫圖片描述

    TCP/IP協議族是一種沙漏形狀,中間小兩邊大,IP協議在其中佔用舉足輕重的地位
    這裡寫圖片描述

運輸層

網路層只把分組送到目的主機,但是真正通訊的並不是主機而是主機中的程序。運輸層提供了程序間的邏輯通訊,運輸層向高層使用者遮蔽了下面網路層的核心細節,使應用程式看見的兩個運輸層實體之間有一條端到端的邏輯通訊通道。

UDP和TCP的特點

  • 使用者資料報協議UDP(User Datagram Protocol)是無連線的,盡最大可能交付,沒有擁塞控制,面向報文(對於應用程式傳下來的報文不合並也不拆分,只是新增UDP首部)
  • 傳輸控制協議TCP(Transmission Control Protocol)是面向連線的,提供可靠交付,有流量控制,擁塞控制,提供雙工通訊,面向位元組流(把應用層傳下來的報文看成位元組流,把位元組流組織成大小不等的資料塊)

UDP首部格式

這裡寫圖片描述
首部欄位只有8個位元組,包括源埠、目的埠、長度、檢驗和。12位元組的偽首部是為了計算檢驗和臨時新增的

TCP首部格式

這裡寫圖片描述

  • 序號:用於對位元組流進行編號,例如序號為301,表示第一個位元組的編號為301,如果攜帶的資料長度為100位元組,那麼下一個報文段的序號為401
  • 確認號:期望收到的下一個報文段的序號。例如B正確收到A傳送來的一個報文段,序號為501,攜帶的資料長度為200位元組,一次B期望下一個報文段的序號為701,B傳送給A的確認保溫段中確認號就為701
  • 資料偏移:指的是資料部分距離報文段起始處的偏移量,實際上指的是首部的長度
  • 確認ACK:當ACK=1時確認號欄位有效,否則無效。TCP規定,在連線建立後所有傳送的報文段都必須把ACK置1
  • 同步SYN:在連線建立時用來同步序列號。當SYN=1,ACK=0時表示這是一個連線請求報文段。若對方同意建立連線,則響應報文中SYN=1,ACK=1
  • 終止FIN:用來釋放一個連線,當FIN=1時,表示此報文段的傳送方的資料已傳送完畢,並要求釋放運輸連線
  • 視窗:視窗值作為接收方讓傳送方設定其傳送視窗的依據。之所以要有這個限制,是因為接收方的資料快取空間是有限的

TCP的三次握手

這裡寫圖片描述

假設 A 為客戶端,B 為伺服器端。

  1. 首先 B 處於 LISTEN(監聽)狀態,等待客戶的連線請求。
  2. A 向 B 傳送連線請求報文段,SYN=1,ACK=0,選擇一個初始的序號 x。
  3. B 收到連線請求報文段,如果同意建立連線,則向 A 傳送連線確認報文段,SYN=1,ACK=1,確認號為 x+1,同時也選擇一個初始的序號 y。
  4. A 收到 B 的連線確認報文段後,還要向 B 發出確認,確認號為 y+1,序號為 x+1。
  5. B 收到 A 的確認後,連線建立。

三次握手的原因
為了防止失效的連線請求到達伺服器,讓伺服器錯誤開啟連線。
失效的連線請求是指,客戶端傳送的連線請求在網路中滯留,客戶端因為沒及時收到伺服器端傳送的連線確認,因此就重新發送了連線請求。滯留的連線請求並不是丟失,之後還是會到達伺服器。如果不進行第三次握手,那麼伺服器會誤認為客戶端重新請求連線,然後打開了連線。但是並不是客戶端真正開啟這個連線,因此客戶端不會給伺服器傳送資料,這個連線就白白浪費了。

TCP的四次揮手

這裡寫圖片描述

以下描述不討論序號和確認號,因為序號和確認號的規則比較簡單。並且不討論 ACK,因為 ACK 在連線建立之後都為 1。

  1. A 傳送連線釋放報文段,FIN=1;
  2. B 收到之後發出確認,此時 TCP 屬於半關閉狀態,B 能向 A 傳送資料但是 A 不能向 B 傳送資料;
  3. 當 B 要不再需要連線時,傳送連線釋放請求報文段,FIN=1
  4. A 收到後發出確認,進入 TIME-WAIT 狀態,等待 2MSL 時間後釋放連線。
  5. B 收到 A 的確認後釋放連線。

四次揮手的原因
客戶端傳送了 FIN 連線釋放報文之後,伺服器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是為了讓伺服器端傳送還未傳送完畢的資料,傳送完畢之後,伺服器會發送 FIN 連線釋放報文。

TIME_WAIT
客戶端接收到伺服器端的 FIN 報文後進入此狀態,此時並不是直接進入 CLOSED 狀態,還需要等待一個時間計時器設定的時間 2MSL。這麼做有兩個理由:

  1. 確保最後一個確認報文段能夠到達。如果 B 沒收到 A 傳送來的確認報文段,那麼就會重新發送連線釋放請求報文段,A 等待一段時間就是為了處理這種情況的發生。
  2. 等待一段時間是為了讓本連線持續時間內所產生的所有報文段都從網路中消失,使得下一個新的連線不會出現舊的連線請求報文段。