計算機網絡常見面試知識點整合

(寫此文是爲了自己參考加深自我印象,很多是用自己的話總結的,有錯誤感謝指出!僅供參考)

OSI模型有哪幾層,並分別說說每層的作用

  • 應用層
    主要是在應用程序之間進行數據傳輸,如Http協議 DNS協議等
  • 表示層
    主要用於數據加密壓縮等功能
  • 會話層
    主要用於會話的建立管理等工作
  • 運輸層
    爲進程提供數據傳輸服務,如TCP UDP協議。
  • 網絡層
    爲主機提供數據傳輸服務,網絡層把運輸層的數據封裝爲分組進行傳輸
  • 數據鏈路層
    在鏈路之間提供數據傳輸服務,主機之間存在很多鏈路,數據鏈路層把網絡層傳輸下來的分組封裝成幀。
  • 物理層
    考慮的是怎麼在傳輸媒體上傳輸比特流,儘量屏蔽物理媒介的差異,使數據鏈路層感覺不到這些差異。確定與傳輸媒體之間的一些特性,比如機械特性,電氣特性等。

五層網絡模型

沒有了會話層和表示層,把這些功能留給程序開發者處理

TCP/IP有哪幾層

相當於數據鏈路和物理層合併爲網絡接口層

  • 應用層
  • 傳輸層
  • 網際層
  • 網絡接口層

各層分別有哪些協議

簡述TCP和UDP的區別

①TCP面向連接,也就是必須建立連接才能進行數據通信,UDP面向無連接,TCP是可靠傳輸,UDP是盡最大努力交付,不保證可靠傳輸。
②傳輸效率上,UDP速度要比TCP更高一些,UDP的實時性更強,所以我們常見的視頻電話等一般是基於UDP協議。
③TCP有差錯控制,擁塞控制,流量控制等功能。
④TCP傳輸是面向字節流,UDP傳輸是面向用戶數據報
⑤TCP點對點傳輸,UDP可以一對一或一對多,多對多通信.
⑥對實時性要求較高用UDP,對網絡通信質量要求較高使用TCP。

TCP三次握手過程及原因

序號 seq 用於對字節流編號 表示第一個字節的編號
確認號 ack 期望收到的下一個報文段的序號 只有當ACK=1時,確認號纔有效
SYN(同步序列號) 用於建立連接的過程
FIN(finish標誌) 用於釋放連接
ACK 只有當ACK=1時,確認號纔有效,當建立tcp連接後,所有傳送報文都必須把ACK置爲1

  • ①客戶端發送SYN等於1的數據包給服務器,表示這是一個連接請求

  • ②服務器發送SYN等於1,並且ACK=1的數據包給客戶端表示同意連接請求.發送連接確認報文

  • ③客戶端收到報文後,發出ACK=1的確認報文。連接建立

爲什麼要三次握手呢?
爲了防止客戶端失效的連接請求打開服務器連接,如果客戶端發送了請求,請求在網絡中滯留,客戶端將超時重新發起連接請求,而經過一段時間,超時的請求可能還會發送到服務器,如果沒有三次握手,這時候服務器就會開啓兩個連接。

TCP四次揮手過程及原因

  • 客戶端發送FIN=1的釋放報文,
  • 服務器收到後發送ACK=1的確認報文,此時連接處於半關閉狀態 ,只允許服務器段傳送數據,客戶端不能發送數據給服務器
  • 服務器發送完剩餘的報文,不再需要連接,發送FIN=1的釋放報文
  • 客戶端收到,發送ACK=1的確認報文,等待兩倍的MSL(即報文的最大存活時間)。

爲什麼要四次揮手才釋放連接呢
因爲當客戶端發送釋放報文後,服務器端可能仍有數據放鬆,是爲了讓服務器段傳送完未發送的數據後,服務器端再發送釋放報文。
爲什麼要等待2MSL再關閉連接呢
是爲了確保客戶端發送的確認報文順利到達服務器,如果客戶端發送的確認報文中途丟失,那麼服務器端就會一直請求客戶端,如果這時候客戶端關閉了,那服務器端就會一直髮送FIN=1的數據報文段
建立連接後,客戶端出現

TCP客戶端發生故障怎麼辦,服務器會一直等待客戶端的數據傳輸嗎

使用保活機制解決這個問題。每次服務器發送數據,就重置保活計時器,當保活計時器達到一定的時間內,TCP發送探測報文,達到一定的次數沒有相應就關閉連接
TCP是怎麼實現差錯控制和流量控制,擁塞避免的

TCP的差錯控制,流量控制和擁塞避免

  • 差錯控制(可靠傳輸)

通過超時重傳實現,如果一個發送的報文在超時時間內沒有得到迴應,將會重新發送 。一個報文段從發送到再到接受確認所經過的時間稱爲往返時間RTT,超時時間應該略大於往返時間的加權平均值

  • 流量控制
    利用滑動窗口機制,TCP報文中有個窗口字段,可以控制發送方窗口大小,如果窗口大小爲0,則發送方不能發送數據,保證接收方來得及接受。

  • 擁塞控制(是爲了避免網絡擁塞,傳送數據太多,網絡可能就會進入擁塞狀態)
    慢開始,擁塞避免,快重傳,快恢復。
    發送方維護一個擁塞窗口值,擁塞窗口只是一個狀態變量,接受方實際能接受多少還是取決於發送方窗口字段的大小。一開始擁塞窗口呈指數增長,當達到慢開始門限時,擁塞窗口變成線性增長。當網絡擁塞後(出現了超時),慢開始門限變爲擁塞窗口值的一半,擁塞窗口從0開始。而快重傳是因爲有時候網絡中不是擁塞,而是某些數據包丟失,這時候就執行快恢復算法。當發送方收到三個連續的同一個報文段的重複確認,說明報文段丟失,執行快恢復算法。慢開始門限變爲擁塞窗口的一半,擁塞窗口值再等於慢開始門限。
    在這裏插入圖片描述

在瀏覽器中輸入url地址 ->> 顯示主頁的過程

①首先經過DNS協議,解析域名對應的服務器地址,DNS協議首先會在本地緩存查詢時候存在域名對應的IP地址,然後再查詢上層的DNS服務器。
②發送TCP連接,三次握手建立連接
③發送HTTP請求
④服務器接受HTTP請求並返回HTTP報文
⑤瀏覽器解析報文內容,渲染頁面
⑥連接結束,四次揮手釋放連接

HTTP狀態碼有哪些

  • 1XX 指示信息 表示請求已經接受正在理
  • 2XX 成功 表示請求成功處理,200一般就是成功的狀態碼
  • 3XX 重定向 需要進行附加操作以完成請求
  • 4XX 客戶端錯誤 服務器無法處理請求,比如請求路徑錯誤 404 未找到網頁
  • 5XX 服務器錯誤 服務器處理請求出錯等 比如數據庫查詢時發生錯誤

get 和 post 請求有哪些區別?

  • get一般用於查詢數據,post一般用於上傳數據
  • get的請求參數包含在url中,而post的參數包含在請求主體中
  • get參數有大小限制,post沒有大小。
  • post請求方式相對get要安全一些,當然,只是相對來說,post請求的內容,通過抓包也可以獲取。
  • get只支持ASCII編碼,而post支持多種編碼
  • get的url地址可以被收藏,而post不行
  • get的url地址被保存在歷史記錄裏,而post的參數不會。這跟上一條有點類似,也就是get請求的url可以被保存。
  • get請求會被瀏覽器主動緩存,而post不會
  • get在瀏覽器回退時是無害的,而post會再起發起請求

Cookie和Session有什麼區別

  • Cookie保存在客戶端的瀏覽器上,session保存在服務器端上。一般客戶端會存有session的id,請求session信息時,會使用sessionid向服務器請求session信息。Session相對安全
    • 一般一個網站的Cookie是有大小限制的
  • Cookie只能存儲ASCII編碼,而Sessionkk而已存儲任何類型的數據,因此在考慮數據複雜性時,優先使用Cookie。
  • 對於大型網站,如果信息都存在Session中,服務器開銷是非常大的。
  • Session可以存放在Redis中,加快訪問
    session和cookie作用
    用戶個性化的東西,比如購物車,登陸狀態,用戶自定義設置,主題等

Http和Https有什麼區別

Https並不是新協議,而是結合了HTTP和SSL(Secure Sockets Layer) 也就是說HTTPs使用了隧道進行通信 先讓HTTTP和SSL通信 再由SSL和TCP通信。

端口號不同HTTP默認端口號是80 HTTPS是443

  • HTTP存在以下問題
    使用明文通信,內容可能會被竊聽
    不驗證通信放的真實身份,通信方的身份可能遭遇僞裝
    無法驗證報文的完整性

  • HTTPS
    數據加密傳輸,安全性有保障。
    使用證書來驗證通信方的身份。
    完整性保護,防止報文被篡改

  • 加密傳輸
    https://blog.csdn.net/tabactivity/article/details/49685319 公鑰私鑰相關知識
    https採用混合加密機制,即使用對稱加密加密傳輸數據,再使用非對稱加密 加密堆成密鑰。
    加密過程簡化:以支付寶爲例,我向支付寶發送消息,我的數據經過一個隨機生成的密鑰加密。並把密鑰通過網站的公鑰加密,服務器端用私鑰解密,得到加密密鑰,並把網站內容用加密器加密,再把密鑰用私鑰加密

  • 完整性保護
    提供MD5報文摘要,雖然http也有報文摘要的功能,但是http的報文被獲取後,安全性低,可以重新計算報文摘要,而HTTPS的報文本身就經過加密,很難計算出報文摘要

Http1.0和Http1.1和Http2.0有什麼區別

- Http1.0和HTTP1.1的區別
長連接
HTTP1.0需要使用keep-alive參數來保持一個長連接,而HTTP1.1默認支持長連接和請求流水線處理。
長連接就是可以一直保持連接,不需要每一個TCP請求都打開一個連接,也就是一個TCP連接處理多個HTTP請求和相應,減少了建立和關閉連接的資源消耗。流水線處理,客戶端不用等待上一次請求結果返回,就可以發出下一次請求。
帶寬優化
HTTP1.1支持只發送header信息。如果服務器認爲客戶端有權請求服務器,返回100,否則返回401.如果客戶端收到100,纔開始把body部分發送到服務器,節約了帶寬。
狀態碼
http1.1新增了24個錯誤狀態碼 如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資源被永久性的刪除
HOST頭處理
支持虛擬主機 http1.0認爲每臺機器都綁定唯一的IP地址,虛擬主機技術的發展,多個IP地址可以對應同一臺物理機器,所以在HTTP1.1的請求頭和相應體中都支持HOST頭域,如果沒有HOST信息會報告400錯誤
緩存
引入更多緩存控制策略,提供更多可選擇的緩存頭,優化緩存
分塊傳輸
支持只傳送對象的一部分。而不是請求整個對象

  • Http1.1與Http2.0的區別
    採用二進制格式而非文本格式
    比起文本協議,二進制協議解析起來更高效,更重要的是錯誤更少
    首部信息壓縮
    ①服務器和客戶端同時維護一個維護一個之前見過的首部信息表,對於存在首部信息表中的不用重複傳輸
    ②首部信息使用了哈夫曼編碼進行壓縮。爲了加快效率
    服務器端推送
    客戶端請求一個資源時,服務器端會把相關的資源也一起發送給客戶端,如請求一個頁面,服務器可能會把css和js文件都一併發送給客戶端,減少傳送次數
    多路複用
    客戶端和服務器只需要保持一個TCP連接

URI和URL是什麼區別

URI是統一資源標識符,可以唯一標誌一個資源
URL是統一資源定位符,可以提供該資源的路徑。它是一種具體的資源。即URI用來標識一個資源,URL不僅標識資源,還指明瞭資源的訪問位置。

HTTP1.0 、 HTTP1.1與HTTP2.0的主要區別
https://github.com/CyC2018

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章