Linux 網路原理 (Understanding Linux Network Internals)

陳建勳

已絕版

買這商品的人也買了...

商品描述

Linux 受歡迎的部分原因是,它擁有效率高且功能豐富的網路疊層。如果你想知道 Linux 如何利用 IP 協定把複雜的任務搞定,或者只想透過真實的案例來瞭解現代網路的功能,《Linux 網路原理》就是你的指南。

如同廣受歡迎的《Linux 核心詳解》,本書會詳細說明網路的基本概念,以及教你閱讀實際的 C 程式碼實作細節。雖然對 TCP/IP 協定有些經驗會有所助益,不過本書可讓你學到和這些協定有關的許多內容,以及它們的眾多用途。一旦完全瞭解這些連網工具後,你就可以透過本書所提到的程式碼,瞭解 Linux 核心中最精緻的部分是如何運作的。

瞭解網路 — 以及實作它們 — 之所以困難,部分原因是連網任務廣佈四處,由不同的程式碼片段執行不同的次數。本書的優點之一,就是它整合了這些程式碼片段,讓讀者得以瞭解廣佈之函式和資料結構間的關係。本書不但做了大藍圖式的探討,也對 Linux 網路的細節做了合理的交代。 

本書作者 Christian Benvenuti 是個作業系統設計師,也是個網路專家。書中,他不僅會說明 Linux 程式碼如何運作,也會交代主要網路功能的用途、討論選擇解決方案時應該所注意的面向;此外,他還提供了許多流程圖和其他圖表,以協助讀者掌握重點。

本書範圍涵蓋:

  • 網路的關鍵問題 
  • 鄰接基礎架構和協定(ARP) 
  • 網路介面卡(NIC)裝置驅動程式 
  • 橋接(Bridging) 
  • 系統初始設定 
  • 選徑(Routing) 
  • L2(鏈路層)的任務和實作細節 
  • ICMP 
  • L3(IPv4)的任務和實作細節

目錄大綱

目錄

第一部分 基礎背景

第一章 簡介

1.1 基本術語
1.2 常見的撰碼模式
1.3 用戶空間工具程式
1.4 瀏覽原始碼
1.5 當功能以修補形式提供時

第二章 關鍵資料結構

2.1 socket 緩衝區:sk_buff 結構
2.2 net_device 結構
2.3 本章所提及之檔案 

第三章 用戶空間與核心的介面

3.1 概述
3.2 procfs 與 sysctl 的差異
3.3 ioctl
3.4 Netlink
3.5 將組態之修改序列化

第二部分 系統初始設定

第四章 通知鏈

4.1 使用通知鏈的理由
4.2 概觀
4.3 定義通知鏈
4.4 向通知鏈註冊
4.5 通知鏈上的事件
4.6 網路子系統的通知鏈
4.7 經由 /proc 檔案系統進行調整
4.8 本章所提及之函式和變數
4.9 本章所提及之檔案和目錄

第五章 網路裝置初始設定

5.1 系統初始設定概觀
5.2 裝置的註冊和初始設定
5.3 NIC 初始設定的基本目標
5.4 裝置和核心間的互動
5.5 初始設定選項
5.6 模組選項
5.7 裝置處理層之初始設定:net_dev_init
5.8 用戶空間輔助程式
5.9 虛擬裝置
5.10 經由 /proc 檔案系統進行調整
5.11 本章所提及之函式和變數
5.12 本章所提及之檔案和目錄

第六章 PCI 層和網路介面卡

6.1 本章所提及之資料結構
6.2 PCI NIC 裝置驅動程式的註冊
6.3 電力管理和網路喚醒
6.4 PCI NIC 驅動程式註冊範例
6.5 大藍圖
6.6 經由 /proc 檔案系統進行調整
6.7 本章所提及之函式和變數
6.8 本章所提及之檔案和目錄

第七章 元件初始設定的核心基礎架構

7.1 開機期間核心選項
7.2 模組初始設定程式碼
7.3 經優化的巨集標記
7.4 開機期間初始設定常式
7.5 記憶體優化
7.6 經由 /proc 檔案系統進行調整
7.7 本章所提及之函式和變數
7.8 本章所提及之檔案和目錄

第八章 裝置之註冊和初始設定

8.1 何時進行裝置之註冊
8.2 何時進行裝置之除名
8.3 分配 net_device 結構
8.4 NIC 註冊和除名的架構
8.5 裝置之初始設定
8.6 net_device 結構的組織
8.7 裝置狀態
8.8 裝置的註冊和除名
8.9 裝置之註冊
8.10 裝置之除名
8.11 開啟和關閉網路裝置
8.12 更新裝置佇列規則狀態
8.13 從用戶空間來設定裝置相關資訊
8.14 虛擬裝置
8.15 上鎖
8.16 經由 /proc 檔案系統進行調整
8.17 本章所提及之函式和變數
8.18 本章所提及之檔案和目錄

第三部分 傳輸和接收

第九章 中斷和網路驅動程式

9.1 決策和流量方向
9.2 接收到訊框時通知驅動程式
9.3 中斷處理常式
9.4 softnet_data 結構

第十章 訊框的接收

10.1 和其他功能互動
10.2 裝置的開啟和關閉
10.3 佇列
10.4 通知核心已接收到訊框:NAPI 和 netif_rx
10.5 裝置驅動程式和核心的舊介面:netif_rx 的第一部分
10.6 擁塞管理
10.7 處理 NET_RX_SOFTIRQ:net_rx_action

第十一章 訊框的傳輸

11.1 傳輸之開啟和關閉

第十二章 和中斷事件有關的一般參考資料

12.1 統計資料
12.2 經由 /proc 和 sysfs 檔案系統進行調整
12.3 本書第三部分所提及之函式和變數
12.4 本書第三部分所提及之檔案和目錄

第十三章 協定處理常式

13.1 網路疊層概觀
13.2 執行正確的協定處理常式
13.3 協定處理常式的組織
13.4 協定處理常式的註冊
13.5 Ethernet 與 IEEE 802.3 的差異
13.6 經由 /proc 檔案系統進行調整
13.7 本章所提及之函式和變數
13.8 本章所提及之檔案和目錄

第四部分 橋接

第十四章 橋接:概念

14.1 中繼器、橋接器以及選徑器
14.2 橋接器與交換器
14.3 主機
14.4 以橋接器來合併兩個 LAN
14.5 橋接不同的 LAN 技術
14.6 位址學習
14.7 多台橋接器

第十五章 橋接:擴充樹協定

15.1 基本術語
15.2 階層交換式 L2 拓樸範例
15.3 擴充樹協定的基本元素
15.4 橋接器和埠識別碼
15.5 橋接器協定資料單元(BPDUs)
15.6 定義活躍拓樸
15.7 計時器
15.8 拓樸變更
15.9 BPDU 封裝
15.10 傳送組態 BPDUs
15.11 處理入境訊框
15.12 收斂時間
15.13 較新擴充樹協定概觀

第十六章 橋接:Linux 實作細節

16.1 橋接裝置抽象層
16.2 重要的資料結構
16.3 橋接程式碼的初始設定
16.4 建立橋接裝置和橋接埠
16.5 建立新的橋接裝置
16.6 橋接裝置設立常式
16.7 刪除橋接器
16.8 把埠加到橋接器
16.9 開啟和關閉橋接裝置
16.10 開啟和關閉橋接埠
16.11 改變橋接埠狀態
16.12 大藍圖
16.13 轉送資料庫
16.14 處理入境流量
16.15 橋接裝置上的傳輸
16.16 擴充樹協定(STP)
16.17 netdevice 通知鏈

第十七章 橋接:其他主題

17.1 用戶空間組態工具
17.2 經由 /proc 檔案系統進行調整
17.3 經由 /sys 檔案系統進行調整
17.4 統計資料
17.5 本書橋接部分所到提的資料結構
17.6 本書橋接部分所提及之函式和變數
17.7 本書橋接部分所提及之檔案和目錄

第五部分 網際網路協定第 4 版(IPv4)

第十八章 網際網路協定第 4 版(IPv4):概念

18.1 IP 協定:大藍圖
18.2 IP 標頭
18.3 IP 選項
18.4 封包的分段/重組
18.5 核對總值

第十九章 網際網路協定第 4 版(IPv4):Linux 的基石和功能

19.1 主要的 IPv4 資料結構
19.2 封包的一般性處理
19.3 IP 選項

第二十章 網際網路協定第 4 版(IPv4):轉送和本地傳遞

20.1 轉送
20.2 本地傳遞

第廿一章 網際網路協定第 4 版(IPv4):傳輸

21.1 進行傳輸的重要函式
21.2 介接鄰接子系統

第廿二章 網際網路協定第 4 版(IPv4):處理分段

22.1 IP 分段
22.2 IP 重組

第廿三章 網際網路協定第 4 版(IPv4):其他主題

23.1 長壽的 IP 端點資訊
23.2 選擇 IP 標頭的 ID 欄位
23.3 IP 統計資料
23.4 IP 組態
23.5 IP-over-IP
23.6 IPv4:問題出在哪裡?
23.7 經由 /proc 檔案系統進行調整
23.8 本書第五部分所提及之資料結構
23.9 本書第五部分所提及之函式和變數
23.10 本書第五部分所提及之檔案和目錄

第廿四章 L4 協定以及 raw IP 的處理

24.1 可用的 L4 協定
24.2 L4 協定的註冊
24.3 L3 到 L4 的傳遞:ip_local_deliver_finish
24.4 IPv4 vs. IPv6
24.5 經由 /proc 檔案系統進行調整
24.6 本章所提及之函式和變數
24.7 本章所提及之檔案和目錄 

第廿五章 網際網路控制訊息協定(ICMPv4)

25.1 ICMP 標頭
25.2 ICMP 承載資料
25.3 ICMP 類型
25.4 ICMP 協定的應用程式
25.5 大藍圖
25.6 協定的初始設定
25.7 本章所提及之資料結構
25.8 傳輸 ICMP 訊息
25.9 ICMP 統計資料
25.10 把錯誤通知傳遞給傳輸層
25.11 經由 /proc 檔案系統進行調整
25.12 本章所提及之函式和變數
25.13 本章所提及之檔案和目錄

第六部分 鄰接子系統

第廿六章 鄰接子系統:概念

26.1 何謂鄰居?
26.2 需要鄰接協定的原因
26.3 Linux 實作細節
26.4 代理鄰接協定
26.5 當邀請請求被傳輸及處理時
26.6 鄰居狀態以及網路不可達性偵測(NUD)

第廿七章 鄰接子系統:基礎架構

27.1 主要資料結構
27.2 L3 協定和鄰接協定的共同介面
27.3 鄰接基礎架構的一般性任務
27.4 neighbour 結構的參照計數
27.5 建立 neighbour 項目
27.6 鄰居的刪除
27.7 做為代理伺服器
27.8 L2 標頭快取機制
27.9 協定的初始設定和清理
27.10 和其他子系統互動
27.11 鄰接協定和 L3 傳輸函式的互動
27.12 佇列機制

第廿八章 鄰接子系統:位址解析協定(ARP)

28.1 ARP 封包格式
28.2 ARP 的使用範例
28.3 無償 ARP
28.4 來自多個介面的回應
28.5 可調整的 ARP 選項
28.6 ARP 協定的初始設定
28.7 neighbour 結構的初始設定
28.8 傳輸和接收 ARP 封包
28.9 處理入境 ARP 封包
28.10 ARP 代理伺服器
28.11 範例
28.12 外部事件
28.13 arpd
28.14 反向位址解析協定(RARP)
28.15 ND(IPv6)比 ARP(IPv4)進步之處

第廿九章 鄰接子系統:其他主題

29.1 鄰居系統管理
29.2 經由 /proc 檔案系統進行調整
29.3 本書第六部分所提及之資料結構
29.4 本書第六部分所提及之檔案和目錄 

第七部分 選徑

第三十章 選徑:概念

30.1 選徑器、路徑以及選徑表
30.2 選徑基本要素
30.3 選徑表
30.4 查詢
30.5 封包接收 vs. 封包傳輸 

第卅一章 選徑:進階

31.1 方針選徑背後的概念
31.2 多路選徑背後的概念
31.3 和其他核心子系統互動
31.4 選徑協定監控程式
31.5 冗長監控
31.6 ICMP_REDIRECT 訊息
31.7 反向路徑過濾 

第卅二章 選徑:Linux 實作細節

32.1 核心選項
32.2 主要資料結構
32.3 路徑和位址範圍
32.4 主要和次要 IP 位址
32.5 通用的輔助常式和巨集
32.6 全域鎖
32.7 選徑子系統初始設定
32.8 外部事件
32.9 和其他子系統互動

第卅三章 選徑:選徑快取區

33.1 選徑快取區初始設定
33.2 雜湊表的組織
33.3 主要的快取區運算
33.4 多路徑快取機制
33.5 DST 和呼叫協定的介面
33.6 出清選徑快取區
33.7 垃圾收集
33.8 出境 ICMP REDIRECT 的速率限制 

第卅四章 選徑:選徑表

34.1 選徑雜湊表的組織
34.2 選徑表初始設定
34.3 新增和移除路徑
34.4 方針選徑以及其對選徑表之定義的影響

第卅五章 選徑:查詢

35.1 鳥瞰查詢函式
35.2 輔助常式
35.3 徑表查詢:fn_hash_lookup
35.4 fib_lookup 函式
35.5 設定接收和傳輸的函式
35.6 輸入和輸出選徑常式的一般結構
35.7 輸入選徑
35.8 輸出選徑
35.9 多路徑對 next hop 選擇的影響
35.10 方針選徑
35.11 來源地選徑
35.12 方針選徑以及選徑表分類器 

第卅六章 選徑:其他主題

36.1 用戶空間組態設定工具
36.2 統計資料
36.3 經由 /proc 檔案系統進行調整
36.4 開啟和關閉轉送機制
36.5 本書第七部分所提到的資料結構
36.6 本書第七部分所提及之函式和變數
36.7 本書第七部分所提到的檔案和目錄

索引