計算機網絡高頻面試知識點

關於網絡的高頻面試題,整理了了一下大部分網絡層,傳輸層,應用層。因此這裏只找面試可能出現的。關於答案相關的不少都來自網上整理的,還有就是謝希仁的計算機網絡第七版,在最後面會給上參考資料。java

1 關於計算機網絡的體系結構

1.1 五層協議

  • 應用層 :爲特定應用程序提供數據傳輸服務,例如 HTTP、DNS 等協議。數據單位爲報文。
  • 傳輸層 :爲進程提供通用數據傳輸服務。因爲應用層協議不少,定義通用的傳輸層協議就能夠支持不斷增多的應用層協議。運輸層包括兩種協議:傳輸控制協議 TCP,提供面向鏈接、可靠的數據傳輸服務,數據單位爲報文段;用戶數據報協議 UDP,提供無鏈接、盡最大努力的數據傳輸服務,數據單位爲用戶數據報。TCP 主要提供完整性服務,UDP 主要提供及時性服務。
  • 網絡層 :爲主機提供數據傳輸服務。而傳輸層協議是爲主機中的進程提供數據傳輸服務。網絡層把傳輸層傳遞下來的報文段或者用戶數據報封裝成分組。
  • 數據鏈路層 :網絡層針對的仍是主機之間的數據傳輸服務,而主機之間能夠有不少鏈路,鏈路層協議就是爲同一鏈路的主機提供數據傳輸服務。數據鏈路層把網絡層傳下來的分組封裝成幀。
  • 物理層 :考慮的是怎樣在傳輸媒體上傳輸數據比特流,而不是指具體的傳輸媒體。物理層的做用是儘量屏蔽傳輸媒體和通訊手段的差別,使數據鏈路層感受不到這些差別

1.2 OSI協議

多了表示層和會話層:git

  • 表示層 :數據壓縮、加密以及數據描述,這使得應用程序沒必要關心在各臺主機中數據內部格式不一樣的問題。
  • 會話層 :創建及管理會話。

1.3 TCP/IP

只有四層,至關於五層協議中數據鏈路層和物理層合併爲網絡接口層。github

2 網絡層

網絡層的設計思路是:「網絡層只向上提供簡單靈活的、無鏈接的、盡最大努力交付的服務。」關於網絡層的知識點也不少,可是在面試中的高頻知識點很少。面試

網絡層裏網際IP協議是TCP/IP體系中兩個最重要的協議之一。與IP協議配套使用的還有三個協議:後端

  • 地址解析協議ARP(Address Resolution Protocol)
  • 網際控制報文協議ICMP(Internet Control Message Protocol)
  • 網際組管理協議IGMP(Internet Group Management Protocol)

2.1 IP地址是如何分類的?

2.2 什麼是私有/保留IP地址?

私有/保留就是在互聯網上不使用,而被使用在局域網絡中的地址或者作其餘特殊用途。好比咱們的聯通運營商就是使用的10.開頭的保留地址, 局域網組網,而後用戶經過撥號的方式進入局域網,而後再經過訪問網關訪問Internet,這樣作最大的好處就是節約了公網IP地址,極大的下降了成本。瀏覽器

2.3 有哪些私有/保留IP地址?

A類:10.0.0.0 ~ 10.255.255.255緩存

B類:172.16.0.0 ~ 172.31.255.255安全

C類:192.168.0.0 ~ 192.168.255.255服務器

2.4 ARP協議是如何解析MAC地址的,什麼是ARP欺騙?

網絡層的 ARP 協議完成了 IP 地址與物理地址的映射。網絡

首先,每臺主機都會在本身的 ARP 緩衝區中創建一個 ARP 列表,以表示 IP 地址和 MAC 地址的對應關係。當源主機須要將一個數據包要發送到目的主機時,會首先檢查本身 ARP 列表中是否存在該 IP 地址對應的 MAC 地址:若是有,就直接將數據包發送到這個 MAC 地址;若是沒有,就向本地網段發起一個 ARP 請求的廣播包,查詢此目的主機對應的 MAC 地址。此 ARP 請求數據包裏包括源主機的 IP 地址、硬件地址、以及目的主機的 IP 地址。網絡中全部的主機收到這個 ARP 請求後,會檢查數據包中的目的 IP 是否和本身的 IP 地址一致。若是不相同就忽略此數據包;若是相同,該主機首先將發送端的 MAC 地址和 IP 地址添加到本身的 ARP 列表中,若是 ARP 表中已經存在該 IP 的信息,則將其覆蓋,而後給源主機發送一個 ARP 響應數據包,告訴對方本身是它須要查找的 MAC 地址;源主機收到這個 ARP 響應數據包後,將獲得的目的主機的 IP 地址和 MAC 地址添加到本身的 ARP 列表中,並利用此信息開始數據的傳輸。若是源主機一直沒有收到 ARP 響應數據包,表示 ARP 查詢失敗。

ARP默認了其所在的網絡是一個善良的網絡,每臺主機在向網絡中發送應答信號時都是使用的真實身份。因此人們就發現ARP應答中的IP地址和MAC地址中的信息是能夠僞造的,並不必定是本身的真實IP地址和MAC地址,由此,ARP欺騙就產生了。

2.5 什麼是icmp協議,它的做用是什麼?

它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡自己的消息。這些控制消息雖然並不傳輸用戶數據,可是對於用戶數據的傳遞起着重要的做用。

3 運輸層

從通訊和信息處理兩個角度看,運輸層向它上面的應用層提供了通訊服務。其主要的兩個協議是UDP協議(用戶數據報協議)和TCP協議(傳輸控制協議),重點在於TCP協議和可靠傳輸的原理。

3.1 TCP與UDP的特色和區別?

UDP的特色:

  • UDP是無鏈接的。即發送數據以前不須要創建鏈接,全部也沒有鏈接釋放,減小了時延。
  • UDP是盡最大努力交付的。即不保證可靠交付。
  • UDP是面向報文的。
  • UDP沒有擁塞控制。所以網絡出現的阻塞不會使源主機的發送效率下降。
  • UDP支持一對1、一對多、多對一和多對多的交互通訊。
  • UDP的首部開銷小。只有八個字節,比TCP的20個字節的首部短。

TCP的特色:

  • TCP是面向鏈接的運輸層協議。應用進程之間的通訊好像在「打電話」:通話前要先撥號創建鏈接,通話結束後要掛機釋放鏈接。
  • 每一條TCP鏈接只能有兩個端點。即TCP是點對點鏈接的。
  • TCP提供可靠交付的服務。經過TCP鏈接傳送的數據,無差錯、不丟失、不重複,而且按序到達。
  • TCP提供全雙工通訊。TCP容許通訊雙方的應用進程在任什麼時候候都能發送數據。
  • TCP面向字節流。「面向字節流」的含義是雖然應用程序和TCP的交互是一次一個數據塊,但TCP把應用程序交下來的數據僅僅當作是一連串的無結構的字節流。

TCP與UDP的區別:

  • UDP是無鏈接的,即發送數據以前不須要創建鏈接;TCP是面向鏈接的運輸層協議。
  • UDP使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制;TCP提供可靠的交付服務,提供全雙工通訊。
  • UDP支持一對一,一對多,多對一和多對多的交互通訊;TCP只能一對一鏈接。
  • UDP首部開銷小,只有8個字節;TCP 面向字節流,頭部最低20個字節。
  • TCP消耗更多的資源,傳輸速度慢,UDP相對較快,因此一些即時通信軟件使用UDP效果更好。

3.2 使用UDP和TCP協議的各類應用和應用層協議

應用 應用層協議 運輸協議
名字轉換 DNS(域名系統) UDP
文件傳送 TFTP(簡單文件傳送協議) UDP
路由選擇協議 RIP(路由信息協議) UDP
IP地址配置 DHCP(動態主機配置協議) UDP
網絡管理 SNMP(簡單網絡管理協議) UDP
遠程文件服務器 NFS(網絡文件系統) UDP
IP電話 專用協議 UDP
流式多媒體通訊 專用協議 UDP
多播 IGMP(網際管理協議) UDP
電子郵件 SMTP(簡單郵件傳送協議) TCP
遠程終端接入 TELNET(遠程終端協議) TCP
萬維網 HTTP(超文本傳送協議) TCP
文件傳送 FTP(文件傳送協議) TCP

3.3 三次握手四次揮手全過程

三次握手

  1. 第一次握手,客戶端給服務器發送一個SYN包,序號爲x,等待服務器的響應。

  2. 第二次握手,服務器給客戶端發送了有ACK/SYN標誌的包,序號爲y,確認號爲x+1,並等待客戶端響應。

  3. 第三次握手,客戶端收到服務器的確認包後,給服務器發送了一個ACK包,序號爲x+1,確認號爲y+1。

    三次握手完畢後,就能夠正式傳遞數據了。

四次揮手

  1. 第一次揮手,客戶端給服務器發送一個FIN包,此時客戶端不會再向服務器發送數據,但客戶端能接收服務器的數據。

  2. 第二次揮手,當服務器收到FIN包後,會給客戶端發一個確認包,並傳遞剩下的數據。

  3. 第三次揮手,當服務器將剩餘數據發送完後,就向發送方發一個FIN包。此時服務器也不會繼續向客戶端發送數據了。

  4. 第四次揮手,客戶端收到服務器的FIN包後,就向服務器發送一個確認包。

    服務端接收到後,完成四次揮手。服務器斷開鏈接,客戶端在等待一段時間後也斷開鏈接。

3.4 爲何須要三次握手,四次揮手?

三次握手的目的是創建可靠的通訊信道,不管是客戶端,仍是服務器都須要確保本身和對方的發送/接收功能都是正常的,三次握手的過程就能保證這一點。

  • 第一次握手,服務器收到客戶端發來的同步包後,能肯定客戶端的發送功能和本身的接收功能是正常的。

  • 第二次握手,客戶端收到服務器發來的確認包後,能肯定本身的發送/接收功能,服務器的發送/接收功能是正常的。

  • 第三次握手,服務器收到客戶端的確認包後,能肯定本身的發送/接收功能,服務器的發送/接收功能是正常的。

若是不進行揮手操做,好比客戶端直接斷開與服務器的鏈接,那麼服務器不知情,還會繼續向客戶端發送數據,這就形成資源浪費。

3.5 爲何須要有Time_Wait狀態和等待2MSL?

爲了保證客戶端發送的最後一個確認,可以達到服務器

這個ACK可能丟失,就會致使服務器在LAST-ACK狀態,沒辦法正常結束,那麼服務器收不到就會超時重傳能夠斷開的消息。

那麼A就可以在這個2MSL中收到這個重傳的消息,而且從新計時2MSL。

並且,客戶端持續2MSL時間後斷開,就能夠保證這個鏈接的全部報文都會死亡,能夠看下MSL的含義,也就是2MSL以後,斷開這個鏈接以後,確定不會還存在這個鏈接的舊的報文了。

補充:MSL(最大報文段的生成時間)在RFC793中規定hi2分鐘,實際應用是30秒,1分鐘,2分鐘等

3.6 爲何不能兩次握手,或者三次揮手?

  1. 二次握手不行,假設客戶端的一個SYN包在網絡中滯留了好久,這就是個失效的報文段了,若是服務器收到這個報文段,就認爲這是一個鏈接請求,並創建鏈接。這樣,就會浪費服務器資源,採用三次握手就能避免這種狀況。

  2. 三次揮手不行,若是沒有最後一次揮手,即服務器在第三次揮手,即發送完FIN包後就斷開鏈接,若是這個包丟失了,那麼客戶端就會一直等待,這顯然是不行的。

3.7 TCP是如何保證可靠傳輸的?

  • 超時重傳,若是一個已經發送的報文段在超時時間內沒有收到確認,那麼就重傳這個報文段。

  • 首部校驗和,提供了差錯檢測功能。

  • 確認與序號機制,能保證接收到數據的有序性。

  • 流量控制,能控制端到端之間的數據傳遞速率,有效避免丟包。

  • 擁塞控制,根據整個網絡環境來條件傳輸速率,有效避免丟包。

4 應用層

4.1 URI和URL的區別?

URL咱們說是叫統一資源定位符,URI我更願意叫作統一資源標識符。

舉個例子:

一我的,身份證是他的惟一標識,能夠做爲統一資源標識符,而地址是爲了找到他,因此是統一資源定位符。

4.2 HTTP請求的GET與POST方式的區別?

  • GET在瀏覽器回退是無害的,而POST會再次提交請求

  • GET請求會被瀏覽器主動cache,而POST不會,除非手動設置

  • GET請求只能進行URL編碼,而POST支持多種編碼

  • GET請求參數會被完整保留在瀏覽器歷史記錄中,而POST中的參數不會被保留

  • GET請求在URL中傳送參數是有大小限制的,不能大於2KB,而POST能夠說沒有

  • GET只接受ASCII字符,而POST沒有限制

  • GET參數直接暴露在URL上,而POST將數據放在request body中

4.3 從輸入網址到獲取頁面的過程?

  • 查詢DNS, 獲取域名對應的IP地址

    • 瀏覽器搜索自身的DNS緩存
    • 搜索操做系統的DNS緩存
    • 讀取本地的HOST文件
    • 發起一個DNS系統調用(寬帶運營服務器查看自己緩存,運營服務器發起一個迭代DNS解析請求)
  • 瀏覽器得到域名對應的IP地址後,發起TCP三次握手

  • TCP/IP創建鏈接後,瀏覽器能夠向服務器發送HTTP請求了

  • 服務器接收到請求後,根據路徑參數,通過後端處理將頁面返回給瀏覽器

  • 瀏覽器渲染頁面,和外部資源,最終將完整的頁面呈現給用戶

4.4 常見的HTTP請求?

  • GET:對服務器資源的簡單請求-
  • POST:用於發送包含用戶提交數據的請求
  • PUT:用來傳輸文件,可是不帶有驗證機制,任何人均可以上傳,有安全隱患。除了REST風格API會發送這種請求,通常的網站不會使用該方法
  • DELETE:發出一個刪除指定文檔的請求,和PUT同樣,有安全隱患,除了REST API通常不會發送這種請求。
  • HEAD:和 GET 方法同樣,只是不返回報文主體部分,只返回報頭。一般用來檢驗url的有效性或資源更新日期。
  • OPTIONS:查詢服務器對給定url支持的全部請求方法
  • TRACE:查詢發送出去的請求是怎樣被加工修改的。
  • CONNECT:要求與代理服務器通訊時創建隧道。使用加密協議如SSL來進行TCP通訊。

4.5 HTTP狀態碼有哪幾類?常見的狀態碼有哪些?

200:請求成功狀態碼。

301:永久重定向。該資源已經分配了新的 URI,服務器返回301響應時,會自動將請求者轉移到新URI。

302:臨時重定向。表示請求的資源臨時分配了新的 URI,但願用戶(本次)能使用新的 URI 訪問。

404:服務器找不到目標資源。

500:服務器內部出錯,沒法完成請求。

4.6 HTTP與HTTPS的區別?

  • https協議要申請證書到ca,須要必定經濟成本;
  • http是明文傳輸,https是加密的安全傳輸;
  • 鏈接的端口不同,http是80,https是443;
  • http鏈接很簡單,沒有狀態;https是ssl加密的傳輸,身份認證的網絡協議,相對http傳輸比較安全。

5 參考資料

計算機網絡第七版-謝希仁

CyC2018/CS-Notes

Java工程師面試寶典

網絡是如何鏈接的?網絡發展簡介(四)

計算機網絡-高頻面試題詳細總結

阿提說說

相關文章
相關標籤/搜索