注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络操作系统深入理解Linux网络:修炼底层内功,掌握高性能原理

深入理解Linux网络:修炼底层内功,掌握高性能原理

深入理解Linux网络:修炼底层内功,掌握高性能原理

定 价:¥118.00

作 者: 张彦飞 著
出版社: 电子工业出版社
丛编项:
标 签: 暂缺

ISBN: 9787121434105 出版时间: 2022-06-01 包装: 平装
开本: 16开 页数: 336 字数:  

内容简介

  本书通过先抛出一些开发、运维等技术人员在工作中经常遇见的问题,激发读者的思考。从这些问题出发,深入地对网络底层实现原理进行拆解,带领读者看清楚问题的核心,理解其背后的技术本质,提高大家的技术功力。例如网络包是如何被接收和发送的?阻塞到底在内部是如何发生的?epoll的底层工作原理又是啥?TCP连接在底层上是如何支持和实现的?书中对这些内容都有深度的阐述。本书旨在通过带领读者修炼底层内功,进而帮助大家深度掌握网络高性能原理。

作者简介

  张彦飞,2010年硕士毕业于西北大学计算机学院,有十多年的大型互联网公司项目经验,目前就职于腾讯。他喜欢对技术进行深度思考,善于挖掘技术点背后的原理。他的技术公众号“开发内功修炼”一年便收到五万多读者的关注。

图书目录

第1章绪论/1

1.1我在工作中的困惑/2

1.1.1过多的TIME_WAIT/2

1.1.2长连接开销/2

1.1.3CPU被消耗光了/3

1.1.4为什么不同的语言网络性能差别巨大/4

1.1.5访问127.0.0.1过网卡吗/4

1.1.6软中断和硬中断/5

1.1.7零拷贝到底是怎么回事/5

1.1.8DPDK/5

1.2本书内容结构/6

1.3一些约定/7

1.4一些术语/8



第2章内核是如何接收网络包的/9

2.1相关实际问题/10

2.2数据是如何从网卡到协议栈的/11

2.2.1Linux网络收包总览/12

2.2.2Linux启动/13

2.2.3迎接数据的到来/23

2.2.4收包小结/33

2.3本章总结/34



第3章内核是如何与用户进程协作的/41

3.1相关实际问题/42

3.2socket的直接创建/43

3.3内核和用户进程协作之阻塞方式/46

3.3.1等待接收消息/47

3.3.2软中断模块/52

3.3.3同步阻塞总结/57

3.4内核和用户进程协作之epoll/59

3.4.1epoll内核对象的创建/60

3.4.2为epoll添加socket/62

3.4.3epoll_wait之等待接收/68

3.4.4数据来了/71

3.4.5小结/79

3.5本章总结/80



第4章内核是如何发送网络包的/84

4.1相关实际问题/85

4.2网络包发送过程总览/86

4.3网卡启动准备/90

4.4数据从用户进程到网卡的详细过程/92

4.4.1send系统调用实现/92

4.4.2传输层处理/94

4.4.3网络层发送处理/99

4.4.4邻居子系统/103

4.4.5网络设备子系统/105

4.4.6软中断调度/109

4.4.7igb网卡驱动发送/111

4.5RingBuffer内存回收/114

4.6本章总结/115



第5章深度理解本机网络IO/119

5.1相关实际问题/120

5.2跨机网络通信过程/120

5.2.1跨机数据发送/120

5.2.2跨机数据接收/125

5.2.3跨机网络通信汇总/127

5.3本机发送过程/127

5.3.1网络层路由/127

5.3.2本机IP路由/130

5.3.3网络设备子系统/131

5.3.4“驱动”程序/133

5.4本机接收过程/135

5.5本章总结/137



第6章深度理解TCP连接建立过程/139

6.1相关实际问题/140

6.2深入理解listen/141

6.2.1listen系统调用/141

6.2.2协议栈listen/142

6.2.3接收队列定义/143

6.2.4接收队列申请和初始化/145

6.2.5半连接队列长度计算/146

6.2.6listen过程小结/148

6.3深入理解connect/148

6.3.1connect调用链展开/149

6.3.2选择可用端口/151

6.3.3端口被使用过怎么办/153

6.3.4发起syn请求/155

6.3.5connect小结/156

6.4完整TCP连接建立过程/157

6.4.1客户端connect/159

6.4.2服务端响应SYN/160

6.4.3客户端响应SYNACK/162

6.4.4服务端响应ACK/164

6.4.5服务端accept/167

6.4.6连接建立过程总结/167

6.5异常TCP连接建立情况/169

6.5.1connect系统调用耗时失控/169

6.5.2第一次握手丢包/171

6.5.3第三次握手丢包/176

6.5.4握手异常总结/178

6.6如何查看是否有连接队列溢出发生/179

6.6.1全连接队列溢出判断/179

6.6.2半连接队列溢出判断/181

6.6.3小结/183

6.7本章总结/183



第7章一条TCP连接消耗多大内存/187

7.1相关实际问题/188

7.2Linux内核如何管理内存/188

7.2.1node划分/189

7.2.2zone划分/191

7.2.3基于伙伴系统管理空闲页面/192

7.2.4slab分配器/194

7.2.5小结/197

7.3TCP连接相关内核对象/198

7.3.1socket函数直接创建/198

7.3.2服务端socket创建/206

7.4实测TCP内核对象开销/207

7.4.1实验准备/207

7.4.2实验开始/208

7.4.3观察ESTABLISH状态开销/209

7.4.4观察非ESTABLISH状态开销/211

7.4.5收发缓存区简单测试/214

7.4.6实验结果小结/215

7.5本章总结/216



第8章一台机器最多能支持多少条TCP连接/218

8.1相关实际问题/219

8.2理解Linux最大文件描述符限制/219

8.2.1找到源码入口/220

8.2.2寻找进程级限制nofile和fs.nr_open/221

8.2.3寻找系统级限制fs.file-max/223

8.2.4小结/224

8.3一台服务端机器最多可以支撑多少条TCP连接/225

8.3.1一次关于服务端并发的聊天/225

8.3.2服务器百万连接达成记/228

8.3.3小结/232

8.4一台客户端机器最多只能发起65535条连接吗/232

8.4.165535的束缚/232

8.4.2多IP增加连接数/234

8.4.3端口复用增加连接数/236

8.4.4小结/243

8.5单机百万并发连接的动手实验/243

8.5.1方案一,多IP客户端发起百万连接/244

8.5.2方案二,单IP客户端机器发起百万连接/248

8.5.3最后多谈一点/250

8.6本章总结/251



第9章网络性能优化建议/253

9.1网络请求优化/254

9.2接收过程优化/256

9.3发送过程优化/262

9.4内核与进程协作优化/268

9.5握手挥手过程优化/269



第10章容器网络虚拟化/272

10.1相关实际问题/273

10.2veth设备对/274

10.2.1veth如何使用/274

10.2.2veth底层创建过程/276

10.2.3veth网络通信过程/278

10.2.4小结/281

10.3网络命名空间/281

10.3.1如何使用网络命名空间/282

10.3.2命名空间相关的定义/284

10.3.3网络命名空间的创建/287

10.3.4网络收发如何使用网络命名空间/295

10.3.5结论/296

10.4虚拟交换机Bridge/297

10.4.1如何使用Bridge/298

10.4.2Bridge是如何创建出来的/301

10.4.3添加设备/303

10.4.4数据包处理过程/305

10.4.5小结/308

10.5外部网络通信/310

10.5.1路由和NAT/311

10.5.2实现外部网络通信/313

10.5.3小结/318

10.6本章总结/319

本目录推荐