天天看點

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

作者:信安傳遞

1. OSI七層模型各層的功能?

實體層:負責建立、維護、關閉實體連接配接,在裝置間傳輸比特流。

資料鍊路層:根據Mac尋址,負責點到點的資料傳輸。

網絡層:根據IP尋址,負責端到端的資料傳輸。

傳輸層:根據端口号尋址,負責端口到端口的資料船速。

會話層:負責建立、管理、終止會話。

表示層:負責資料的表示和壓縮。

應用層:為使用者和服務提供接口。

TCP/IP協定棧,每層有哪些協定,可以根據下面這張圖記憶:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

三種網絡模型的分層情況可以根據下面這張圖記憶:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

2. 浏覽器輸入url,到顯示網頁的全過程?

首先,DNS将域名轉換為IP位址。

浏覽器和IP位址對應的伺服器通過三次握手,建立TCP連接配接。

連接配接建立成功後,浏覽器向伺服器發送HTTP請求。

伺服器收到請求後,處理資料,然後傳回HTTP響應。

浏覽器收到響應後,解析傳回的資料,渲染頁面。

渲染完成後,四次揮手斷開TCP連接配接。

3. Ping的原理?

ping的過程,實際上就是ICMP協定的執行過程。

向目标主機發送一個請求包(request),目标主機收到後,回複一個響應包(reply)。通常用來檢測網絡是否通暢,或者檢測網絡的連接配接速度。

可以根據下面這個,Wireshark抓取的ICMP資料包加深記憶:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

ICMP協定的功能及實作原理

4. DNS解析過程?

DNS本質上是一個儲存域名和IP位址映射關系的分布式資料庫系統,它使用遞歸查詢的方式解析域名:

1)用戶端先查本地域名伺服器

如果有,就傳回對應的IP位址;

如果沒有,就查詢根域名伺服器。

2)根域名伺服器會傳回一個頂級域名伺服器的位址,用戶端按照這個位址通路頂級域名伺服器。

3)頂級域名伺服器再傳回下一級域名伺服器的位址,就這樣一直疊代查詢。

4)查到域名對應的IP位址後,用戶端會儲存到本地域名伺服器的緩存裡面,下次再解析的時候,直接查緩存就可以了。

域名伺服器是一個樹狀的分布式系統,如下圖:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

根伺服器負責儲存頂級域名伺服器的IP位址。

頂級域名伺服器負責管理二級域名,一共有13個;比如:xxx.com,就找負責com的頂級域名伺服器,xxx.net,就找負責net的頂級域名伺服器。

頂級域名伺服器下面是權限域名伺服器,比如:baidu.com,就找負責baidu的權限域名伺服器;jingdong.com就找負責jingdong的權限域名伺服器,以此類推。

5. ARP工作原理

ARP是位址解析協定,負責将IP位址解析成Mac位址。

1)先查路由表,把IP位址轉發到目标網段,如果就是目前網段,就直接開始解析。

2)查自己的ARP快取記錄

如果有,就直接傳回Mac位址;

如果沒有,就廣播。

3)網絡内的所有主機都會收到廣播,檢查廣播裡的IP位址是不是自己

如果是自己,就傳回自己的Mac位址;

如果不是自己,就丢棄。

4)收到傳回的Mac位址後,會儲存到自己的ARP快取記錄裡,以後再遇到這個IP,緩存表就能查到,就不用再廣播了。

6. TCP三向交握過程

第一次握手:用戶端發送SYN(seq=x)給伺服器,然後進入發送狀态(SYN_SEND)。

第二次握手:伺服器收到SYN封包後,回應一個SYN(seq=y)+ACK(ack=x+1)封包,然後進入接收(SYN_RECV)狀态。

第三次握手:用戶端收到伺服器的SYN封包後,回應一個ACK(ack=y+1),然後進入确認狀态(Established)。

三次握手成功以後,兩邊的連接配接就建立完成,可以傳輸資料了。

wireshark抓取的TCP三向交握資料包如下:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

大緻流程如下圖,結合圖檔加深記憶:

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

為什麼是三次握手而不是兩次?

為了防止失效的請求建立連接配接,進而浪費資源。

比如用戶端向伺服器發送建立連接配接的請求,請求逾時了還沒收到确認,于是又發送了第二個建立連接配接的請求,等資料傳輸完,關閉連接配接以後,第一個逾時的連接配接剛好發送到了伺服器,伺服器就會跟這個失效的請求建立連接配接,浪費資源。

7. TCP四次揮手過程

第一次揮手:用戶端發送FIN封包給伺服器,表示資料已經發送完了。

第二次揮手:服務端收到請求後,響應一個ACK确認封包,然後關閉用戶端到服務端方向的連接配接。

第三次揮手:服務端發送完資料以後,也向用戶端發送一個FIN封包。

第四次揮手:用戶端收請求後,也響應一個ACK确認封包給服務端,然後伺服器到用戶端方向的連接配接也被關閉,TCP的連接配接完全斷開。

「網絡攻防」耗時一個月,計算機網絡常見面試題總結了一下

為什麼是四次揮手而不是三次?

TCP是全雙工通信,有兩條連接配接,當一方發送完資料後,并不能确定對方是不是也發送完了資料,是以隻能關閉單方向的連接配接,等到對方也發送完資料後,再關掉另一個方向的連接配接。

8. TCP如何保證可靠性?

TCP的可靠性主要依賴四個方面:連接配接管理、确認機制、校驗和以及逾時重傳。

1)連接配接管理是指:TCP使用三次握手和四次揮手保證連接配接的可靠。

2)确認機制是指:TCP會将應用層的資料分割成最适合發送的資料塊,并給每個資料塊一個序号,接收方接收後可以根據序号給資料排序;接收方每接收一個資料就要傳回一個确認,如果發送方沒收到确認,就會重新發送資料。

3)校驗和是指:TCP封包頭部的校驗和字段,接收和發送時都要計算一次,如果校驗結果不對,就會重新發送資料。

4)逾時重傳是指:發送方每發送一個資料,就會啟動一個計時器,規定時間内沒收到确認的資料會被判定逾時,發送方就重新發送資料。

9. TCP和UDP的差別?

TCP和UDP的差別主要展現在兩個方面:效率和安全性

首先是安全性:

TCP通過校驗和、确認機制和逾時重傳機制對資料進行檢錯和糾錯,保證資料的可靠性;

而UDP隻有一個校驗和,隻檢錯但不糾錯,是以UDP的安全性比不上TCP。

再就是效率:

UDP頭部隻有8個位元組,不需要建立連接配接,也不用對資料進行檢查或修改,傳輸速度很快;

而TCP頭部有20個位元組,裡面多了很多控制資訊,并且每次都要建立連接配接,保證安全性的同卻犧牲了效率,比UDP要慢很多。

10. HTTP協定工作原理

HTTP是超文本傳輸協定,它制定了浏覽器與伺服器之間的通信規範。

1)首先,用戶端需要和伺服器建立TCP連接配接

2)建立連接配接後,用戶端向伺服器發送請求

3)伺服器收到請求後,處理請求,并傳回響應

4)用戶端收到響應後,關閉和伺服器的TCP連接配接

11. HTTP請求方式?

HTTP一共有9中請求方式:GET、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH。

12. GET和POST的差別?

還是從效率和安全兩個方面來分析:

首先是安全性:

GET的目的是擷取,擷取的資料在響應裡面,是以請求不是重點,參數直接拼接在url後面,浏覽器的曆史記錄裡也可以找到,比如用GET請求做登入,那登入的使用者名和密碼就能在曆史記錄裡面找到。

而POST的目的是傳送,傳送的資料在請求裡面,需要保證資料的安全性,是以資料要放在請求體裡面,并且曆史記錄裡也找不到。

再就是效率:

GET請求的資料通常比較少,傳輸的資料小,速度自然就快。

而POST請求送出的資料通常會比較多,傳輸的資料大,速度自然就慢。

網上很多答案都說,get請求最多2KB,實際上,HTTP對請求的資料大小沒有做限制,但一些浏覽器或伺服器(Apache、IIS)會做限制。

還有一些小的方面,比如:

GET不受浏覽器回退的影響,而POST回退後隻能再次送出請求。

GET請求的參數在位址欄中,隻能進行URL編碼,而POST可以支援多種編碼。

13. HTTP消息格式

HTTP請求消息包含4個部分:請求行、請求頭、請求空行、請求體。

HTTP響應消息也包含4個部分:狀态行、消息頭、響應空行、響應體。

常見的請求頭?

Host:主機和端口

Referer:頁面從哪來

User-Agent:浏覽器類型

Content-Length:請求正文的長度

Content-Type:檔案的MIME類型

14. HTTP狀态碼及含義?

HTTP協定的狀态碼分為5類:

1xx 開頭表示資訊

2xx 開頭表示成功

3xx 開頭表示重定向

4xx 開頭表示用戶端錯誤

5xx 開頭表示伺服器錯誤

常見的有:

200 OK 表示成功

400 Bad Request 表示伺服器不能了解請求。

401 Unauthorized 表示未授權,網頁需要使用者名和密碼

403 Forbidden 表示通路被禁止,通常是沒有權限,比如白名單限制。

404 Not Found 表示路徑錯誤,伺服器找不到被請求的頁面。

500 Internal Server Error 表示伺服器錯誤,通常是背景代碼執行報錯了。

15. HTTP和HTTPS的差別?

還是從效率和安全兩個方面來分析:

首先是安全性:

HTTPS使用SSL加密傳輸,通過證書驗證使用者身份,安全性比較高

而HTTP是明文傳輸、不進行身份驗證,安全性較低

再就是效率:

HTTP協定比較簡單,速度也就快。

而HTTPS需要加密,需要驗證身份,保證安全性的同時,速度也會慢很多。

還有一些小的方面,比如:

HTTP使用80端口,HTTPS使用443端口;

HTTPS的證書很多都要付費,而HTTP不需要證書,也就不用花錢。

16. cookie和session的差別?

還是從效率和安全性兩個方面分析:

cookie儲存在用戶端的浏覽器裡,很容易被人竊取,并不安全。

而session儲存在伺服器上,一般人看不到,是以比較安全。

再就是效率:

session需要從伺服器擷取,通路過多時,會影響伺服器的性能。

而cookie直接從本地擷取,并且很多浏覽器都會限制cookie的大小和數量,是以效率比較高。

17.常見端口及對應的服務?

端口 服務

20 FTP(檔案傳輸協定)傳輸資料

21 FTP(檔案傳輸協定)傳輸控制指令

22 SSH

23 Telnet

25 SMTP(簡單郵件傳輸協定)

53 DNS(域名解析協定)

80 HTTP(超文本傳輸協定)

443 HTTPS(超文本安全傳輸協定)

1521 Oracle資料庫預設端口

3306 MySQL資料庫預設端口

3389 遠端桌面

8080 Web服務(tomcat等web伺服器)

————————————————

版權聲明:本文為CSDN部落客「士别三日wyx」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/wangyuxiang946/article/details/124766492

繼續閱讀