店铺推荐
【推荐语】
"200幅底层原理全彩插图,

48个高频工程实践问题解决方案,

24条打造高性能应用的硬核建议。

Java、C++、PHP实验代码,助你——清扫性能误区,探寻底层原理,应对校招、社招、晋升考核,用底层内功对抗中年焦虑。

时髦的东西终究过时,但扎实的内功将会伴随你一生。只有具备了深厚的内功底蕴,才能在发展的道路上走得更稳、走得更远。

腾讯技术副总监张勇、小米科技技术总监黄学青等技术专家齐赞。"
【作者】
张彦飞,2010年硕士毕业于西北大学计算机学院,有十多年的大型互联网公司项目经验,目前就职于腾讯。他喜欢对技术进行深度思考,善于挖掘技术点背后的原理。他的技术公众号“开发内功修炼”一年便收到五万多读者的关注。
【内容】
本书通过抛出了一些开发、运维等技术人员工作中的常见问题,激发读者的思考。从这些疑问出发,深入地对网络底层实现原理进行了拆解,带领读者看清楚问题的核心,提高大家的技术功力。例如网络包是如何被接收和发送的?阻塞到底在内部是如何发生的?epoll 的底层工作原理又是啥?TCP 连接在底层上是如何支持和实现的?书中对这些内容都有深度的阐述。本书旨在通过带领读者修炼底层内功,进而帮助大家深度掌握网络高性能原理。
【目录】
第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
【媒体评论】
"这本书的出版令人欣喜。作者张彦飞能够坦露心扉,从IT大厂面试聊到中年焦虑,技术上从内核的工作原理聊起,将内核如何接收网络包、如何与用户进程协作讲解得深入浅出,从而带着读者深入理解网络IO、TCP连接建立过程,最后再与读者一起总结出系统性能优化的抓手与方案。阅读他的作品是一种享受,不但让我收获很多底层技术细节和原理,还能够激发我进一步思考。分享给所有后端开发工程师阅读,与作者一起完成内功修炼。 腾讯技术副总监,张勇 本书从实际工作遇到的问题出发,以庖丁解牛式的手法,结合内核源码以简洁高效的话术把网络原理讲深讲透,是非常少见的网络进阶学习图书。如果说Stack Overflow、GitHub是用于实践的“武当长拳”,那么本书属于提升内力的“小无相功”,前者能够找到可复用或可参考的业务逻辑实现,后者则在于提升“内力”。 小米科技技术总监,黄学青 看彦飞的这部作品,满足你对Linux内核网络模块运行原理的好奇心,让你达到知其然也知其所以然的水平。通过深度掌握底层知识,为你开发高性能后端应用打下坚实基础。 C++ Workflow开源项目作者,谢翰 这是目前市面上少有的、深入底层回答实际工作中相关问题的书。飞哥通过日常工作中的问题,带着你一步步深入其中的原理,不仅让你知其然,而且知其所以然。要提升自己,内功的修炼并不可少,飞哥的这本书给了你一个很好的起点,相信通过修炼自己的底层技术能力,你的技术能力会突飞猛进。 Go语言中文网创始人,polarisxu"
返回顶部