特價 -20%

一定要懂的基礎 – 全圖解 Linux 網路原理實戰開發 DM2671

原始價格:NT$980。目前價格:NT$784。

出版商 深智數位股份有限公司
出版日期 2026年09月19日
語言 繁體中文
頁數 560
ISBN 9786267889770
Add to Wishlist
貨號: DM2671 Categories: ,

描述

內容簡介

網路程式設計真正的門檻,不只是會呼叫Socket API,而是理解一筆資料如何從應用程式進入Linux核心,經過TCP/IP協定堆疊、網路卡,再傳送到另一台主機。

本書從OSI參考模型、TCP/IP、ARP、IP、交換器與跨網段通訊出發,逐步深入Linux核心的網路封包收發流程,再延伸到TCP、UDP、I/O模型、select、poll、epoll、Raw Socket、Unix Domain Socket、群播、廣播、零複製與百萬連線。

書中涵蓋網路位元組序、Socket位址、TCP狀態機、TFO、SYN Cookies、UDP可靠性、io_uring、Socket選項、檔案描述元傳遞,以及Reactor架構等實務技術,將網路協定、系統呼叫、Linux核心機制與伺服器架構串成完整脈絡。

對想從一般Socket程式設計進一步理解Linux網路底層、高效能I/O與高併發伺服器設計的開發者而言,這是一本兼具底層原理與實作細節的網路程式設計參考書。

 

本書共分14章

◼第1章介紹OSI參考模型、TCP/IP、ARP、交換器與跨網段通訊

◼第2章介紹Socket概念及Linux核心的網路封包收發流程

◼第3章介紹網路位元組序、Socket位址、IP與網域名稱轉換及Socket核心函式

◼第4章介紹TCP狀態機、TCP程式設計、TFO與SYN Flood

◼第5章介紹UDP程式設計、掉封包、順序錯亂與可靠性處理

◼第6章介紹循環式伺服器、並行伺服器與I/O多工伺服器

◼第7章介紹阻塞、非阻塞、訊號驅動、非同步I/O與io_uring

◼第8章介紹select、poll與epoll

◼第9章介紹Socket選項與sysctl

◼第10章介紹網路層與資料連結層Raw Socket,以及使用者空間TCP/IP實作

◼第11章介紹Unix Domain Socket與檔案描述元傳遞

◼第12章介紹群播、IGMP與廣播

◼第13章介紹mmap、DMA、sendfile與splice等零複製技術

◼第14章介紹單機百萬連線、系統限制調整與Reactor架構

 

作者簡介

袁菘華

具有十餘年Linux研發經驗,曾就職於世界500強企業和中國某通訊公司。擅長以圖文的形式寫作技術文章,將複雜的技術知識講得通俗易懂。個人微信公眾號「物聯網心球」深受廣大讀者的喜歡。

 

目錄

▍第1 章 電腦網路基礎

1.1  OSI 參考模型

1.2  TCP/IP

1.3  兩台主機直連

1.4  區域網路通訊

1.5  跨網段通訊

▍第2 章 認識通訊端

2.1  從不同角度看 Socket

2.2  從核心看Linux 接收資料

2.3  從核心看Linux 傳送資料

2.4  常見 Socket 介紹

▍第3 章 Socket 程式設計基礎

3.1  位元組序

3.2  Socket 位址

3.3  IP 位址轉換

3.4  網域名稱與 IP 位址的轉換

3.5  Socket核心函式

3.6  Socket 發送函式

3.7  Socket 接收函式

▍第4 章 TCP Socket 程式設計

4.1  TCP 程式設計基礎

4.2  TCP Socket 程式設計基礎

4.3  優雅關閉 Socket

4.4  TCP 連線快速開啟

4.5  SYN Flood 攻擊

▍第5 章 UDP Socket 程式設計

5.1  UDP 程式設計基礎

5.2  UDP 通訊端程式設計基礎

5.3  UDP 可靠性程式設計

▍第6 章 伺服器模型

6.1  迴圈伺服器

6.2  並行伺服器

6.3  I/O 多工伺服器

6.4  本章小結

▍第7 章 I/O 模型

7.1  同步I/O 和非同步I/O 的區別

7.2  阻塞I/O

7.3  非阻塞I/O

7.4  I/O 多工

7.5  訊號驅動I/O

7.6  非同步I/O

▍第8 章 I/O 多工

8.1  從核心看select

8.2  select 程式設計實戰

8.3  select 小結

8.4  從核心看poll

8.5  poll 程式實戰

8.6  poll 小結

8.7  從核心看epoll

8.8  epoll 程式設計實戰

8.9  epoll 小結

▍第9 章 通訊端選項

9.1  通訊端選項簡介

9.2  setsockopt 和getsockopt 函式

9.3  sysctl 相關知識

9.4  常用的通訊端選項

▍第10 章 原始通訊端

10.1  從核心看原始通訊端

10.2  網路層原始通訊端

10.3  鏈結層原始通訊端

10.4  使用者層TCP/IP 程式設計

▍第11 章 網域通訊端

11.1  網域通訊端基礎

11.2  SOCK_STREAM 網域通訊端

11.3  SOCK_DGRAM 網域通訊端

11.4  socketpair 網域通訊端

11.5  傳遞檔案描述子

▍第12 章 群播和廣播

12.1  群播

12.2  群播程式設計

12.3  廣播

12.4  廣播程式設計

▍第13 章 零複製

13.1  傳統檔案傳輸

13.2  零複製技術

13.3  零複製網路程式設計

▍第14 章 百萬高併發

14.1  開啟百萬個通訊端檔案

14.2  建立上百萬個網路連線

14.3  百萬高併發常見問題

14.4  Reactor 模型

 

序

前言

網路程式設計的應用領域非常廣泛,幾乎涵蓋所有與電腦和網際網路相關的產業,是每位開發者必備的技能。如果你對網路程式設計還不瞭解,那麼本書一定能幫你打開網路程式設計世界的大門。

寫作背景

網路程式設計技術是一項偏應用的技術。偏應用的技術有一個特點,就是需要學習的知識點特別多。然而,筆者認為,之所以要學習這麼多知識點,是因為開發者對技術的理解浮於表面,不懂得技術實現的底層原理。例如,當我們學習Linux 系統中的管道(用於行程間通訊)和sendfile(零拷貝技術,用於提高網路傳輸效率)兩個知識點時,需要花費一定的時間。如果你對底層技術很了解(核心原始碼),就會發現它們都是基於管道(環形緩衝區)實現的,這兩個看似毫無關係的知識點,底層實現原理居然是一樣的。理解了底層實現原理,再去學習這兩個知識點,就可以大大地提高學習效率。

對於Linux 開發者來說,最有價值的內容藏在Linux 的核心原始碼中。我們碰到的絕大部分Linux 技術問題能從Linux 核心原始碼中找到本質原因。然而,實際情況是,大部分Linux 開發者看不懂Linux 核心原始碼,並且認為學習Linux 核心原始碼的難度非常高。於是,筆者萌生了一個想法:結合Linux 核心原始碼分析,把技術知識的本質講解清楚。目前,市面上的大多數教材偏向於教你如何用,如函式介面如何使用、針對用戶端和伺服端如何程式設計等。如果只停留在使用層面,那麼當遇到問題或者需要對軟體架構進行最佳化時,往往無能為力。

我們再來聊聊為什麼選網路程式設計這個主題?主要有以下幾個原因:網路程式設計這項技術很重要,每位開發者都需要掌握;很多開發者的網路程式設計基礎比較薄弱,只會照搬別人的程式碼;筆者一直從事Linux 網路開發工作,對網路程式設計和Linux 核心網路協定堆疊的工作原理非常了解。

圖書定位

開始寫這本書之前,我對這本書就有了明確的定位。

首先,這本書必須具有稀缺性。市面上已經有了很多關於網路程式設計的書,為什麼還要寫一本呢?因為市面上還沒有一本「有趣」的網路程式設計書。這種趣味性主要體現在圖文並茂的表達方式,本書共有200 多張配圖,盡量做到每個重要的知識點都配一張圖。底層的技術往往是枯燥並且難以理解的,透過圖文方式講解可以降低大家的學習門檻,讓大家在輕鬆愉悅的氛圍中學會技術知識。另外,讀者的技術水準是參差不齊的,有些問題對於一些讀者很簡單,但是對於另一些讀者來說很難,以圖文方式講解能夠最大程度顧及所有的讀者。

其次,這本書的內容要過硬。沒有硬核的內容,再漂亮的圖文也只是花瓶。我希望讀者學完本書後,能夠真正理解網路程式設計,所以在圖書內容的選擇上一直要求很高。這種高要求體現在以下兩個方面。

• 內容全面:本書共14 章,覆蓋網路程式設計各個方面的知識點,內容由淺入深,層層遞進。全面的內容能夠幫助讀者建立完整的知識體系並加強系統性思維。相反,碎片化的知識並不會給讀者帶來多大的提升。

• 內容有深度:這種深度體現在把知識點講解透徹,把問題的本質呈現出來。如果筆者的資訊來源和讀者一樣,都是網路上的各種貼文、文章,或者是AI 給出的答案,那麼筆者輸出的內容只能是大眾化的,價值一定非常有限。筆者的資訊主要來自Linux 核心原始碼,這樣能夠最大程度保證資訊的準確性。同時,直接閱讀核心原始碼,能夠遮蔽垃圾資訊的干擾,直接揭露問題的本質。

本書能夠解決實際問題,每個知識點都配備範例(如範例程式碼、設定指令、完整解決方案等),這些範例都是完整的,可以直接拿來使用,以便於讀者進行除錯,透過實作加深對理論知識的理解。

最後,我希望本書能夠成為讀者的朋友,希望讀者能夠把這本書擺在書桌上最顯眼的位置,當碰到問題或者有空閒時,隨手拿起來翻一翻。

這本書能給你帶來什麼

學完這本書,讀者的網路程式設計水準一定會有很大程度的提升。這不僅能夠幫你解決實際問題,也會影響你的職業生涯。對於技術人員來說,技術水準不僅直接決定了薪資待遇,還是職位晉升的重要條件,學好網路程式設計會增加你求職成功的機率。

除了上述實際價值,這本書也會改變你對技術的看法。透過本書,你會發現,技術知識不是一堆難以理解的「八股文」,而是一個個鮮活的生命。學習技術知識就像學習藝術一樣,能夠讓我們的精神愉悅。

最後,我想對讀者說,從現在開始,一定要學會做內容輸出。我們可以嘗試輸出一些筆記、文章、影片等,輸出的過程其實也是學習的過程,這個過程會讓你看到自己的不足,倒逼自己進步。另外,持續輸出內容,也會讓你慢慢累積自己的影響力,讓你變得越來越有價值。

額外資訊

出版商

深智數位股份有限公司

出版日期

2026年09月19日

語言

繁體中文

頁數

560

ISBN

9786267889770