計算機網路面試專題
1.TCP,UDP介紹,差別,UDP保證可靠性 ?
TCP是面向連線的可靠傳輸 UDP是無連線的不可靠傳輸
TCP是頭部消耗大最少20位元組 UDP8位元組
TCP是面向報文的 UDP是面向位元組流的
TCP是隻支援1對1通訊 UDP可以1對多 多對一 多對多通訊
2.簡述TCP的三次握手四次揮手
三次握手:客戶端發出一個報文頭部SYN標誌位為1,併發送一個sqn為x,此時客戶端進入SYN—SEND狀態,服務端收到連線請求迴應一個報文,
其中標誌位ACK確認號為1,SYN標誌位為1,seq為y,ack為x+1,此時客戶端進入SYN—received狀態。客戶端收到報文後,傳送ACK確認號為1,
ack為y+1,seq為x+1。
四次握手: 客戶端發出一個報文,其中標誌位FIN為1,seq為x,客戶端進入final-wait狀態。服務端收到後傳送ACK=1 ack=x+1 seq=y,
此時服務端進入Close-wait狀態,此時服務端任然可以繼續傳送資料,等服務端傳送完後傳送一個FIN=1,ACK=1,seq=z,ack=x+1,
此時服務端進入Last-ACK狀態。客戶端收到後傳送確認ACK=1,seq=x+1,ack=z+1。服務端收到後進入連線關閉狀態,此時客戶端進入
Time—wait狀態,等待2個MSL時間後,連線關閉。
3、為什麼要TIMEWAIT解釋一下等待2個MSL?
因為如果服務端發給客戶端的FIN沒有收到客戶端的迴應會重新發送FIN斷開連線請求,客戶端等待這兩個MSL是因為如果服務端沒有收到斷開連線的確認,
那麼在這兩個MSL時間內肯定會收到服務端重新發送的斷開連線的報文,如果等待的時間內沒有收到服務端的任何訊息,那麼說明服務端已經收到了客戶端
確認斷開連線的ACK報文。
(備註TCP標誌位:SYN表示建立連線,FIN表示關閉連線,ACK表示響應,PSH表示有DATA資料傳輸,RST表示連線重置。)
4.什麼是SYN Flood攻擊?如何避免?
有壞人他平凡傳送三次握手的第一次握手,服務端給他傳送SYN後,這個時候服務端進入SYN-received狀態。但是它不進行第三次握手,所以服務端就
一直處於SYN-received狀態,如果這樣子請求很多就會找出很多的SYN-received狀態,就是SYN Flood。
防範:使用Reset認證,它是利用的是TCP協議的可靠性,也是首先由DDOS防護系統來響應syn。防護裝置收到syn後響應syn_ack,將Acknowledgement
number (確認號)設為特定值(記為cookie)。當真實客戶端收到這個報文時,發現確認號不正確,將傳送reset報文,並且sequence number
為cookie + 1。 而偽造的源,將不會有任何迴應。這樣我們就可以將真實的客戶端IP加入白名單。
5.TCP/IP協議的可靠性是怎樣保證的?(滑動視窗)
主要是停止等待協議和連續ARQ協議。
停止等待協議是最簡單的可靠傳輸,因為它傳送一個包就等待對方確認,收到確認後就傳送下一個包,若超時就重發。
停止等待協議效率太低了,所以就基於流水線的原理有了連續ARQ協議,連續ARQ協議是維持了一個滑動視窗,位於傳送視窗內的分組都可連續傳送出去,
而不需要等待對方的確認,傳送方每收到一個確認, 就把傳送視窗向前滑動一個分組的位置。TCP每傳送一個報文段,就對這個報文段設定一次計時器,
只要計時器設定的重傳時間到但還沒有收到確認,就要重傳這一報文段。
6、介紹一下超時重傳
TCP每傳送一個報文段,就對這個報文段設定一次計時器,只要計時器設定的重傳時間到但還沒有收到確認,就要重傳這一報文段。超時時間的選擇一般
是TCP動態指定的,並不固定,但是一般是一個RTT即報文的往返時間。
7.TCP的擁塞控制
一般來說擁塞控制有慢開始、擁塞避免、快重傳、快恢復四種演算法。一般來說都是組合這幾個演算法達成擁塞控制的,主要的演算法思想是逐步增加擁塞視窗
的大小。慢開始演算法是指數增長,級每一次增長為上一次的2倍,當到達門限值的時候就轉為擁塞避免演算法,擁塞避免演算法是一次增長一個視窗值,當出
現超時的時候,擁塞視窗會重新從1開始增長,門限值為之前最大擁塞視窗的一半(代價有點大,應該避免超時,所以有了快重傳與快恢復演算法)。快重
傳規定如果沒有收到一個包那就把此後所有的包的確認號都設定成丟失的那個包的序列號,當傳送方出現3個重複的ACK時,說明有一個包丟失了,觸發
快重傳演算法,立刻傳丟失的包,此時擁塞視窗門限值為之前最大擁塞視窗的一半,但是是從門限值開始線性增長,並不是從1開始增長。快恢復演算法就是
擁塞視窗不從1開始,從門限值開始。
8.為什麼IPv4的IP地址還沒用完?
因為我們每個人不一定都需要公網ip地址,基本上我們大多數用網的場景都是我們去訪問別人,而不是別人訪問我們,我們可以使用公網ip加區域網的方式。
即我們在家,在公司或者正常用網的情況下,路由器給我們分配的IP地址都是192.168.1開頭的地址,該地址被tcp規定為特殊ip,那麼我們訪問192.168.1
開頭的地址的時候路由器會根據規則去當前區域網連線,因為它一定不是公網ip。如果我們訪問一個公網ip,路由器就會轉發到對應的公網ip上形成網路通訊。
那麼別人怎麼知道192.168.1.*是誰呢?這個是因為我們每一個區域網都有一個公網ip地址的出口,表面上我們使用的是區域網的地址,但是實際上我們包在
公網IP地址的路由器哪裡會將源地址更改為路由器的公網ip地址然後與網際網路進行通訊。伺服器傳送回來的資訊也會到這個公網IP地址這個地方,那麼這個公
共出口的公網路由器怎麼知道是哪一個192.168呢,路由器裡面有個表,對應了局域網IP地址與MAC地址使用ARP協議進行解析,就能找到對應的192的主機了
9.網絡卡收到一條資料到程序處理資料,這之間經歷了什麼(中斷的上半部下半部,網路層協議拆包)
物理層將其電訊號翻譯成資料鏈路層的幀,資料鏈路層會判斷是不是直接的幀,並進行差錯檢測,然後對幀進行解碼,去掉頭尾然後傳給網路層,網路層去掉
ip頭傳遞給運輸層,運輸層將資料根據序號排序根據埠傳遞給應用層的程序。
10.介紹一下路由
路由其實就是傳送方一次次轉發,直到接收方,傳送方的包到了一個路由器,路由器會對包進行解析,拿到目的mac地址和ip地址,然後查詢路由表,查詢
下一條的IP地址,然後從對應的物理埠將包傳送給下一個路由器。到達最後一個路由器的時候根據ARP協議獲取Mac地址傳送給對應的主機。
11、HTTP中POST和GET的區別
GET的引數是放在請求URL裡面,對應資料不安全,POST請求是放在請求體裡面,資料相對安全。
一般用GET請求獲取資料,POST請求提交資料。
GET請求可以保證冪等性,因為它基本上只有讀操作,不會更改資料庫等,post不保證冪等性,因為多次提交可能會對資料有影響。
GET傳輸資料有大小限制,POST沒有,並且post可以傳多種不同型別的資料,圖片視訊等等。
12、 HTTP的頭部欄位
請求報文包含三部分:
請求行:包含請求方法、URI、HTTP版本資訊
請求首部欄位
請求內容實體
響應報文包含三部分:
狀態行:包含HTTP版本、狀態碼、狀態碼的原因短語
響應首部欄位
響應內容實體
13、HTTP狀態碼
200:請求被正常處理
204:請求被受理但沒有資源可以返回
206:客戶端只是請求資源的一部分,伺服器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定範圍的資源。
301:永久性重定向
302:臨時重定向
303:與302狀態碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上
304:傳送附帶條件的請求時,條件不滿足時返回,與重定向無關
307:臨時重定向,與302類似,只是強制要求使用POST方法
400:請求報文語法有誤,伺服器無法識別
401:請求需要認證
403:請求的對應資源禁止被訪問
404:伺服器無法找到對應資源
500:伺服器內部錯誤
503:伺服器正忙
500 Internal Server Error 服務端發生內部錯誤,無法完成請求。
501 Not Implemented 服務端不支援客戶端的請求,無法完成請求。
502 Bad Gateway 作為閘道器或代理的伺服器,從遠端服務端接收到了一個無效的請求。用來說明服務端現在無法為請求提供服務,但是將來可以。什麼時候資源會變為可用可包含在
503 Service Unavailable 服務端的Retry-After頭部中。
504 Gateway Timeout 類似於408,只是作為閘道器或代理的伺服器,未及時從遠端服務端獲取請求。
505 HTTP Version Not 服務端不支援請求的HTTP協議的版本,無法完成處理。
14 請求方式有哪些,都有什麼區別?
GET: 用於請求訪問已經被URI(統一資源識別符號)識別的資源,可以通過URL傳參給伺服器
POST:用於傳輸資訊給伺服器,主要功能與GET方法類似,但一般推薦使用POST方式。
PUT: 傳輸檔案,報文主體中包含檔案內容,儲存到對應URI位置。
HEAD: 獲得報文首部,與GET方法類似,只是不返回報文主體,一般用於驗證URI是否有效。
DELETE:刪除檔案,與PUT方法相反,刪除對應URI位置的檔案。
OPTIONS:查詢相應URI支援的HTTP方法。
15 Http協議中Http1.0與1.1區別?
在http1.0中,當建立連線後,客戶端傳送一個請求,伺服器端返回一個資訊後就關閉連線,當瀏覽器下次請求的時候又要建立連線,顯然這種不斷建立連線的方式,會造成很多問題。
在http1.1中,引入了長連線的概念,通過這種連線,瀏覽器可以建立一個連線之後,傳送請求並得到返回資訊,然後繼續傳送請求再次等到返回資訊,也就是說客戶端可以連續傳送多個請求,而不用等待每一個響應的到來。
16、HTTP頭部可以包含二進位制嗎?
不可以吧,我沒有遇到過
17、Http協議有那些特徵?
1、支援客戶/伺服器模式;2、簡單快速;3、靈活;4、無連線;5、無狀態。
18、HTTP和HTTPS的區別
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
19、HTTPS的安全外殼是怎麼實現的
客戶端在使用HTTPS方式與Web伺服器通訊時有以下幾個步驟。
(1)客戶使用https的URL訪問Web伺服器,要求與Web伺服器建立SSL連線。
(2)Web伺服器收到客戶端請求後,會將網站的證書資訊(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與Web伺服器開始協商SSL連線的安全等級,也就是資訊加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話金鑰,然後利用網站的公鑰將會話金鑰加密,並傳送給網站。
(5)Web伺服器利用自己的私鑰解密出會話金鑰。
(6)Web伺服器利用會話金鑰加密與客戶端之間的通訊。