計算機網絡-----真實面試題彙總(含答案)

面試題1. TCP,UDP區別?

  1. TCP是面向字節流的傳輸方式,而UDP是面向數據報的傳輸方式
  2. TCP是面向連接的,而UDP就不是面向連接的
  3. TCP是可靠性傳輸的有很多保證可靠性傳輸的機制(比如對數據包進行排序、效驗和、流量控制、擁塞控制、停止等待協議、超時重傳、滑動窗口),而UDP就沒有這種機制所以他不是可靠性傳輸,但是他的傳輸效率高
  4. TCP的首部字段20-60字節,而UDP的首部字段只有8個字節

面試題2. 三次握手、四次揮手過程?爲什麼是三次和四次?

(1)三次握手的過程:
在這裏插入圖片描述

  • 第一次建立握手首先是客戶端先向服務器端進行請求的報文,發送報文首部SYN=1(TCP規定SYN=1的報文段不能攜帶數據,但是需要消耗掉一個序號)、seq=x 的初始序列號
  • 第二次是服務器端向客戶端進行迴應的報文,SYN=1,ACK=1,seq=y(表示我服務器初始化序號y開始給你發數據),ack=x+1(表示對第一次的序號爲x的數據進行確認,我已經收到了,請你客戶端下一次從序號x+1開始發送)
  • 第三次是客戶端向服務器端發送確認報文ACK=1,ack=y+1(表示我客戶端已經收到了你上次從y開始發送的數據),seq=x+1(表示自己的序列號),此時TCP連接建立完成,可以發送數據。TCP規定,ACK報文段可以攜帶數據,但是如果不攜帶數據則不消耗序號

(2)四次揮手的過程:

在這裏插入圖片描述

  • 第一次是客戶端向服務器端進行發送一個FIN=1(表示我客戶端想要結束連接,相當於分手信),其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1)== TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。==
  • 第二次是服務器端對第一次進行迴應發送確認報文,ACK=1,ack=u+1(表示對上一次你發送的我收到了,希望下次你從序號u+1開始發送),然後帶上我自己的序號從seq=v,到這裏相當於客戶端---->服務器端的通道就被關閉了,但是服務器---->客戶端的通道還咩有關閉,如果服務器再給客戶端發數據他還可以收到數據.
  • 第三次是服務器開始向客戶端請求斷開連接(服務器不愛客戶端了,我以後再也不聯繫你了),FIN=1,ack=u+1(表示你上一次發我的我都收到了),seq=w(服務器自己的發送序號),然後等待客戶端迴應。
  • 第四次就是客戶端向服務器端進行確認迴應,ACK=1,ack=w+1(表示我也收到了你給我發送的w開始的信息),seq=u+1,注意:此時連接還沒有真正釋放,必須經過2MSL(最長報文壽命)之後,整個雙方的連接纔會釋放,因爲如果不存在TIME_WAITE狀態的話,如果服務器端由於某些原因收不到客戶端最後發的確認ack的話,服務器端會重發FIN的請求關閉報文(如果超過2MSL的話,這個數據報就會在網絡中消失)

(3)那麼爲什麼TIME_WAITE的時間設置爲2MSL(2分鐘))呢?

第一,爲了保證A發送的最後一個ACK報文能夠到達B。這個ACK報文段有可能丟失,因而使處在LAST-ACK狀態的B收不到對已發送的FIN+ACK報文段的確認。B會超時重傳這個FIN+ACK報文段,而A就能在2MSL時間內收到這個重傳的FIN+ACK報文段。如果A在TIME-WAIT狀態不等待一段時間,而是在發送完ACK報文段後就立即釋放連接,就無法收到B重傳的FIN+ACK報文段,因而也不會再發送一次確認報文段。這樣,B就無法按照正常的步驟進入CLOSED狀態。
第二,A在發送完ACK報文段後,再經過2MSL時間,就可以使本連接持續的時間所產生的所有報文段都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求的報文段。

(4)爲什麼建立連接是三次握手,關閉連接確是四次揮手呢?

建立連接的時候, 服務器在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。
而關閉連接時,服務器收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,而自己也未必全部數據都發送給對方了,所以服務器端可以立即關閉,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,服務器端的ACK和FIN一般都會分開發送,從而導致多了一次。

面試題3. 揮手的6個狀態?作用?fin_wait1 、fin_wait2半關閉狀態、time_wait2msl時間close_wait、last_ack、closed

面試題3. tcp/ip傳輸數據,如果有數據丟失會怎麼樣。

  1. 如果客戶端向服務器端發送的數據丟失,對方服務器端沒有收到數據包,就不會進行確認,然後客戶端會進行重新發送剛剛丟失的數據包。稱爲自動重傳請求ARQ。

面試題4. GET和POST的區別(消息體,用途,URL,書籤,傳輸格式,長度限制)

  • 從用途方面說:GET請求一般用於一些安全性不太高的請求場景,而POST用於表單提交比較多,安全性比較高
  • 消息體方面說:GET是直接把請求的URL的放到請求頭當中,直接在標籤欄看到,而POST請求而是直接把請求的 信息放到了請求體中,用戶看不到
  • 傳輸格式來說:GET只能進行url編碼,而POST可以指定任意編碼格式進行請求
  • 長度限制方面來說:GET請求在URL欄中有固定的長度限制,不能大於2K,而POST請求的長度基本上沒有長度限制
  • 從URL方面來說:GET請求的地址可以直接保存爲書籤,但是在POST請求中就不能使用書籤保存

面試題5. http和https的區別(後者要先通過SSL層的非對稱握手過程獲得協定的對稱密鑰,用於後續會話的加/解密)

  1. 首先的區別就是在http的基礎上的http通訊接口部分使用SSL協議代替來進行加密傳輸協議
  2. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
  3. https還可以使用CA數字證書籤名,但是一般的第三方數字證書認證機構都是需要收費用的。

面試題6. TCP粘包拆包解決?

粘包問題博客:https://blog.csdn.net/zhangxinrun/article/details/6721495

面試題7. 說說跨站腳本攻擊(XSS攻擊)、跨站請求僞造(CSRF攻擊)?

  • XSS攻擊是屬於一種被動攻擊:其實就是在存在安全漏洞的Web網站內,在用戶的瀏覽器內運行非法的HTML標籤或者是JS進行的一種攻擊,能夠導致用戶的cookie被盜取,導致個人用戶信息被竊取,或者是非法顯示一些圖片等等。
  • CSRF攻擊屬於一種被動攻擊:他是一種攻擊者通過故意設置一種陷阱,讓用戶點擊,當用戶點擊的時候就使用戶帶着自己的cookie去訪問目的網站進行一些惡意操作。

面試題9. 網絡狀態碼?以 2、3、4、5 開頭的代表什麼意思。

以1XXX開頭的:表示信息行的狀態碼,代表請求正在處理

以2XXX開頭的:表示成功的狀態碼,代表正常請求處理完畢

  1. 狀態碼200表示請求成功,併成功返回數據。
  2. 狀態碼204表示請求處理成功,但是沒有資源可返回
  3. 狀態碼206表示客戶端進行範圍請求,但是隻返回了部分成功的數據

以3XXX開頭的:表示重定向的狀態碼
4. 狀態碼301:表示永久重定向,表示請求的資源已經被重新分配了新的URI
5. 狀態302:表示臨時重定向,請求的資源已經分配了新的URI,希望本次請求能使用新的URI
6. 狀態303:表示臨時重定向,請求的資源已經分配了新的URI,希望本次請求能使用新的URI,並且會把POST請求變爲GET請求
7. 狀態304:跟重定向沒有關係,表示允許客戶端請求,但是服務器沒有滿足你的請求的資源
8. 狀態307:表示零食重定向,和302代表的意思一樣,但是他不會把POST請求變爲GET請求

以4XXX開頭的:表示客戶端錯誤
9. 狀態400:表示客戶端的請求錯誤,或者請求報文的語法格式不合法
10. 狀態401:表示客戶端沒有進行認證
11. 狀態403;表示服務器端拒絕客戶端的請求
12. 狀態404:表示客戶端請求的資源服務器沒有對應的資源

以5XXX開頭的:表示服務器錯誤

  1. 狀態500:表示服務器內部在執行請求時,發生錯誤
  2. 狀態503:表示服務器正在處於超負載或者是停機維護,無法進行處理請求

面試題10. 什麼叫字節流?什麼叫數據報?tcp用哪種?

  • 字節流:在TCP進行傳輸的過程中,都是按照字節爲最小單位來進行傳輸的
  • 數據報:UDP就是是基於報文爲最小的傳輸單位的,報文和報文之間是不會合並的,如果緩衝區的大小小於報文的大小的話,就會丟棄多出部門的該報文

面試題11. 粘包怎麼解決?兩種方法 總體來說,循環處理緩衝區的包,根據格式或頭部長度來區分數據包

https://blog.csdn.net/zhangxinrun/article/details/6721495

面試題12. close_wait狀態大量存在的原因?1.調用shutdown進行半關閉 2.程序忙於其他事情,沒時間發fin包?

面試題13. tcp有哪些機制?校驗和、序列號、確認機制、超時重傳(默認1s)、窗口機制、流量控制、擁塞控制

  1. 校驗和:TCP 將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
  2. 序列號:就是在傳輸過程中TCP發送的每一個數據包進行編號,接收方對接收到的數據包進行排序,也保證了可靠性傳輸
  3. 確認機制:就是當發送方發送分組,接收方在規定時間內收到,並且回覆確認.發送方再次發送
  4. 超時重傳:就是在發送方發送完數據包之後,就會啓動一個超時計時器,如果在計時器結束之後再到達,就需要發送方需要重新對該數據包進行重新發送。
  5. 滑動窗口機制:其實就是爲了防止發送方過快的發送數據包給接受方,導致接收方也不能及時的處理這些數據包的一個機制,在發送方和接收方都有一個緩衝窗口,滑動窗口的大小意味着接收方還有多大的緩衝區可以用於接收數據。發送方可以通過滑動窗口的大小來確定應該發送多少字節的數據。當滑動窗口爲 0 時,發送方一般不能再發送數據報,但有兩種情況除外,一種情況是可以發送緊急數據,例如,允許用戶終止在遠端機上的運行進程。另一種情況是發送方可以發送一個 1 字節的數據報來通知接收方重新聲明它希望接收的下一字節及發送方的滑動窗口大小
  6. 流量控制:流量控制就是利用滑動窗口機制來進行完成的,控制發送方發送速率,保證接收方來得及接收,接收方發送的確認報文中的窗口字段可以用來控制發送方窗口大小,從而影響發送方的發送速率。將窗口字段設置爲 0,則發送方不能發送數據。
  7. 擁塞控制:擁塞控制就是爲了防止過多的數據注入到網絡中,這樣就可以使網絡中的路由器或鏈路不致過載。爲了進行擁塞控制,TCP 發送方要維持一個 擁塞窗口(cwnd) 的狀態變量。擁塞控制窗口的大小取決於網絡的擁塞程度,並且動態變化。發送方讓自己的發送窗口取爲擁塞窗口和接收方的接受窗口中較小的一個。它採用了幾種算法:慢開始 、 擁塞避免 、快重傳 和 快恢復。

面試題14. TCP的擁塞控制

面試題15. 一個數據包大小怎麼確定?mss在三次握手時確認?

面試題16. HTTP1.0 HTTP 1.1 HTTP 2.0主要區別?,長連接和短連接的區別?

HTTP1.0 HTTP 1.1主要區別:

  1. 長連接:在1.0的時候需要使用keep-alive參數來告知服務器端要建立一個長連接,但是在http1.1的時候是默認支持長連接的
  2. Host域:在1.0的時候是一個主機通過IP+端口綁定,但是在1.1之後新增加了一個host域,可以在一臺服務器上共享多個虛擬主機
  3. 帶寬優化:在1.0的時候如果你只是想要某個對象的一部分資源,他也會給你全部的資源,但是在1.1之後新加了一個range頭域,如果你需要一部分資源,服務器只會給你返回一部分資源,而且成功之後的狀態碼是206
  4. 新增了一些狀態碼:比如新增加的409(當前請求的資源和資源的當前狀態發生衝突),或者是410,請求資源永久性刪除

HTTP1.1 HTTP 2.0主要區別:

  1. 多路複用:在1.1傳輸數據的時候只能是有序的一個一個的數據包進行發送,但是在2.0的時候採用了二進制分幀的機制實現,這些封裝好的幀可以亂序的發送,發送完成之後,會對幀首部的流標識符進行重新組裝
  2. 首部壓縮:利用報文頭部壓縮
  3. 請求優先級;就是每個流可以有0-31bit的優先級,這個可以在客戶端那邊進行設置
  4. 服務端推送

Http2.0的缺點:

  1. 如果TCP的一個包丟了之後,會導致整個連接阻塞,那麼後面所有的包都會受到影響

面試題17. 爲什麼tcp有首部長度而udp沒有?

面試題18. tcp字節流導致哪些問題?不實時、無邊界可能會粘包?tcp包的長度怎麼算?

面試題19. 說一下Tcp 保活功能?

如果一個給定的連接,在兩個小時內沒有任何的動作,則服務器就向客戶發送一個探測報文段,客戶主機必須處於以下四個狀態之一:
1)客戶主機依然正常運行,並從服務器可
達,客戶的 tcp 響應正常,而服務器也知道對方是正常的,服務器在兩個小時後將保活定時
器復位。
2)客戶主機已經崩潰,並且關閉或正在重新啓動。在任何一種情況下,客戶的 tcp都沒有響應,服務器不能收到對探測的響應,並在 75s 後超時,服務器總共發送 10 個這樣的探測,每個間隔 75s。若服務器沒有收到一個響應,他就認爲客戶主機已經關閉,並終止連接。
3)客戶主機崩潰並已重新啓動,服務器將收到一個對其保活探測的響應,這個效應是一個復位,使得服務器終止這個鏈接。
4)客戶機正常運行,但服務器不可達,和 2)類似

面試題20、說一下https的連接步驟?

在這裏插入圖片描述

  1. 客戶端發起請求:當客戶端通過https對服務器發起請求的時候,https的默認端口是443而不是http的默認80端口
  2. 服務器端進行配置:其實就是服務器端需要有一對證書,這對證書中包含了公鑰和密鑰(密鑰相當於是鑰匙,公鑰相當於是一把鎖誰都能看到但是沒有鑰匙的話就打不開),證書的話是可以自己製作也可以向機構申請(需要付費),區別的話就是自己製作的證書需要客戶端驗證通過之後纔可以使用,而後者的話是不需要用戶進行驗證的。
  3. 傳送證書: 這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
  4. 客戶端解析證書:首先客戶端收到證書會先對證書進行驗證(是由客戶端的SSL/TLS來完成的),看證書是不是有效(裏面包含的有證書的頒發機構,過期時間等),如果無效的話,會彈出一個警示框,如果有效的話,就會生成一個隨機值,然後通過證書(也就是公鑰)對這個生成的隨機值進行加密,這樣就相當於把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
  5. 傳送加密信息:然後把第四步的這個加密之後的隨機值,進行發送給服務器端,如果服務器端有對應的密鑰(鑰匙),他就可以進行查看裏面的信息。
  6. 服務端解密信息: 服務端用私鑰解密後,得到了客戶端傳過來的隨機值,然後把內容通過該隨機值進行對稱加密,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠複雜,數據就夠安全。
  7. 傳輸加密後的信息:然後把加密的消息一併發送給客戶端
  8. 客戶端解密信息:客戶端用之前生產的私鑰解密服務端傳過來的信息,於是獲取瞭解密後的內容。整個過程第三方即使監聽到了數據,也束手無策。

面試題21. HTTP請求報文與響應報文格式(或者問請求頭部字段的)?

在這裏插入圖片描述
請求頭報文大都分爲四部分:

  1. 請求行
  2. 請求的首部字段
  3. 通用首部字段
  4. 實體首部字段

在這裏插入圖片描述
響應報文大都分爲四部分:

二次網絡學習記錄:

(1)網絡中是如何進行發送數據的和如何準備?

在這裏插入圖片描述
在這裏插入圖片描述

(2)發送一個文件再網絡過程中的整個發送流程和就收數據包的流程?

在這裏插入圖片描述

(3)網絡層的幾個協議

在這裏插入圖片描述

(4) 傳輸層:UDP的特點:

在這裏插入圖片描述
在這裏插入圖片描述

(5)傳輸層:(2)TCP的特點:

在這裏插入圖片描述

(6)傳輸層:(3)如何保證TCP傳輸是可靠傳輸:

  • 超時重傳的停等待協議:
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 爲了提高停等協議效率,就得提高信道利用率,Td是發送數據包的時間,RTT是發送和確認接收數據包的整個流程時間,Ta就是接受確認數據包的時間,其實通過公式可以看出提高信道利用率,只需要提高Td(也就是發送數據包的時間就行了),就是通過不停的發送在滑動窗口中的數據包,然後批量確認接收滑動窗口中的數據包就可以了,其實就是流水線傳輸
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • TCP中的在進行對滑動窗口確認的時候使用的是累計確認機制,不會等到滑動窗口中中的數據包過來一個進行確認一個,如果累計確認的過程中中間的3數據包丟失了,那麼會確認到2的位置,表示2後面的3和4、5都沒有收到
    在這裏插入圖片描述

(7)傳輸層:TCP的首部報文格式

在這裏插入圖片描述
這裏的文件中的序號是指把文件拆分爲很多個數據包,然後會把這些數據包排序放到TCP緩存中,但是在進行傳輸的時候會從TCP緩存中再去取不固定長度的多個數據包,來組成要發送的數據段圖中的長方形中的數據就是這個多個數據包中的第一個數據包的序號,其實這個序號也就是TCP中要發送的ACK的那個序號在這裏插入圖片描述
在這裏插入圖片描述
通過客戶端向服務器端發送一個http的get請求網頁,產生的一次交互的數據報
在這裏插入圖片描述

(8)傳輸層:如何通過TCP滑動窗口技術實現可靠傳輸?

  • 滑動窗口實現可靠傳輸
    List item
  • TCP的流量控制,會通過控制滑動窗口的大小來進行控制傳輸速率
    在這裏插入圖片描述

(9)傳輸層:爲什麼需要三次進行握手建立連接,而不是二次?

  • 是因爲當客戶A向服務器發送連接請求的時候,有可能會出現一種情況,A先發了一個同步的連接數據包,但是由於這個數據包在網絡中傳輸的路線比較遠時間比較久,然後A等了一會沒反應,就立刻又發了一個同步報文A2,這次很快就得到了B的回覆,但是此時B才收到A發的第一個報文,所以他還是會給A在發一個確認報文
  • 此時B給A回覆完第一次A發的同步數據包的時候,B就開始等着A給他發送數據,這個時候就會佔用服務B器的資源,如果出現過多這種情況的話,那麼B服務器就崩了,所以爲了避免這種情況出現,所以是必須需要第三次握手的目的就是,如果服務器回覆完A的同步報文之後,等一段時間()後,如果等不到A給B的第三次握手,那就不等了,所以也就不會浪費服務器B的資源了
  • 還有一個作用是防止已失效的連接重新建立

在這裏插入圖片描述
TCP建立的幾個狀態的變換:
在這裏插入圖片描述

(10)傳輸層:TCP的四次揮手?

在這裏插入圖片描述

【如果大佬有覺得回答的不對的地方,還請直接在評論留言,我們一起進步,謝謝。】

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