日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等

發布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试必会系列 - 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(Transmission Control Protocol)–提供面向連接的,可靠的數據傳輸服務。
  • 用戶數據協議 UDP(User Datagram Protocol)–提供無連接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。
  • 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 給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。
  • 校驗和: TCP 將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
  • TCP 的接收端會丟棄重復的數據。
  • 流量控制: TCP 連接的每一方都有固定大小的緩沖空間,TCP的接收端只允許發送端發送接收端緩沖區能接納的數據。當接收方來不及處理發送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。 (TCP 利用滑動窗口實現流量控制)
  • 擁塞控制: 當網絡擁塞時,減少數據的發送。
  • ARQ協議: 也是為了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認后再發下一個分組。
  • 超時重傳: 當 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 協議,在上面搭東西去優化。

    三次握手

    三次握手只是在建立連接。三次握手之后,才有資源的開辟。可以開始傳輸數據了。

  • C -> S (syn, seq=j) C 說,我想連接
  • S -> C (syn+ack, ack=j+1, syn=k) 發完之后,C 知道了 S 能收到自己的消息
  • C -> S (ack, ack=k+1) 發完之后,S 知道了 C 能收到自己的消息(確認是雙向的),這就是為什么需要第三次握手
  • 三次握手之后,雙方開辟資源,建立了 socket,實際應用時,第三次握手包和發送的數據包是粘連在一起的。

    四次分手

  • C -> S (FIN) C 說,我想斷開連接
  • S -> C (FIN+ack) S 知道了 C 想斷開(但此時不能立刻銷毀連接,因為可能還有一些數據沒有發送完畢)
  • S -> C (FIN) S 說,我也想斷開連接
  • C -> S (ack) C 說,好的,斷開吧
  • 然后連接的兩方就都會銷毀之前開辟的資源。

    三次握手->數據傳輸->四次分手,這個過程稱為一個最小粒度,不可被分割。

    為什么握手需要三次,分手需要四次?

    如果類比三次握手,在第二次揮手的時候同時發 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基础,三次握手、四次挥手等的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。