本書共計14章,介紹Linux網(wǎng)絡(luò)編程的各個方面。第1~2章介紹網(wǎng)絡(luò)編程相關(guān)的基礎(chǔ)知識,包括計算機(jī)網(wǎng)絡(luò)基礎(chǔ)、內(nèi)核收發(fā)數(shù)據(jù)原理、套接字的概念等。第3章介紹套接字編程基礎(chǔ)知識,包括字節(jié)序、套接字地址、IP地址轉(zhuǎn)換、套接字核心函數(shù)等。第4~9章為網(wǎng)絡(luò)編程實戰(zhàn),包括TCP套接字編程、UDP套接字編程、服務(wù)器模型、I/O模型、I/O多路復(fù)用、套接字選項。第10~14章為高級網(wǎng)絡(luò)編程,包括原始套接字、域套接字、組播和廣播、零拷貝技術(shù)和百萬并發(fā)。
袁菘華,具有十余年Linux研發(fā)經(jīng)驗,曾就職于世界500強(qiáng)企業(yè)和國內(nèi)某通訊公司。擅長以圖文的形式寫作技術(shù)文章,將復(fù)雜的技術(shù)知識講得通俗易懂。個人微信公眾號“物聯(lián)網(wǎng)心球”深受廣大讀者的喜歡。
第1章 計算機(jī)網(wǎng)絡(luò)基礎(chǔ) 1
1.1 OSI參考模型 1
1.1.1 OSI參考模型介紹 2
1.1.2 OSI參考模型的特點(diǎn) 3
1.1.3 OSI與TCP/IP模型 3
1.1.4 封裝和解封 4
1.2 TCP/IP 6
1.2.1 物理層 6
1.2.2 數(shù)據(jù)鏈路層 6
1.2.3 網(wǎng)絡(luò)層 14
1.2.4 傳輸層 27
1.2.5 應(yīng)用層 29
1.3 兩臺主機(jī)直連 29
1.3.1 通信過程 29
1.3.2 ARP和ARP表 30
1.4 局域網(wǎng)通信 33
1.4.1 通信過程 33
1.4.2 交換機(jī)工作原理 34
1.5 跨網(wǎng)段通信 35
1.5.1 通信過程 35
1.5.2 訪問公網(wǎng)服務(wù)端 37
第2章 認(rèn)識套接字 39
2.1 從不同角度看套接字 39
2.1.1 數(shù)據(jù)加工廠 41
2.1.2 不同設(shè)備進(jìn)程間通信 41
2.1.3 本機(jī)進(jìn)程間通信 42
2.2 從內(nèi)核看Linux接收數(shù)據(jù) 43
2.2.1 硬中斷處理 44
2.2.2 軟中斷處理 44
2.3 從內(nèi)核看Linux發(fā)送數(shù)據(jù) 46
2.3.1 傳輸層處理 47
2.3.2 網(wǎng)絡(luò)層處理 47
2.3.3 鄰居子系統(tǒng)處理 48
2.3.4 網(wǎng)絡(luò)設(shè)備子系統(tǒng)處理 48
2.3.5 網(wǎng)卡驅(qū)動處理 48
2.4 常見套接字介紹 48
2.4.1 IPv4套接字 49
2.4.2 數(shù)據(jù)鏈路層原始套接字 51
2.4.3 域套接字 52
第3章 套接字編程基礎(chǔ) 54
3.1 字節(jié)序 54
3.1.1 字節(jié)序的概念 54
3.1.2 字節(jié)序?qū)νㄐ诺挠绊?55
3.1.3 字節(jié)序轉(zhuǎn)換函數(shù) 56
3.1.4 主機(jī)字節(jié)序判斷 58
3.2 套接字地址 59
3.2.1 通用套接字地址 60
3.2.2 新的通用套接字地址 61
3.2.3 IPv4套接字地址 62
3.3 IP地址轉(zhuǎn)換 63
3.3.1 字符串IP地址轉(zhuǎn)二進(jìn)制
IP地址 63
3.3.2 二進(jìn)制IP地址轉(zhuǎn)字符串
IP地址 66
3.3.3 二進(jìn)制IP地址和網(wǎng)絡(luò)ID、
主機(jī)ID的轉(zhuǎn)換 68
3.4 域名與IP地址的轉(zhuǎn)換 71
3.4.1 域名系統(tǒng) 71
3.4.2 域名和IP地址轉(zhuǎn)換 74
3.4.3 獲取系統(tǒng)服務(wù) 77
3.5 套接字核心函數(shù) 84
3.5.1 socket函數(shù) 84
3.5.2 bind函數(shù) 86
3.5.3 listen函數(shù) 87
3.5.4 connect函數(shù) 89
3.5.5 accept函數(shù) 90
3.6 套接字發(fā)送函數(shù) 91
3.6.1 send函數(shù) 91
3.6.2 sendto函數(shù) 93
3.6.3 sendmsg函數(shù) 93
3.6.4 writev函數(shù) 95
3.7 套接字接收函數(shù) 95
3.7.1 recv函數(shù) 96
3.7.2 recvfrom函數(shù) 96
3.7.3 recvmsg函數(shù) 97
3.7.4 readv函數(shù) 98
第4章 TCP套接字編程 99
4.1 TCP編程基礎(chǔ) 99
4.1.1 TCP簡介 99
4.1.2 TCP狀態(tài)機(jī) 102
4.1.3 TCP調(diào)試工具 104
4.2 TCP套接字編程基礎(chǔ) 108
4.2.1 TCP編程流程 108
4.2.2 正確設(shè)置recv函數(shù)的
flags標(biāo)志 113
4.2.3 getsockname和
getpeername函數(shù) 114
4.3 優(yōu)雅關(guān)閉套接字 115
4.3.1 close函數(shù)關(guān)閉套接字 116
4.3.2 shutdown函數(shù)優(yōu)雅關(guān)閉
套接字 117
4.4 TCP連接快速打開 121
4.4.1 TFO的工作流程 121
4.4.2 TFO編程實戰(zhàn) 123
4.4.3 驗證TFO功能 124
4.5 SYN Flood攻擊 126
4.5.1 什么是SYN Flood攻擊 126
4.5.2 TCP SYN Cookies簡介 126
4.5.3 TCP SYN Cookies實戰(zhàn) 128
第5章 UDP套接字編程 130
5.1 UDP編程基礎(chǔ) 130
5.2 UDP套接字編程基礎(chǔ) 131
5.2.1 UDP編程流程 131
5.2.2 CS網(wǎng)絡(luò)模型和P2P網(wǎng)絡(luò)
模型 134
5.2.3 深入理解UDP connect
函數(shù) 135
5.2.4 正確發(fā)送和接收數(shù)據(jù) 140
5.3 UDP可靠性編程 143
5.3.1 UDP丟包 143
5.3.2 UDP亂序 145
5.3.3 可靠性編程 146
第6章 服務(wù)器模型 150
6.1 循環(huán)服務(wù)器 150
6.1.1 UDP循環(huán)服務(wù)器 150
6.1.2 TCP循環(huán)服務(wù)器 151
6.2 并發(fā)服務(wù)器 153
6.2.1 多進(jìn)程并發(fā)服務(wù)器 153
6.2.2 多線程并發(fā)服務(wù)器 159
6.3 I/O多路復(fù)用服務(wù)器 165
6.4 本章小結(jié) 166
第7章 I/O模型 168
7.1 同步I/O和異步I/O的區(qū)別 168
7.2 阻塞I/O 169
7.3 非阻塞I/O 170
7.4 I/O多路復(fù)用 172
7.5 信號驅(qū)動I/O 173
7.5.1 工作原理 173
7.5.2 信號驅(qū)動I/O編程 174
7.6 異步I/O 177
7.6.1 工作原理 177
7.6.2 io_uring編程 180
第8章 I/O多路復(fù)用 185
8.1 從內(nèi)核看select 185
8.2 select編程實戰(zhàn) 187
8.2.1 位圖 188
8.2.2 select編程流程 191
8.3 select小結(jié) 200
8.4 從內(nèi)核看poll 201
8.5 poll編程實戰(zhàn) 203
8.6 poll小結(jié) 209
8.7 從內(nèi)核看epoll 210
8.8 epoll編程實戰(zhàn) 211
8.8.1 編程接口 211
8.8.2 epoll的編程流程 214
8.9 epoll小結(jié) 219
第9章 套接字選項 221
9.1 套接字選項簡介 221
9.2 setsockopt和getsockopt函數(shù) 224
9.2.1 函數(shù)原型 224
9.2.2 實現(xiàn)原理 224
9.3 sysctl相關(guān)知識 225
9.3.1 /proc/sys虛擬文件系統(tǒng) 225
9.3.2 sysctl命令 225
9.4 常用的套接字選項 227
9.4.1 SO_SNDBUF和
SO_RCVBUF 227
9.4.2 SO_REUSEADDR和
SO_REUSEPORT 230
9.4.3 SO_LINGER 237
9.4.4 TCP;顧C(jī)制 238
9.4.5 TCP_NODELAY和
TCP_CORK 242
第10章 原始套接字 247
10.1 從內(nèi)核看原始套接字 247
10.1.1 原始套接字如何發(fā)送
數(shù)據(jù) 248
10.1.2 原始套接字如何接收
數(shù)據(jù) 249
10.2 網(wǎng)絡(luò)層原始套接字 251
10.2.1 編程流程 251
10.2.2 常見的網(wǎng)絡(luò)層原始套接字
編程問題 254
10.3 鏈路層原始套接字 256
10.3.1 套接字地址 256
10.3.2 編程流程 257
10.3.3 混雜模式 259
10.3.4 常見的鏈路層原始套接字編程
問題 260
10.4 用戶層TCP/IP編程 262
10.4.1 累加校驗和的原理 262
10.4.2 以太網(wǎng)幀頭 264
10.4.3 IP頭 267
10.4.4 ARP 269
10.4.5 ICMP 272
10.4.6 UDP 274
第11章 域套接字 278
11.1 域套接字基礎(chǔ) 278
11.1.1 域套接字地址 279
11.1.2 域套接字的工作原理 279
11.2 SOCK_STREAM域套接字 280
11.2.1 服務(wù)端程序 280
11.2.2 客戶端程序 286
11.2.3 查看域套接字的狀態(tài) 288
11.3 SOCK_DGRAM域套接字 288
11.3.1 服務(wù)端程序 289
11.3.2 客戶端程序 291
11.4 socketpair域套接字 292
11.4.1 socketpair函數(shù) 292
11.4.2 發(fā)送和接收數(shù)據(jù) 293
11.4.3 socketpair函數(shù)和pipe函數(shù)的
對比 294
11.5 傳遞文件描述符 296
11.5.1 實現(xiàn)原理 297
11.5.2 編程實戰(zhàn) 298
第12章 組播和廣播 301
12.1 組播 301
12.1.1 組播系統(tǒng) 302
12.1.2 組播路由 304
12.1.3 組播地址 307
12.1.4 IGMP 309
12.2 組播編程 313
12.2.1 編程流程 313
12.2.2 組播調(diào)試 320
12.3 廣播 323
12.3.1 廣播類型 324
12.3.2 廣播的工作原理 324
12.4 廣播編程 325
第13章 零拷貝 329
13.1 傳統(tǒng)文件傳輸 329
13.2 零拷貝技術(shù) 330
13.2.1 mmap內(nèi)存映射 331
13.2.2 pipe 334
13.2.3 DMA 336
13.3 零拷貝網(wǎng)絡(luò)編程 337
13.3.1 mmap+write 337
13.3.2 sendfile 339
13.3.3 splice 342
第14章 百萬并發(fā) 347
14.1 打開百萬個套接字文件 347
14.1.1 默認(rèn)情況 347
14.1.2 限制條件 348
14.1.3 解除限制 350
14.2 建立上百萬個網(wǎng)絡(luò)連接 359
14.2.1 分析方法 359
14.2.2 單機(jī)百萬網(wǎng)絡(luò)連接 360
14.3 百萬并發(fā)常見問題 365
14.4 Reactor模型 366
14.4.1 單Reactor單線程模型 367
14.4.2 單Reactor多線程模型 368
14.4.3 主從Reactor多線程模型 369
14.4.4 Reactor實戰(zhàn) 370