特價 -20%

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

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

出版商 深智數位股份有限公司
出版日期 2026年09月19日
語言 繁體中文
頁數 560
ISBN 9786267889770

已售完

貨號: 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