第1章 緒論 1
1.1 Linux網絡棧 2
1.2 網絡設備 4
1.2.1 網絡設備中的NAPI 5
1.2.2 數據包的收發 5
1.2.3 套接字緩衝區 7
1.3 Linux內核網絡開發模型 10
1.4 總結 12
第2章 Netlink套接字 13
2.1 Netlink簇 13
2.1.1 Netlink套接字庫 15
2.1.2 結構sockaddr_nl 15
2.1.3 用於控製TCP/IP聯網的用戶空間包 15
2.1.4 內核Netlink套接字 16
2.1.5 Netlink消息報頭 20
2.1.6 NETLINK_ROUTE消息 22
2.1.7 在路由選擇錶中添加和刪除路由選擇條目 24
2.2 通用Netlink協議 25
2.2.1 創建和發送通用Netlink消息 29
2.2.2 套接字監視接口 31
2.3 總結 32
2.4 快速參考 32
第3章 Internet控製消息協議(ICMP) 36
3.1 ICMPv4 36
3.1.1 ICMPv4的初始化 37
3.1.2 ICMPv4報頭 38
3.1.3 接收ICMPv4 消息 42
3.1.4 發送ICMPv4 消息:目的地不可達 43
3.2 ICMPv6 47
3.2.1 ICMPv6初始化 47
3.2.2 ICMPv6報頭 48
3.2.3 接收ICMPv6消息 49
3.2.4 發送ICMPv6消息 52
3.3 ICMP套接字(ping套接字) 55
3.4 總結 56
3.5 快速參考 56
3.5.1 方法 56
3.5.2 錶格 57
3.5.3 procfs條目 58
3.5.4 使用iptables創建“目的地不可達”消息 59
第4章 IPv4 61
4.1 IPv4報頭 62
4.2 IPv4的初始化 63
4.3 接收IPv4數據包 64
4.4 接收IPv4組播數據包 67
4.5 IP選項 69
4.5.1 時間戳選項 71
4.5.2 記錄路由選項 74
4.5.3 IP選項和分段 82
4.5.4 創建IP選項 84
4.6 發送IPv4數據包 85
4.7 分段 89
4.7.1 快速路徑 90
4.7.2 慢速路徑 93
4.8 重組 94
4.9 轉發 99
4.10 總結 101
4.11 快速參考 101
4.11.1 方法 102
4.11.2 宏 104
第5章 IPv4路由選擇子係統 105
5.1 轉發和FIB 105
5.2 在路由選擇子係統中進行查找 107
5.3 FIB錶 110
5.3.1 FIB信息 110
5.3.2 緩存 115
5.3.3 下一跳 115
5.3.4 策略路由選擇 117
5.3.5 FIB彆名 118
5.4 ICMPv4重定嚮消息 121
5.4.1 生成ICMPv4重定嚮消息 122
5.4.2 接收ICMPv4重定嚮消息 123
5.4.3 IPv4路由選擇緩存 125
5.5 總結 126
5.6 快速參考 126
5.6.1 方法 127
5.6.2 宏 128
5.6.3 錶 128
5.6.4 路由標誌 129
第6章 高級路由選擇 131
6.1 組播路由選擇 131
6.1.1 IGMP 132
6.1.2 組播路由選擇錶 133
6.1.3 組播轉發緩存(MFC) 134
6.1.4 組播路由器 136
6.1.5 vif設備 137
6.1.6 IPv4組播接收路徑 138
6.1.7 方法ip_mr_forward() 141
6.1.8 方法ipmr_queue_xmit() 143
6.1.9 方法ipmr_forward_finish() 145
6.1.10 組播流量中的TTL 146
6.2 策略路由選擇 146
6.2.1 策略路由選擇的管理 147
6.2.2 策略路由選擇的實現 147
6.3 多路徑路由選擇 148
6.4 總結 149
6.5 快速參考 149
6.5.1 方法 149
6.5.2 宏 151
6.5.3 procfs組播條目 152
6.5.4 錶 152
第7章 Linux鄰接子係統 153
7.1 鄰接子係統的核心 153
7.1.1 創建和釋放鄰居 160
7.1.2 用戶空間和鄰接子係統之間的交互 161
7.1.3 處理網絡事件 163
7.2 ARP協議(IPv4) 163
7.2.1 ARP:發送請求 165
7.2.2 ARP:接收請求和應答 168
7.3 NDISC協議(IPv6) 174
7.3.1 重復地址檢測(DAD). 174
7.3.2 NIDSC:發送請求 176
7.3.3 NDISC:接收鄰居請求和通告 179
7.4 總結 185
7.5 快速參考 186
7.5.1 方法 186
7.5.2 宏 189
7.5.3 結構neigh_statistics 190
7.5.4 錶 191
第8章 IPv6 192
8.1 IPv6簡介 192
8.2 IPv6地址 193
8.2.1 特殊地址 193
8.2.2 組播地址 194
8.3 IPv6報頭 195
8.4 擴展報頭 197
8.5 IPv6初始化 199
8.6 自動配置 200
8.7 接收IPv6數據包 201
8.7.1 本地投遞 204
8.7.2 轉發 206
8.8 接收IPv6組播流量 210
8.9 組播偵聽者發現(MLD) 211
8.9.1 加入和退齣組播組 212
8.9.2 MLDv2組播偵聽者報告 215
8.9.3 組播源過濾 215
8.10 發送IPv6 數據包 220
8.11 IPv6 路由選擇 221
8.12 總結 221
8.13 快速參考 221
8.13.1 方法 221
8.13.2 宏 224
8.13.3 錶 224
8.13.4 特殊地址 225
8.13.5 IPv6路由選擇錶的管理 226
第9章 Netfilter 227
9.1 Netfilter框架 227
9.2 Netfilter掛接點 228
注冊Netfilter鈎子迴調函數 229
9.3 連接跟蹤 230
9.3.1 連接跟蹤的初始化 231
9.3.2 連接跟蹤條目 234
9.3.3 連接跟蹤輔助方法和期望連接 238
9.3.4 iptables 241
9.3.5 投遞到當前主機 243
9.3.6 轉發數據包 245
9.3.7 網絡地址轉換(NAT) 245
9.3.8 NAT鈎子迴調函數和連接跟蹤鈎子迴調函數 247
9.3.9 NAT鈎子迴調函數 250
9.3.10 連接跟蹤擴展 252
9.4 總結 253
9.5 快速參考 253
9.5.1 方法 253
9.5.2 宏 255
9.5.3 錶 255
9.5.4 工具和庫 256
第10章 IPsec 257
10.1 概述 257
10.2 Internet密鑰交換(IKE) 257
10.3 IPsec和加密 259
10.4 XFRM框架 259
10.4.1 XFRM的初始化 260
10.4.2 XFRM策略 260
10.4.3 XFRM狀態(安全關聯) 263
10.5 IPv4 ESP的實現 266
10.6 接收IPsec數據包(傳輸模式) 268
10.7 發送IPsec數據包(傳輸模式) 271
10.8 XFRM查找 272
10.9 IPsec的NAT穿越功能 275
10.10 總結 276
10.11 快速參考 276
10.11.1 方法 276
10.11.2 錶 278
第11章 第4層協議 280
11.1 套接字 280
11.2 創建套接字 281
11.3 用戶數據包協議(UDP) 285
11.3.1 UDP的初始化 286
11.3.2 發送UDP數據包 287
11.3.3 接收來自網絡層(L3)的UDP數據包 290
11.4 傳輸控製協議(TCP) 293
11.4.1 TCP報頭 293
11.4.2 TCP的初始化 295
11.4.3 TCP定時器 296
11.4.4 TCP套接字的初始化 297
11.4.5 TCP連接的建立 297
11.4.6 接收來自網絡層(L3)的TCP數據包 298
11.4.7 發送TCP數據包 299
11.5 流控製傳輸協議(SCTP) 300
11.5.1 SCTP數據包和數據塊 301
11.5.2 SCTP塊頭 302
11.5.3 SCTP塊 302
11.5.4 SCTP關聯 303
11.5.5 建立SCTP關聯 305
11.5.6 接收SCTP數據包 305
11.5.7 發送SCTP數據包 306
11.5.8 SCTP心跳 306
11.5.9 SCTP多流 306
11.5.10 SCTP多宿主 307
11.6 數據報擁塞控製協議(DCCP) 307
11.6.1 DCCP報頭 307
11.6.2 DCCP的初始化 309
11.6.3 DCCP套接字的初始化 310
11.6.4 接收來自網絡層(L3)的DCCP數據包 311
11.6.5 發送DCCP數據包 311
11.6.6 DCCP和NAT 312
11.7 總結 313
11.8 快速參考 313
11.8.1 方法 313
11.8.2 宏 315
11.8.3 錶 315
第12章 無綫子係統 317
12.1 mac80211子係統 317
12.2 802.11 MAC幀頭 318
12.3 802.11 MAC幀頭的其他成員 320
12.4 網絡拓撲 321
12.4.1 基礎設施BSS 321
12.4.2 IBSS(對等模式) 322
12.5 省電模式 322
12.5.1 進入省電模式 322
12.5.2 退齣省電模式 322
12.5.3 處理組播/廣播緩衝區 323
12.6 管理層 325
12.6.1 掃描 325
12.6.2 身份驗證 325
12.6.3 關聯 325
12.6.4 重新關聯 325
12.7 mac80211的實現 326
12.7.1 接收路徑 328
12.7.2 傳輸路徑 328
12.7.3 分段 329
12.7.4 mac80211 debugfs 330
12.7.5 無綫模式 331
12.8 高吞吐量(IEEE 802.11n) 331
12.9 網狀網絡(802.11s) 334
12.9.1 HWMP 335
12.9.2 組建網狀網絡 336
12.10 Linux 無綫開發流程 337
12.11 總結 337
12.12 快速參考 338
12.12.1 方法 338
12.12.2 錶 341
第13章 InfiniBand 343
13.1 RDMA 和InfiniBand概述 343
13.1.1 RDMA棧的組織結構 344
13.1.2 RDMA技術的優點 345
13.1.3 InfiniBand硬件組件 345
13.1.4 InfiniBand中的編址 345
13.1.5 InfiniBand的功能 346
13.1.6 InfiniBand數據包 346
13.1.7 管理實體 347
13.2 RDMA資源 348
13.2.1 RDMA設備 348
13.2.2 PD 350
13.2.3 AH 350
13.2.4 MR 350
13.2.5 FMR池 351
13.2.6 MW 352
13.2.7 CQ 352
13.2.8 XRC 353
13.2.9 SRQ 353
13.2.10 QP 355
13.2.11 工作請求的處理 360
13.2.12 RDMA架構支持的操作 361
13.2.13 組播組 365
13.2.14 用戶空間RDMA API和內核級RDMA API的差彆 365
13.3 總結 366
13.4 快速參考 366
第14章 高級主題 372
14.1 網絡命名空間 372
14.1.1 命名空間的實現 373
14.1.2 UTS命名空間的實現 381
14.1.3 網絡命名空間的實現 383
14.1.4 網絡命名空間的管理 388
14.2 cgroup 392
14.2.1 cgroup的實現 393
14.2.2 cgroup設備控製器:一個簡單示例 395
14.2.3 cgroup內存控製器:一個簡單示例 396
14.2.4 net_prio模塊 396
14.2.5 分類器cls_cgroup 397
14.2.6 掛載cgroup子係統 398
14.3 頻繁輪詢套接字 399
14.3.1 全局啓用 400
14.3.2 對特定套接字啓用 401
14.3.3 調整和配置 401
14.3.4 性能 401
14.4 Linux藍牙子係統 401
14.4.1 HCI層 404
14.4.2 HCI連接 406
14.4.3 L2CAP 407
14.4.4 BNEP 407
14.4.5 藍牙數據包接收示意圖 408
14.4.6 L2CAP擴展功能 409
14.4.7 藍牙工具 409
14.5 IEEE 802.15.4和6LoWPAN 410
14.5.1 鄰居發現優化 411
14.5.2 Linux內核的6LoWPAN實現 412
14.6 NFC 415
14.6.1 NFC標簽 415
14.6.2 NFC設備 416
14.6.3 通信模式和操作模式 416
14.6.4 主機控製器接口 417
14.6.5 Linux對NFC的支持 417
14.6.6 用戶空間架構 421
14.6.7 Android NFC 421
14.7 通知鏈 422
14.8 PCI子係統 425
14.9 組閤網絡設備 428
14.10 PPPoE協議 428
14.10.1 PPPoE報頭 429
14.10.2 PPPoE的初始化 430
14.10.3 PPPoE數據包的收發 432
14.11 Android 435
14.11.1 Android聯網技術 436
14.11.2 Android內部原理:資料 437
14.12 總結 438
14.13 快速參考 438
14.13.1 方法 438
14.13.2 宏 443
附錄A Linux API 444
附錄B 網絡管理 520
附錄C 術語錶 537
· · · · · · (
收起)