前言:
在學習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地址相互映射的一個分布式數據庫。(后面介紹)
應用層協議:可以跳過傳輸層直接使用網絡層提供服務。