Rami Rosen 專業(yè)軟件工程師,Linux內(nèi)核網(wǎng)絡(luò)專家。從業(yè)十余年間,參與過多個尖端Linux內(nèi)核項目,曾就Linux內(nèi)核網(wǎng)絡(luò)和虛擬化發(fā)表過多篇文章,并做過多次演講。博客地址:http://ramirose.wix.com/ramirosen。
袁國忠 自由譯者;2000年起專事翻譯,主譯圖書,偶譯新聞稿、軟文;出版譯著40余部,其中包括《C++ Prime Plus中文版》《CCNA學(xué)習(xí)指南》《CCNP ROUTE學(xué)習(xí)指南》《面向模式的軟件架構(gòu):模式系統(tǒng)》《Android應(yīng)用UI設(shè)計模式》《風(fēng)投的選擇:誰是下一個十億美元級公司》等,總計700余萬字;專事翻譯前,從事過三年化工產(chǎn)品分析和開發(fā),做過兩年雜志和圖書編輯。
第1章 緒論 1
1.1 Linux網(wǎng)絡(luò)棧 2
1.2 網(wǎng)絡(luò)設(shè)備 4
1.2.1 網(wǎng)絡(luò)設(shè)備中的NAPI 5
1.2.2 數(shù)據(jù)包的收發(fā) 5
1.2.3 套接字緩沖區(qū) 7
1.3 Linux內(nèi)核網(wǎng)絡(luò)開發(fā)模型 10
1.4 總結(jié) 12
第2章 Netlink套接字 13
2.1 Netlink簇 13
2.1.1 Netlink套接字庫 15
2.1.2 結(jié)構(gòu)sockaddr_nl 15
2.1.3 用于控制TCP/IP聯(lián)網(wǎng)的用戶
空間包 15
2.1.4 內(nèi)核Netlink套接字 16
2.1.5 Netlink消息報頭 20
2.1.6 NETLINK_ROUTE消息 22
2.1.7 在路由選擇表中添加和刪除
路由選擇條目 24
2.2 通用Netlink協(xié)議 25
2.2.1 創(chuàng)建和發(fā)送通用Netlink消息 29
2.2.2 套接字監(jiān)視接口 31
2.3 總結(jié) 32
2.4 快速參考 32
第3章 Internet控制消息協(xié)議(ICMP) 36
3.1 ICMPv4 36
3.1.1 ICMPv4的初始化 37
3.1.2 ICMPv4報頭 38
3.1.3 接收ICMPv4消息 42
3.1.4 發(fā)送ICMPv4消息:目的地
不可達 43
3.2 ICMPv6 47
3.2.1 ICMPv6初始化 47
3.2.2 ICMPv6報頭 48
3.2.3 接收ICMPv6消息 49
3.2.4 發(fā)送ICMPv6消息 52
3.3 ICMP套接字(ping套接字) 55
3.4 總結(jié) 56
3.5 快速參考 56
3.5.1 方法 56
3.5.2 表格 57
3.5.3 procfs條目 58
3.5.4 使用iptables創(chuàng)建“目的地
不可達”消息 59
第4章 IPv4 61
4.1 IPv4報頭 62
4.2 IPv4的初始化 63
4.3 接收IPv4數(shù)據(jù)包 64
4.4 接收IPv4組播數(shù)據(jù)包 67
4.5 IP選項 69
4.5.1 時間戳選項 71
4.5.2 記錄路由選項 74
4.5.3 IP選項和分段 82
4.5.4 創(chuàng)建IP選項 84
4.6 發(fā)送IPv4數(shù)據(jù)包 85
4.7 分段 89
4.7.1 快速路徑 90
4.7.2 慢速路徑 93
4.8 重組 94
4.9 轉(zhuǎn)發(fā) 99
4.10 總結(jié) 101
4.11 快速參考 101
4.11.1 方法 102
4.11.2 宏 104
第5章 IPv4路由選擇子系統(tǒng) 105
5.1 轉(zhuǎn)發(fā)和FIB 105
5.2 在路由選擇子系統(tǒng)中進行查找 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 總結(jié) 126
5.6 快速參考 126
5.6.1 方法 127
5.6.2 宏 128
5.6.3 表 128
5.6.4 路由標(biāo)志 129
第6章 高級路由選擇 131
6.1 組播路由選擇 131
6.1.1 IGMP 132
6.1.2 組播路由選擇表 133
6.1.3 組播轉(zhuǎn)發(fā)緩存(MFC) 134
6.1.4 組播路由器 136
6.1.5 vif設(shè)備 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 策略路由選擇的實現(xiàn) 147
6.3 多路徑路由選擇 148
6.4 總結(jié) 149
6.5 快速參考 149
6.5.1 方法 149
6.5.2 宏 151
6.5.3 procfs組播條目 152
6.5.4 表 152
第7章 Linux鄰接子系統(tǒng) 153
7.1 鄰接子系統(tǒng)的核心 153
7.1.1 創(chuàng)建和釋放鄰居 160
7.1.2 用戶空間和鄰接子系統(tǒng)之間
的交互 161
7.1.3 處理網(wǎng)絡(luò)事件 163
7.2 ARP協(xié)議(IPv4) 163
7.2.1 ARP:發(fā)送請求 165
7.2.2 ARP:接收請求和應(yīng)答 168
7.3 NDISC協(xié)議(IPv6) 174
7.3.1 重復(fù)地址檢測(DAD) 174
7.3.2 NIDSC:發(fā)送請求 176
7.3.3 NDISC:接收鄰居請求和
通告 179
7.4 總結(jié) 185
7.5 快速參考 186
7.5.1 方法 186
7.5.2 宏 189
7.5.3 結(jié)構(gòu)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數(shù)據(jù)包 201
8.7.1 本地投遞 204
8.7.2 轉(zhuǎn)發(fā) 206
8.8 接收IPv6組播流量 210
8.9 組播偵聽者發(fā)現(xiàn)(MLD) 211
8.9.1 加入和退出組播組 212
8.9.2 MLDv2組播偵聽者報告 215
8.9.3 組播源過濾 215
8.10 發(fā)送IPv6數(shù)據(jù)包 220
8.11 IPv6路由選擇 221
8.12 總結(jié) 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鉤子回調(diào)函數(shù) 229
9.3 連接跟蹤 230
9.3.1 連接跟蹤的初始化 231
9.3.2 連接跟蹤條目 234
9.3.3 連接跟蹤輔助方法和期望
連接 238
9.3.4 iptables 241
9.3.5 投遞到當(dāng)前主機 243
9.3.6 轉(zhuǎn)發(fā)數(shù)據(jù)包 245
9.3.7 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT) 245
9.3.8 NAT鉤子回調(diào)函數(shù)和連接
跟蹤鉤子回調(diào)函數(shù) 247
9.3.9 NAT鉤子回調(diào)函數(shù) 250
9.3.10 連接跟蹤擴展 252
9.4 總結(jié) 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狀態(tài)(安全關(guān)聯(lián)) 263
10.5 IPv4 ESP的實現(xiàn) 266
10.6 接收IPsec數(shù)據(jù)包(傳輸模式) 268
10.7 發(fā)送IPsec數(shù)據(jù)包(傳輸模式) 271
10.8 XFRM查找 272
10.9 IPsec的NAT穿越功能 275
10.10 總結(jié) 276
10.11 快速參考 276
10.11.1 方法 276
10.11.2 表 278
第11章 第4層協(xié)議 280
11.1 套接字 280
11.2 創(chuàng)建套接字 281
11.3 用戶數(shù)據(jù)包協(xié)議(UDP) 285
11.3.1 UDP的初始化 286
11.3.2 發(fā)送UDP數(shù)據(jù)包 287
11.3.3 接收來自網(wǎng)絡(luò)層(L3)的
UDP數(shù)據(jù)包 290
11.4 傳輸控制協(xié)議(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 接收來自網(wǎng)絡(luò)層(L3)的
TCP數(shù)據(jù)包 298
11.4.7 發(fā)送TCP數(shù)據(jù)包 299
11.5 流控制傳輸協(xié)議(SCTP) 300
11.5.1 SCTP數(shù)據(jù)包和數(shù)據(jù)塊 301
11.5.2 SCTP塊頭 302
11.5.3 SCTP塊 302
11.5.4 SCTP關(guān)聯(lián) 303
11.5.5 建立SCTP關(guān)聯(lián) 305
11.5.6 接收SCTP數(shù)據(jù)包 305
11.5.7 發(fā)送SCTP數(shù)據(jù)包 306
11.5.8 SCTP心跳 306
11.5.9 SCTP多流 306
11.5.10 SCTP多宿主 307
11.6 數(shù)據(jù)報擁塞控制協(xié)議(DCCP) 307
11.6.1 DCCP報頭 307
11.6.2 DCCP的初始化 3