linux高性能服務器編程 (一) --Tcp/Ip協議族


前言:

在學習swoole入門基礎的過程中,遇到了很多知識瓶頸,比方說多進程、多線程、以及進程池和線程池等都有諸多的疑惑。之前也有學習相關知識,但只是單純的知識面了解。而沒有真正的學習他們的來龍去脈。所以為了swoole打下堅實的基礎,打算從《linux高性能服務器編程》一書中找到啟蒙。在此作為學習總結。

書本架構:

書中 1-4 章節,主要介紹TCP/IP協議族網絡知識、以及TCP/IP通信的過程。

書中 5-15章節,主要解析服務器編程的主要方面(概念、模型、函數、實踐)

 

第一章

 1.1 TCP/IP協議族體系結構和協議 

   TCP/IP協議族是因特網最主流的協議,之前OSI將網絡通信划分為7層模型,導致了網絡通信的復雜性,后來就簡化為目前的四層協議體系。

   傳說中的TCP/IP協議大致分為四類:數據鏈路層、網絡層、傳輸層、應用層。

     

  這個網絡模型到底有什么用處呢?

    其實就是封裝數據傳輸IO交互數據。也就相當於入棧 和 出棧 的一個過程

    具體流程如下:

    1)入棧 發送 請求流程 - 客戶端

      (應用層)http數據

          (傳輸層)tcp首尾部 + http數據

      (網絡層)ip首尾部 + tcp 首尾部 + http數據

        (鏈路層)以太網首尾部 + ip首尾部 + tcp 首尾部 + http數據 

    2)出棧 接受 請求數據 - 服務端

      (鏈路層)以太網首尾部 + ip首尾部 + tcp 首尾部 + http數據

      (網絡層)ip首尾部 + tcp 首尾部 + http數據

      (傳輸層)tcp首尾部 + http數據

      (應用層)http數據

  1、數據鏈路層:

   數據鏈路層有兩個常用的協議 ARP(地址解析協議)和 RARP (逆地址解析協議) 它們實現了ip地址和機器物流地址(mac地址)之間的相互轉換。

     ARP 協議就是將 IP 地址轉換成 MAC的物理地址;因為在數據鏈路層傳輸的datagram只能識別MAC地址,所以只能將IP地址轉換成MAC物理地址再進行傳輸定向;

     ARP 的工作原理:發出一個ARP request 這個請求是個沒有指定目的地的廣播,當網絡中有匹配的物理地址時,就將這個物理地址返回即 ARP reply. ARP replay 帶着明確地址的目標地址 (MAC物理地址) 。

         RARP 就是 ARP的逆向,也就是 MAC物理地址轉換成 IP地址。因為為了用於網絡上某些無磁盤操作系統的IP地址設計的,具有磁盤的操作系統通常是從磁盤中的配置文件中讀取IP地址的,但是無盤系統無法這樣操作,所以就需要將MAC地址轉換成IP地址。

   RARP 的工作原理:RARP 的 request 和 replay 的工作原理類似,但是發送的請求過程遠比 ARP 復雜,因為 RARP request packet包中沒有IP地址,就無法通過路由器進行轉發,因為路由器是工作在網絡層的,網絡層的協議是IP協議,因此執行流程復雜。具體詳情可百度一下。

  2、網絡層:

   網絡層最核心的協議是IP協議,由於通信的兩台主機不是直接相連的,所以IP協議是實現數據包的選路和轉發。並通過路由器的形式轉發,輪訓的重復直到尋找到合適的路由器將數據包成功送達到目標主機。或者發送失敗而被丟棄。

   網絡層另一個重要的ICMP協議(因特網控制報文協議):主要用於檢測網絡連接。它實際上不是一個真正意義上的協議,而是IP協議的一個重要補充。ICMP協議使用報文格式如圖:

   

     1) 8位類型知道用於區分報文類型,ICMP報文分為兩大類:一類是差錯報文,另一類是查詢報文

     2)有的ICMP報文還使用8位代碼字段進行不同的細分。

     3)ICMP 報文使用16位校驗和字段對整個報文進行循環用於校驗。

  3、傳輸層:

    傳輸層協議主要有三個:TCP協議、UDP協議和SCTP協議。傳輸層為應用程序封裝了一條端到端的邏輯通信鏈路,它負責數據的收發、鏈路的超時重連等。通常我們只討論前兩種協議。

    TCP協議(傳輸控制協議)提供可靠的、面向連接的和基於流的服務(流沒有邊界控制)。TCP協議提供超時重傳、數據確認等方式確保數據被正確送達目的端,所以TCP服務是可靠的連接。

    UDP協議(用戶數據報協議)和TCP協議恰恰相反,它提供應用層不可靠、無連接和基於數據報的服務。

    SCTP協議(流控制傳輸協議)傳輸電話信號設計的

    

性能對比 TCP/IP

UDP

可靠性 可靠

不可靠

連接性 面向鏈接

無連接

報文 面向字節流

面向報文

效率 傳輸效率低

傳輸效率高

雙工性 全雙工

一對一、一對多、多對多

應用場景 效率要求低,准確性高

效率要求低,准確性低

阻塞控制 慢開始,擁塞避免,快重傳,快恢復

傳輸速度

 

  4、應用層:

    應用層負責處理應用程序的邏輯。數據鏈路層、網絡層和傳輸層負責處理網絡通信細節,必須穩定高效,所以它們都放在內核空間中實現。而應用層則在用戶空間實現,因為它計算的邏輯相對龐大比如(文件傳輸、名稱查詢、網絡管理等)。

    應用層有很多協議:

    ping是應用程序:不是一個協議、它是檢測網絡連接、是網絡環境調試的必備工具。

    telnet是遠程登錄協議:它可以讓我們在本地完成遠程任務。

    OSPF開放最短路徑優先:是一個動態路由更新協議,用於路由器之間的通信,告知對方各種的路由信息。

    DNS域名服務:將域名和IP地址相互映射的一個分布式數據庫。(后面介紹)

    應用層協議:可以跳過傳輸層直接使用網絡層提供服務。    

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM