面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等
本文已收錄至 Github(MD-Notes),若博客中圖片模糊或打不開,可以來我的 Github 倉庫,包含了完整圖文:https://github.com/HanquanHq/MD-Notes,涵蓋了互聯網大廠面試必問的知識點,講解透徹,長期更新中,歡迎一起學習探討 ~
更多內容,可以訪問:
面試必會系列專欄:https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系統系列專欄:https://blog.csdn.net/sinat_42483341/category_10519484.html
目錄
- 網絡IO
- OSI 與 TCP/IP 各層的結構與功能,都有哪些協議?
- 七層體系結構圖
- 1、應用層
- 2、傳輸層
- 3、網絡層
- 4、數據鏈路層
- 5、物理層
- 數據經過網卡,傳輸到 CPU 的過程
- TCP 協議
- TCP 的狀態變遷圖
- TCP 協議如何保證可靠傳輸?
- TCP協議
- IP 協議
- UDP 協議
- 三次握手
- 四次分手
- 為什么握手需要三次,分手需要四次?
- 為什么四次分手之后,還會等兩個傳輸時間,才會釋放資源?
- socket
- IP 地址
- HTTP 長連接、短連接
網絡IO
OSI 與 TCP/IP 各層的結構與功能,都有哪些協議?
七層體系結構圖
7層是學術界的結果(沒有落地),5層是工業界的結果
描述了如何架構整個互聯網生態的問題
1、應用層
應用層(application-layer)的任務是通過應用進程間的交互來完成特定網絡應用。
應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。對于不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如 域名系統DNS,支持萬維網應用的 HTTP協議,支持電子郵件的 SMTP協議等等。我們把應用層交互的數據單元稱為報文。
域名系統
域名系統(Domain Name System縮寫 DNS)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。
HTTP協議
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的 WWW(萬維網) 文件都必須遵守這個標準。設計 HTTP 最初的目的是為了提供一種發布和接收 HTML 頁面的方法。(百度百科)
2、傳輸層
運輸層(transport layer)的主要任務就是負責向兩臺主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。“通用的”是指并不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由于一臺主機可同時運行多個線程,因此運輸層有復用和分用的功能。所謂復用就是指多個應用層進程可同時使用下面運輸層的服務,分用和復用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。
運輸層主要使用以下兩種協議:
TCP 與 UDP 的對比見問題三。
3、網絡層
在計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。 在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由于網絡層使用 IP 協議,因此分組也叫 IP 數據報 ,簡稱 數據報。
這里要注意:不要把運輸層的“用戶數據報 UDP ”和網絡層的“ IP 數據報”弄混。另外,無論是哪一層的數據單元,都可籠統地用“分組”來表示。
這里強調指出,網絡層中的“網絡”二字已經不是我們通常談到的具體網絡,而是指計算機網絡體系結構模型中第三層的名稱.
互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接起來的。互聯網使用的網絡層協議是無連接的網際協議(Intert Protocol)和許多路由選擇協議,因此互聯網的網絡層也叫做網際層或IP層。
4、數據鏈路層
- 數據鏈路層傳輸的是數字信號 010101
- 網卡是將 模擬信號->數字信號、數字信號->模擬信號 的過程,既不屬于物理層,也不屬于數據鏈路層,網線上傳輸的是模擬信號
數據鏈路層(data link layer)通常簡稱為鏈路層。兩臺主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的 IP 數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。
在接收數據時,控制信息使接收端能夠知道一個幀從哪個比特開始和到哪個比特結束。這樣,數據鏈路層在收到一個幀后,就可從中提出數據部分,上交給網絡層。 控制信息還使接收端能夠檢測到所收到的幀中有誤差錯。如果發現差錯,數據鏈路層就簡單地丟棄這個出了差錯的幀,以避免繼續在網絡中傳送下去白白浪費網絡資源。如果需要改正數據在鏈路層傳輸時出現差錯(這就是說,數據鏈路層不僅要檢錯,而且還要糾錯),那么就要采用可靠性傳輸協議來糾正出現的差錯。這種方法會使鏈路層的協議復雜些。
5、物理層
- 物理層傳輸的是光電信號
在物理層上所傳送的數據單位是比特。 物理層(physical layer)的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。 使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么。“透明傳送比特流”表示經實際電路傳送后的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。
數據經過網卡,傳輸到 CPU 的過程
TCP 協議
TCP 的狀態變遷圖
TCP 協議如何保證可靠傳輸?
TCP協議
TCP 是面向連接的,可靠的傳輸協議,是有確認的。
一臺主機最多65535個端口號。(別人進來訪問我的話,訪問的都是我的同一個端口號,比如80)
在線視頻傳輸不適合每一個包都相互確認,因此視頻不是通過TCP/IP協議傳輸的
IP 協議
魚和熊掌不可兼得:低延遲、高吞吐量、低丟包率、低成本,如果要保證前三個的話,設備成本會很高。
IPV4 協議頭
UDP 協議
UDP 協議使對 IP 協議的封裝。為什么不直接用 IP 協議,而要用 UDP 協議?因為 IP 協議只能把數據從一個網卡發送到另一個網卡,而 UDP 協議可以定位到具體的應用程序,即 IP:port
HTTP3.0 就是建立在 UDP 上的,因為它協議簡單,雖然沒有提供可靠性,但是它給你自己的實現提供了無數種可能,這也是 UDP 的優勢。HTTP3.0 就是利用 UDP 在上面重新搭建了自己的協議,并且重新實現了可靠性。因此,如果在極端應用場景下(如,大并發)你有實力在簡單的 UDP 基礎上保證可靠性,提高傳輸速度,你也可以采用 UDP 協議,在上面搭東西去優化。
三次握手
三次握手只是在建立連接。三次握手之后,才有資源的開辟。可以開始傳輸數據了。
三次握手之后,雙方開辟資源,建立了 socket,實際應用時,第三次握手包和發送的數據包是粘連在一起的。
四次分手
然后連接的兩方就都會銷毀之前開辟的資源。
三次握手->數據傳輸->四次分手,這個過程稱為一個最小粒度,不可被分割。
為什么握手需要三次,分手需要四次?
如果類比三次握手,在第二次揮手的時候同時發 FIN + ACK 明顯不合理,因為被動方可能沒有數據發送完,你這么關太草率了,所以需要四次。
為什么四次分手之后,還會等兩個傳輸時間,才會釋放資源?
因為如果最后 C 端返回的 ACK 號丟失了,這時 S 端沒有收到 ACK,會重發一遍 FIN,如果此時客戶端的套接字已經被刪除了,會發生什么呢?套接字被刪除,端口被釋放,這時別的應用可能創建新的套接字,恰好分配了同一個端口號,而服務器重發的 FIN 正好到達,這個 FIN 就會錯誤的跑到新的套接字里面,新的套接字就開始執行斷開操作了。為了避免這樣的誤操作,C 端會等幾分鐘再刪除套接字。
socket
套接字,ip:port ip:port 四元組,為了區分每一個 socket 對應關系
IP 地址
-
IP 地址 ?11000000? ?10101000? ?10010110? 0000?0011? (192.168.150.11)
-
子網掩碼:二進制按位與 11111111 11111111 11111111 00000000 (255.255.255.0)
-
子網:?11000000? ?10101000? ?10010110? 0000?0000 (192.168.150.0)?
-
下一跳機制
-
路由表
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-z1yWKF92-1610792773650)(…/images/route.png)]
-
通過修改 mac 地址找下一跳。在不考慮 NAT 的情況下,ip 地址不會改變
- mac 地址記錄在 arp 表中
- 鏈路層[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-N0vBwFLn-1610792773651)(…/images/lianluceng.png)]
-
HTTP 長連接、短連接
在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。
而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:
Connection:keep-alive在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。
HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
總結
以上是生活随笔為你收集整理的面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac安装brew失败怎么办?
- 下一篇: 面试必会系列 - 11.1 一文读懂Ma