Q:簡介 TCP 和 UDP 區別,他們位于哪一層?
他們位于網絡層.區別:
- TCP是面向有連接的,UDP是無連接的
- TCP具有丟包重發、流量控制的功能.
- TCP要求系統資源較多,UDP較少
- TCP保證數據正確性,UDP可能丟包
- TCP保證數據順序,UDP不保證
Q:路由器和交換機的工作原理大概是什么,他們分別用到什么協議,位于哪一層?
交換機位于數據鏈路層,他有多個端口,可以連接不同的設備。它的工作原理如下:
當主機A向主機B發送幀時,交換機從源MAC地址可以知道主機A與端口1連接,然后自動學習到轉發表里面去。同樣的主機B很端口2連接,那么主機B發送給主機A的幀只會拷貝到端口1.
路由器位于網絡層,它的主要目的是為數據包選擇最佳路由路徑。
主機A會通過它的路由表找到目標地址的路由器2,然后將數據轉發到目標路由器2上,路由器2又通過路由表把數據轉發到主機B上。
Q:描述TCP 協議三次握手,四次釋放的過程。
Q:為什么建立連接時是三次握手,兩次行不行?如果第三次握手失敗了怎么處理
不行。如果只是兩次握手的話,容易導致服務器建立空的連接,浪費資源。
假設沒有第三次確認,客戶端向服務端發送了 SYN,請求建立連接。由于延遲,服務端沒有及時收到這個包。于是客戶端重新發送一個 SYN 包。回憶一下介紹 TCP 首部時提到的序列號,這兩個包的序列號顯然是相同的。
假設服務端接收到了第二個 SYN 包,建立了通信,一段時間后通信結束,連接被關閉。這時候最初被發送的 SYN 包剛剛抵達服務端,服務端又會發送一次 ACK 確認。由于兩次握手就建立了連接,此時的服務端就會建立一個新的連接,然而客戶端覺得自己并沒有請求建立連接,所以就不會向服務端發送數據。從而導致服務端建立了一個空的連接,白白浪費資源。
在三次握手的情況下,服務端直到收到客戶端的應答后才會建立連接。因此在上述情況下,客戶端會接受到一個相同的 ACK 包,這時候它會拋棄這個數據包,不會和服務端進行第三次握手,因此避免了服務端建立空的連接。
如果第三次握手失敗了怎么辦?
服務器會重新發送一條RST的報文,進入CLOSE狀態,客戶端收到后必須重新進行第一次連接。
關閉連接時,第四次握手失敗怎么處理?
Q:TCP 協議是如何進行流量控制,擁塞控制的?
通過控制TCP的窗口大小.
Q:你怎么理解分層和協議?
就是計算機與計算機之間通過網絡實現通信時事先達成的一種“約定”。這種約定使那些不同廠商的設備,不同的CPU以及不用的操作系統組成的計算機之間,只要遵循先攻的協議就能夠事先通信。反之,如果所使用的協議不同,就無法實現通信。
協議分層就如同計算機軟件中的模塊化開發。這一模型將通信協議中必要的功能分成了7層,通過這些分層,使得那些比較復雜的網絡協議更加簡單化,在這一模型中,每個分層都接受由它下一層所提供的特定服務,并且負責為自己的上一層提供特定的服務,上下層之間進行交互時所遵循的約定叫做“接口”。同一層之間的交互所遵循的約定叫做“協議”。PSI參考模型是的建議是比較理想化的,她希望實現從第一層到第七層的所有模塊,并將他們組合起來實現網絡通信。分層可以將每個分層獨立使用,即使系統中某些分層發生變化,也不會波及整個系統。因此,可以構造一個擴展性和靈活性都較強的系統。此外,通過分層能夠細分通信功能,更易于單獨實現每個分層的協議,并界定各個分層的具體責任和義務,這些都屬于分層的優點。而分層的劣勢,可能就在于過分模塊化,使處理變得更加沉重以及每個模塊都不得不實現想死的處理邏輯等問題。
Q:HTTP 請求中的GET 和 POST 的區別?
- GET 請求可以被緩存,可以被收藏為書簽,但 POST 不行。
- GET 請求會保留在瀏覽器的歷史記錄中,POST 不會。
- GET 請求的長度有限制(不同的瀏覽器不一樣,大約在幾 Kb 左右),URL 的數據類型只能是 ASCII 字符,POST 請求沒有限制。
- GET 請求的參數在 URL 中,因此絕不能用 GET 請求傳輸敏感數據。POST 請求數據則寫在 HTTP 的請求頭中,安全性略高于 GET 請求。
Q:Cookie 和 Session區別?
HTTP 是一種無狀態的連接,客戶端每次讀取 web 頁面時,服務器都會認為這是一次新的會話。但有時候我們又需要持久保持某些信息,比如登錄時的用戶名、密碼,用戶上一次連接時的信息等。這些信息就由 Cookie 和 Session 保存。
這兩者的根本性區別在于,cookie 保存在客戶端上,而 session 則保存在服務器中。由此我們還可以拓展出以下結論:
- cookie 相對來說不安全,瀏覽器可以分析本地的 cookie 進行 cookie 欺騙。
- session 可以設置超時時間,超過這個時間后就失效,以免長期占用服務端內存。
- 單個 cookie 的大小有限制(4 Kb),每個站點的 cookie 數量一般也有限制(20個)。
- 客戶端每次都會把 cookie 發送到服務端,因此服務端可以知道 cookie,但是客戶端不知道 session。
當服務器接收到 cookie 后,會根據 cookie 中的 SessionID 來找到這個客戶的 session。如果沒有,則會生成一個新的 SessionID 發送給客戶端。
Q:談談你對 HTTP 1.1,2.0 和 HTTPS 的理解。
使用 HTTP 協議時,客戶端首先與服務端的 80 端口建立一個 TCP 連接,然后在這個連接的基礎上進行請求和應答,以及數據的交換。
HTTP 有兩個常用版本,分別是 1.0 和 1.1。主要區別在于 HTTP 1.0 中每次請求和應答都會使用一個新的 TCP 連接,而從 HTTP 1.1 開始,運行在一個 TCP 連接上發送多個命令和應答。因此大幅度減少了 TCP 連接的建立和斷開,提高了效率。
HTTP2.0與HTTP 1.1相比,主要區別包括
HTTP/2采用二進制格式而非文本格式
HTTP/2是完全多路復用的,而非有序并阻塞的——只需一個連接即可實現并行
使用報頭壓縮,HTTP/2降低了開銷
HTTP/2讓服務器可以將響應主動“推送”到客戶端緩存中
HTTPS把對稱加密、非對稱加密和CA結合起來以保證數據安全
總結一下 HTTPS 協議是如何避免前文所說的三大風險的:
先用非對稱加密傳輸密碼,然后用這個密碼對稱加密數據,使得第三方無法獲得通信內容
發送方將數據的哈希結果寫到數據中,接收方解密后對比數據的哈希結果,如果不一致則說明被修改。由于傳輸數據加密,第三方無法修改哈希結果。
由權威機構頒發證書,再加上證書校驗機制,避免第三方偽裝參與通信。