《Linux高性能服务器编程》学习笔记
《Linux高性能服務器編程》學習筆記
- Linux高性能服務器編程
- TCP/IP協(xié)議族
- TCP/IP協(xié)議族體系結構以及主要協(xié)議
- 數(shù)據(jù)鏈路層
- 網(wǎng)絡層
- 傳輸層
- 應用層
- 封裝
- 分用
- 測試網(wǎng)絡
- ARP協(xié)議工作原理
- 以太網(wǎng)ARP請求/應答報文詳解
- ARP高速緩存的查看和修改
- DNS工作原理
- DNS查詢和應答報文詳解
- IP協(xié)議詳解
- IP服務的特點
- IPv4頭部結構
- IPv4頭部結構
- 使用tcpdump觀察IPv4頭部結構
- IP分片
- IP路由
- IP模塊工作流程
- 路由機制
- 路由表更新
- IP轉(zhuǎn)發(fā)
- 重定向
- ICMP重定向報文
- IPv6頭部結構
- IPv6固定頭部結構
- IPv6擴展頭部
Linux高性能服務器編程
TCP/IP協(xié)議族
TCP/IP協(xié)議族體系結構以及主要協(xié)議
TCP/IP協(xié)議族是一個四層協(xié)議結構,自底向上分別是數(shù)據(jù)鏈路層,網(wǎng)絡層,傳輸層和應用層
數(shù)據(jù)鏈路層
-
功能:實現(xiàn)了網(wǎng)卡接口的網(wǎng)絡驅(qū)動程序,以處理數(shù)據(jù)在物理媒介(以太網(wǎng)、令牌環(huán)等)上的傳輸。
-
常用協(xié)議:
它們都實現(xiàn)了IP地址和機器物理地址(通常是MAC地址)之間的相互轉(zhuǎn)換。
-
ARP協(xié)議(Address Resolve Protocol,地址解析協(xié)議)
目標機器的IP地址 -> 物理地址
網(wǎng)絡層使用IP地址尋址一臺機器,數(shù)據(jù)鏈路層使用物理地址尋址一臺機器,因此網(wǎng)絡層必須將目標機器的IP地址轉(zhuǎn)化成物理地址,才能使用數(shù)據(jù)鏈路層提供的服務。
-
RARP協(xié)議(Reverse Address Resolve Protocol,逆地址解析協(xié)議)
用于網(wǎng)絡上的某些無盤工作站,因為缺乏存儲設備所以無盤工作站無法記住自己的IP地址,但可以使用網(wǎng)卡的物理地址來向網(wǎng)絡管理者(服務器或網(wǎng)絡管理軟件)查詢自身IP地址。
網(wǎng)絡管理者通常存有該網(wǎng)絡上所有機器的物理地址到IP地址的映射。
-
網(wǎng)絡層
-
功能:實現(xiàn)數(shù)據(jù)包的選錄和轉(zhuǎn)發(fā)
因為通信的兩臺主機并不是直接相連的,而是通過多個中間節(jié)點(路由器)連接的,網(wǎng)絡層就是要選擇這些中間節(jié)點,來確定兩臺主機之間的通信路徑。
網(wǎng)絡層對上層協(xié)議隱藏了網(wǎng)絡拓撲連接的細節(jié),使得在傳輸層和應用層看來,通信雙方是直接相連的。
-
常用協(xié)議:
-
IP協(xié)議(Internet Protocol,因特網(wǎng)協(xié)議)
根據(jù)數(shù)據(jù)包的目的IP地址來決定如何投遞它。
使用逐跳(hop by hop)的方式確定通信路徑。
-
ICMP協(xié)議(Internet Control Message Protocol,因特網(wǎng)控制報文協(xié)議)
IP協(xié)議的重要補充,用于檢測網(wǎng)絡連接。
報文格式:
-
8位類型:區(qū)分報文類型
- 差錯報文:回應網(wǎng)絡錯誤(比如目標不可到達(類型值為3)、重定向(類型值為5))
- 查詢報文:查詢網(wǎng)絡信息(ping程序使用ICMP報文查看目標是否可到達(類型值為8))
-
8位代碼:進一步細分不同的條件
比如重定向報文,使用代碼值0代表對網(wǎng)絡重定向,代碼值1表示對主機重定向。
-
16位校驗和字段:對整個報文進行循環(huán)冗余校驗(CRC),以檢驗報文在傳輸過程是否損壞。
ICMP協(xié)議并非嚴格意義上的網(wǎng)絡層協(xié)議!因為它使用屬于同一層的IP協(xié)議提供的服務。
-
-
傳輸層
-
功能:為兩臺主機上的應用程序提供端到端通信。(只關心起始端和目的端,不在乎數(shù)據(jù)包的中轉(zhuǎn)過程)
-
常用協(xié)議:
-
TCP協(xié)議(Transmission Control Protocol,傳輸控制協(xié)議)
為應用層提供可靠的,面向連接的和基于流的服務。
使用超時重傳、數(shù)據(jù)確認等方式來確保數(shù)據(jù)包被正確地發(fā)送到目的端。
-
UDP協(xié)議(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)
為應用層提供不可靠、無連接和基于數(shù)據(jù)報的服務。
-
SCTP協(xié)議(Stream Control Transmission Protocol,流控制傳輸協(xié)議)
較新,為了在因特網(wǎng)上傳輸電話信號設計的。
-
應用層
-
功能:處理應用程序的邏輯,比如文件傳輸、名稱查詢和網(wǎng)絡管理等。
-
常用協(xié)議:
-
ping
應用程序,不是協(xié)議。前文說過它可以利用ICMP報文檢測網(wǎng)絡連接,是調(diào)試網(wǎng)絡環(huán)境的必備工具。
-
telnet協(xié)議
一種遠程登錄協(xié)議,使我們可以在本地完成遠程任務。
-
OSPF協(xié)議(Open Shortest Path First,開放最短路徑優(yōu)先)
動態(tài)路由更新協(xié)議,用于路由器之間的通信,以告知對方各自的路由信息。
-
DNS協(xié)議(Domain Name Service,域名服務)
提供機器域名到IP地址的轉(zhuǎn)換
應用層協(xié)議可能跳過傳輸層直接使用網(wǎng)絡層的服務(比如ping和OSPF),也可以既使用TCP服務又可以使用UDP服務,比如DNS協(xié)議。
-
封裝
應用程序數(shù)據(jù)在發(fā)送到物理網(wǎng)絡上之前,沿著協(xié)議棧從上往下依次傳遞。
封裝:每層協(xié)議都將在上層數(shù)據(jù)的基礎上加上自己的頭部信息(有時還有尾部信息),以實現(xiàn)該層的功能。
經(jīng)過UDP封裝后的數(shù)據(jù)稱為UDP數(shù)據(jù)報(UDP diagram)。和TCP對應用程序數(shù)據(jù)的封裝不同給的是,UDP無須為應用層數(shù)據(jù)保存副本,因為提供的服務是不可靠的。
當UDP數(shù)據(jù)報發(fā)送成功后,UDP內(nèi)核緩沖區(qū)中的數(shù)據(jù)報就被丟棄了。
如果需要重發(fā)數(shù)據(jù)報的話,應用程序需要重新從用戶空間將改數(shù)據(jù)報拷貝到UDP內(nèi)核發(fā)送緩沖區(qū)中。
經(jīng)過IP封裝后的數(shù)據(jù)稱為IP數(shù)據(jù)報(IP diagram),也包括頭部信息和數(shù)據(jù)部分,數(shù)據(jù)部分就是一個TCP報文段、UDP數(shù)據(jù)報或者ICMP報文。
經(jīng)過數(shù)據(jù)鏈路層封裝的數(shù)據(jù)稱為幀(frame)。傳輸媒介不同,幀的類型也不同,比如以太網(wǎng)上傳輸?shù)氖且蕴W(wǎng)幀,令牌環(huán)網(wǎng)絡上傳輸?shù)牧钆骗h(huán)幀(token ring frame)。
以以太網(wǎng)幀為例,
分用
分用:當幀到達目的主機的時候,將沿著協(xié)議棧自底向上傳遞。各層協(xié)議依次處理幀中本層負責的頭部數(shù)據(jù),以獲得所需的信息,并最終將處理后的幀交給目標應用程序。
是依靠頭部信息中的類型字段實現(xiàn)的。
-
因為IP協(xié)議、ARP協(xié)議、RARP協(xié)議都使用幀傳輸數(shù)據(jù),所以幀的頭部需要提供某個字段(具體情況取決于幀的類型)來區(qū)分它們。
以以太網(wǎng)幀為例,使用2字節(jié)的類型字段來標識上層協(xié)議。
- 0x800 -> IP 數(shù)據(jù)表
- 0x806 -> ARP請求或應答報文
- 0x835 -> RARP請求或應答報文
-
同樣,ICMP協(xié)議、TCP協(xié)議、UDP協(xié)議都是用IP協(xié)議,所以IP數(shù)據(jù)報的頭部都采用16位協(xié)議字段來區(qū)分它們。
-
TCP報文段和UDP數(shù)據(jù)報則通過其頭部16位的端口號(port number)字段來區(qū)分上層應用程序。
幀通過上述分用步驟后,最終將封裝前的原始數(shù)據(jù)送至目標服務。這樣,在頂層目標服務看來,封裝和分用似乎沒有發(fā)生過。
測試網(wǎng)絡
分析ARP協(xié)議、IP協(xié)議、ICMP協(xié)議、TCP協(xié)議和DNS協(xié)議。
通過抓取網(wǎng)絡上的以太網(wǎng)幀,查看其中的以太網(wǎng)幀頭部、IP數(shù)據(jù)報頭部、TCP報文段頭部信息,以獲得網(wǎng)絡通信的細節(jié)。
ARP協(xié)議工作原理
APR協(xié)議能實現(xiàn)任意網(wǎng)絡層地址到任意物理地址的轉(zhuǎn)換,這里僅討論IP地址到MAC地址的轉(zhuǎn)換。
-
工作原理:
主機向自己所在的網(wǎng)絡廣播一個ARP請求,該請求包含目標機器的網(wǎng)絡地址。此網(wǎng)絡上的其他機器都會收到這個請求,但只有被請求的目標機器會回應一個ARP應答,其中包含自己的物理地址。
以太網(wǎng)ARP請求/應答報文詳解
- 硬件類型:物理地址的類型,值為1表示MAC地址
- 協(xié)議類型:要映射的協(xié)議地址類型,0x800表示IP地址
- 硬件地址長度和協(xié)議地址長度:單位是字節(jié),MAC地址長度為6字節(jié),IP地址長度為4字節(jié)
- 操作:指出4種操作類型
- 1 :ARP請求
- 2 :ARP應答
- 3 :RARP請求
- 4 :RARP應答
- 最后四個字段指定通信雙方的以太網(wǎng)地址和IP地址
- 發(fā)送端填充除目的端以太網(wǎng)地址外的其他3個字段,構建ARP請求并發(fā)送。
- 接收端發(fā)現(xiàn)該請求的目的端IP地址是自己,就把自己的以太網(wǎng)地址填進去,然后交換兩個目的端和兩個發(fā)送端地址,構建ARP應答并返回。
上圖中顯示ARP請求/應答報文長度是28字節(jié),加上以太網(wǎng)幀頭部和尾部的18字節(jié)一共46字節(jié),但有的實現(xiàn)要求以太網(wǎng)幀數(shù)據(jù)部分長度至少46字節(jié),此時ARP請求/應答報文將增加一些填充字節(jié)。在這種情況下,一個攜帶ARP請求/應答報文的以太網(wǎng)幀長度為64字節(jié)。
ARP高速緩存的查看和修改
ARP維護一個高速緩存,其中包含經(jīng)常訪問(比如網(wǎng)關地址)或最近訪問的機器的IP地址到物理地址的映射,避免重復的ARP請求,提高發(fā)送數(shù)據(jù)包的速度。
Linux下使用arp命令來查看和修改ARP高速緩存
- 查看:arp -a
- 刪除:arp -d [IP address]
- 添加:arp -s [IP address] [MAC address]
DNS工作原理
因為我們平時都是用域名來訪問機器而非IP地址,比如訪問網(wǎng)上的各種網(wǎng)站。
將機器的域名轉(zhuǎn)換成IP地址:需要使用域名查詢服務
域名查詢服務有很多方式(NIS網(wǎng)絡信息服務、DNS和本地靜態(tài)文件等)。這里主要討論DNS
DNS查詢和應答報文詳解
DNS是一套分布式的域名服務系統(tǒng)。
每個DNS服務器上都存放著大量的機器名和IP地址的映射,并且是動態(tài)更新的。
DNS查詢和應答報文的格式如下:
-
**16位標識:**標記一對DNS查詢和應答,以區(qū)分一個DNS應答是哪個DNS查詢的回應。
-
**16位標志:**協(xié)商具體的通信方式和反饋通信狀態(tài)。細節(jié)如下圖所示:
-
QR:查詢/應答標志。0表示查詢報文,1表示應答報文
-
opcode:定義查詢和應答的類型。0表示標準查詢,1表示反向查詢,2表示請求服務器狀態(tài)
-
AA:授權應答標志,僅由應答報文使用。1表示域名服務器是授權服務器。
-
TC:截斷標志
-
RD:遞歸查詢標志
-
RA:允許遞歸標志
-
zero:這三位未用,全部設置為0
-
rcode:4位返回碼,表示應答的狀態(tài),常用值有0(無錯誤)和3(域名不存在)
-
接下來的四個字段(16位問題個數(shù)、16位應答資源記錄個數(shù)、16位授權資源記錄數(shù)目、16位額外資源記錄數(shù)目)分別指出DNS報文的最后4個字段的資源記錄數(shù)目。
- 查詢報文:包含1個查詢問題,其他三個都是0
- 應答報文:應答資源記錄數(shù)至少為1
-
查詢問題
- 格式:
- 查詢名:以一定的格式封裝了要查詢的主機域名
- 16位查詢類型:如何執(zhí)行查詢操作(比如獲取目標主機的IP地址、獲得目標主機的別名、反向查詢)
- 16位查詢類通常為1,表示獲取因特網(wǎng)地址(IP地址)
-
應答、授權、額外信息
都使用資源記錄格式
IP協(xié)議詳解
IP服務的特點
-
IP協(xié)議為上層協(xié)議提供無狀態(tài)、無連接、不可靠的服務。
-
無狀態(tài):IP通信雙方不同步傳輸數(shù)據(jù)的狀態(tài)信息,因此所有IP數(shù)據(jù)報的發(fā)送、傳輸和接收都是相互獨立、沒有上下文關系的。
-
最大的缺點:無法處理亂序和重復的IP數(shù)據(jù)報,接收端的IP模塊無法檢測到亂序和重復,因為沒有上下文關系。
上層收到的數(shù)據(jù)可能是亂序、重復的。
TCP協(xié)議能夠自己處理亂序的、重復的報文段,它遞交給上層協(xié)議的內(nèi)容是有序、正確的。
-
優(yōu)點:簡單、高效,無須為保持通信狀態(tài)而分配內(nèi)核資源和攜帶狀態(tài)信息
(UDP協(xié)議和HTTP協(xié)議都是無狀態(tài)協(xié)議)
-
-
無連接:IP通信雙方都不長久地維持對方的任何信息。所以上層協(xié)議每次發(fā)送數(shù)據(jù)的時候,都必須明確指定對方的IP地址。
-
**不可靠:**指IP協(xié)議不能保證IP數(shù)據(jù)報準確地到達接收端。所以使用IP服務的上層協(xié)議(比如TCP)需要自己實現(xiàn)數(shù)據(jù)確認、超時重傳等機制來達到可靠傳輸?shù)哪康摹?/p>
-
IPv4頭部結構
IPv4頭部結構
-
4位版本號:指定IP協(xié)議的版本,對IPv4來說,其值為4。
-
4位頭部長度:該IP頭部有多少個32bit字(4字節(jié)),因為4位最大能表示15,所以IP頭部最長是60字節(jié)。
-
8位服務類型:包括一個3位的優(yōu)先權字段,4位的TOS字段和1位保留字段(置零)
-
4位TOS字段:最小延時、最大吞吐量、最高可靠性、最小費用。最多有一個能置1。
比如ssh和telnet需要最小延時,文件傳輸程序ftp需要最大吞吐量
-
-
16位總長度:整個IP數(shù)據(jù)報的長度(字節(jié)),最大長度為(2^16 - 1)字節(jié),但由于MTU限制,長度超過MTU的數(shù)據(jù)報都會被分片傳輸。接下來的3個字段描述如何實現(xiàn)分片。
-
16位標識:唯一標識主機發(fā)送的每一個數(shù)據(jù)報。
-
3位標志字段:
- 第一位保留
- 第二位“禁止分片“,設置則不對數(shù)據(jù)報進行分片,但如果IP數(shù)據(jù)報長度超過MTU的話就丟棄數(shù)據(jù)報并返回ICMP差錯報文。
- 第三位”更多分片“,除了數(shù)據(jù)報最后一個分片外,其他分片都置一
-
13位分片偏移
-
8位生存時間:數(shù)據(jù)報到達目的地之前允許經(jīng)過的路由器跳數(shù)。防止數(shù)據(jù)報陷入路由循環(huán)。
-
8位協(xié)議:區(qū)分上層協(xié)議。
-
16位頭部校驗和:發(fā)送端填充,接收端對其使用CRC算法來檢驗(僅)頭部是否損壞
-
32位源端IP地址和目的端IP地址:標識數(shù)據(jù)報的發(fā)送和接收端
-
選項字段:
- 記錄路由(傳遞路徑)
- 時間戳(數(shù)據(jù)報在各個路由器被轉(zhuǎn)發(fā)的時間)
- 松散源路由選擇(發(fā)送過程必須經(jīng)過其中所有的路由器)
- 嚴格源路由選擇(只能經(jīng)過被指定的路由器)
使用tcpdump觀察IPv4頭部結構
IP分片
-
當IP數(shù)據(jù)報的長度超過幀的MTU時,將被分片傳輸。
可能發(fā)生在發(fā)送端、中轉(zhuǎn)路由器上,但在最終的目標機器上才會被重新組裝。
-
IP頭部的數(shù)據(jù)報標識、標志、分片偏移為IP的分片和重組提供足夠的信息。
因為IP數(shù)據(jù)報的每個分片都具有自己的IP頭部,具有相同的標識值,不同給的片偏移,除了最后一個分片外都有MF標識
-
以太網(wǎng)幀的MTU是1500字節(jié),IP頭部占20字節(jié),所以數(shù)據(jù)部分最多是1480字節(jié)。如果要用IP數(shù)據(jù)報封裝一個1481字節(jié)的ICMP報文(包括8字節(jié)的ICMP頭部,所以其數(shù)據(jù)部分長度為1473字節(jié)),則該數(shù)據(jù)報在使用以太網(wǎng)幀傳輸時必須要被分片。
IP分片的標識符都是61197,說明是同一個IP數(shù)據(jù)報的分片。
第一個分片的片偏移值為0,第二個是1480。第二個分片的片偏移值是第一個分片的ICMP報文長度。
第一個分片設置了MF標志(flags [+])以表示還有后續(xù)分片,第二個是none表示是最后一個分片,
兩個分片的長度分別為1500和21字節(jié),和圖中描述一致。
IP路由
IP協(xié)議的一個核心任務是數(shù)據(jù)報的路由,即決定發(fā)送數(shù)據(jù)報到目標機器的路徑。
IP模塊工作流程
從右往左:
-
IP模塊接收到來自數(shù)據(jù)鏈路層的IP數(shù)據(jù)報時,先對該數(shù)據(jù)報的頭部做CRC校驗,確認無誤后分析頭部具體信息
-
如果設置了源站選路選項(松散源路由選擇或嚴格源路由選擇),則IP模塊調(diào)用數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊來處理該數(shù)據(jù)報
- 如果數(shù)據(jù)報的頭部中目標IP地址是本機中的某個IP地址/廣播地址,則IP模塊就根據(jù)數(shù)據(jù)報的協(xié)議字段來決定派發(fā)給哪個上層應用
- 如果IP模塊發(fā)現(xiàn)這個數(shù)據(jù)報不是發(fā)送給本機的,則也調(diào)用數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊來處理
-
數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊先檢測系統(tǒng)是否允許轉(zhuǎn)發(fā)
- 不允許:丟棄
- 允許:對數(shù)據(jù)報進行一些操作,然后將它交給IP數(shù)據(jù)報輸出子模塊
-
計算下一跳路由即IP路由過程:IP數(shù)據(jù)報應該發(fā)送到哪個下一跳路由(或目標機器),以及經(jīng)過哪個網(wǎng)卡來發(fā)送
核心:路由表,按照數(shù)據(jù)報的目標IP地址分類,同一類型的IP數(shù)據(jù)報將被發(fā)往相同的下一跳路由器。
-
IP輸出隊列:存放的是所有等待發(fā)送的IP數(shù)據(jù)報,其中除需要轉(zhuǎn)發(fā)的IP數(shù)據(jù)報外,還包括封裝了本機上層數(shù)據(jù)的IP數(shù)據(jù)報。
路由機制
要研究IP路由機制,需要先了解路由表的內(nèi)容,可以用route命令或netstat命令查看路由表。
- IP的路由機制:
- 查找路由表中和數(shù)據(jù)報的目標IP地址完全匹配的主機IP地址
- 如果找到,就使用該路由項
- 沒找到跳步驟2
- 查找路由表中和數(shù)據(jù)報的目標IP地址具有相同網(wǎng)路IP的網(wǎng)絡IP地址(Gateway項)
- 如果找到,就使用該路由項
- 沒找到則轉(zhuǎn)步驟3
- 選擇默認路由項:這通常意味著數(shù)據(jù)報的下一跳路是網(wǎng)關
路由表更新
route命令可以修改路由表,比如:
- 第一行:添加主機192.168.1.109(kongming20)對應的路由項,所有從主機發(fā)送到該地址的IP數(shù)據(jù)報將通過網(wǎng)卡eth0直接發(fā)送到目標機器的接收網(wǎng)卡
- 第二行:刪除網(wǎng)絡192.168.1.0對應的路由項
- 第三行:刪除默認路由項,后果是無法訪問因特網(wǎng)
- 第四行:重新設置默認路由項,這次的網(wǎng)關是機器192.168.1.109而不是能直接訪問因特網(wǎng)的路由器。
經(jīng)過修改后路由表如下:
IP轉(zhuǎn)發(fā)
對于允許IP數(shù)據(jù)報轉(zhuǎn)發(fā)的系統(tǒng),數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊將對期望轉(zhuǎn)發(fā)的數(shù)據(jù)報執(zhí)行如下操作:
重定向
–>> ICMP重定向報文也能用于更新路由表
ICMP重定向報文
- ICMP重定向類型值為5
- 代碼有四個可選,區(qū)分不同的重定向,這里我們只討論主機重定向(1)
數(shù)據(jù)部分含義很明確,給接收方提供如下兩個信息:
接收主機可以根據(jù)這兩個信息斷定重定向的IP數(shù)據(jù)報應該使用哪個路由器轉(zhuǎn)發(fā),并更新路由表(路由表緩沖,而不是直接更改路由表)
一般來說,主機只能接收ICMP重定向報文,路由器只能發(fā)送ICMP重定向報文。
IPv6頭部結構
- 解決了IPv4地址不夠用的問題
- 增加了多播和流的功能
- 引入自動配置功能
- 增加專門的網(wǎng)絡安全功能
IPv6固定頭部結構
- 4位版本號:指定IP協(xié)議的版本,IPv6是6
- 8位通信類型:數(shù)據(jù)流通信類型或優(yōu)先級
- 20位流標簽:(新)用于某些對連接的服務質(zhì)量有特殊要求的通信,比如音頻或視頻
- 16位凈荷長度:IPv6擴展頭部和應用程序數(shù)據(jù)長度之和,不包括固定頭部長度
- 8位下一個包頭:緊跟固定頭部后的包頭類型,如擴展頭或上層協(xié)議頭(TCP、UDP、ICMP)
- 8位跳數(shù)限制:和TTL含義一樣
16字節(jié)的IPv6地址用十六進制字符串表示,比如
可以用“零壓縮法”來簡寫,也就是省略連續(xù)的、全零的組。比如:
不過零壓縮法對一個地址只能用一次,否則我們無法計算每個::之間省略了多少個全零組。
IPv6擴展頭部
長度可以是0或者多個擴展頭部。
IPv6并不是IPv4的拓展,而是完全獨立的協(xié)議,用以太網(wǎng)幀封裝的數(shù)據(jù)報具有不同的類型值。IPv6:0x86dd, IPv4: 0x800
總結
以上是生活随笔為你收集整理的《Linux高性能服务器编程》学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机基础】存储器层次 Memory
- 下一篇: U盘制作linux启动盘