Rami Rosen 專業(yè)軟件工程師,Linux內核網絡專家。從業(yè)十余年間,參與過多個尖端Linux內核項目,曾就Linux內核網絡和虛擬化發(fā)表過多篇文章,并做過多次演講。博客地址:http://ramirose.wix.com/ramirosen。
袁國忠 自由譯者;2000年起專事翻譯,主譯圖書,偶譯新聞稿、軟文;出版譯著40余部,其中包括《C++ Prime Plus中文版》《CCNA學習指南》《CCNP ROUTE學習指南》《面向模式的軟件架構:模式系統(tǒng)》《Android應用UI設計模式》《風投的選擇:誰是下一個十億美元級公司》等,總計700余萬字;專事翻譯前,從事過三年化工產品分析和開發(fā),做過兩年雜志和圖書編輯。
第1章 緒論 1
1.1 Linux網絡棧 2
1.2 網絡設備 4
1.2.1 網絡設備中的NAPI 5
1.2.2 數據包的收發(fā) 5
1.2.3 套接字緩沖區(qū) 7
1.3 Linux內核網絡開發(fā)模型 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協(xié)議 25
2.2.1 創(chuàng)建和發(fā)送通用Netlink消息 29
2.2.2 套接字監(jiān)視接口 31
2.3 總結 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 總結 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數據包 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 創(chuàng)建IP選項 84
4.6 發(fā)送IPv4數據包 85
4.7 分段 89
4.7.1 快速路徑 90
4.7.2 慢速路徑 93
4.8 重組 94
4.9 轉發(fā) 99
4.10 總結 101
4.11 快速參考 101
4.11.1 方法 102
4.11.2 宏 104
第5章 IPv4路由選擇子系統(tǒng) 105
5.1 轉發(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 總結 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 組播轉發(fā)緩存(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鄰接子系統(tǒng) 153
7.1 鄰接子系統(tǒng)的核心 153
7.1.1 創(chuàng)建和釋放鄰居 160
7.1.2 用戶空間和鄰接子系統(tǒng)之間
的交互 161
7.1.3 處理網絡事件 163
7.2 ARP協(xié)議(IPv4) 163
7.2.1 ARP:發(fā)送請求 165
7.2.2 ARP:接收請求和應答 168
7.3 NDISC協(xié)議(IPv6) 174
7.3.1 重復地址檢測(DAD) 174
7.3.2 NIDSC:發(fā)送請求 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 轉發(fā) 206
8.8 接收IPv6組播流量 210
8.9 組播偵聽者發(fā)現(MLD) 211
8.9.1 加入和退出組播組 212
8.9.2 MLDv2組播偵聽者報告 215
8.9.3 組播源過濾 215
8.10 發(fā)送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 轉發(fā)數據包 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狀態(tài)(安全關聯) 263
10.5 IPv4 ESP的實現 266
10.6 接收IPsec數據包(傳輸模式) 268
10.7 發(fā)送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層協(xié)議 280
11.1 套接字 280
11.2 創(chuàng)建套接字 281
11.3 用戶數據包協(xié)議(UDP) 285
11.3.1 UDP的初始化 286
11.3.2 發(fā)送UDP數據包 287
11.3.3 接收來自網絡層(L3)的
UDP數據包 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 接收來自網絡層(L3)的
TCP數據包 298
11.4.7 發(fā)送TCP數據包 299
11.5 流控制傳輸協(xié)議(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 發(fā)送SCTP數據包 306
11.5.8 SCTP心跳 306
11.5.9 SCTP多流 306
11.5.10 SCTP多宿主 307
11.6 數據報擁塞控制協(xié)議(DCCP) 307
11.6.1 DCCP報頭 307
11.6.2 DCCP的初始化 3