深入理解Linux网络: 修炼底层内功,掌握高性能原理
- ISBN:9787121434105
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:336
- 出版时间:2022-05-01
- 条形码:9787121434105 ; 978-7-121-43410-5
本书特色
适读人群 :想通过提升自己的网络内功而进大厂的读者。 不满足于只学习网络协议,也想理解它是怎么实现的读者。 虽有几年开发工作经验,但对网络开销把握不准的开发人员。 想做网络性能优化,但没有成体系的理论指导的读者。 维护各种高并发服务器的运维人员。200幅底层原理全彩插图, 48个高频工程实践问题解决方案, 24条打造高性能应用的硬核建议。 Java、C++、PHP实验代码,助你—— 清扫性能误区,探寻底层原理,应对校招、社招、晋升考核,用底层内功对抗中年焦虑。 时髦的东西终究过时,但扎实的内功将会伴随你一生。只有具备了深厚的内功底蕴,才能在发展的道路上走得更稳、走得更远。 腾讯技术副总监张勇、小米科技技术总监黄学青等技术专家齐赞。
内容简介
本书通过抛出了一些开发、运维等技术人员工作中的常见问题,激发读者的思考。从这些疑问出发,深入地对网络底层实现原理进行了拆解,带领读者看清楚问题的核心,提高大家的技术功力。例如网络包是如何被接收和发送的?阻塞到底在内部是如何发生的?epoll 的底层工作原理又是啥?TCP 连接在底层上是如何支持和实现的?书中对这些内容都有深度的阐述。本书旨在通过带领读者修炼底层内功,进而帮助大家深度掌握网络高性能原理。
目录
第1章 绪论 / 1
1.1 我在工作中的困惑 / 2
1.1.1 过多的TIME_WAIT / 2
1.1.2 长连接开销 / 2
1.1.3 CPU被消耗光了 / 3
1.1.4 为什么不同的语言网络性能差别巨大 / 4
1.1.5 访问127.0.0.1过网卡吗 / 4
1.1.6 软中断和硬中断 / 5
1.1.7 零拷贝到底是怎么回事 / 5
1.1.8 DPDK / 5
1.2 本书内容结构 / 6
1.3 一些约定 / 7
1.4 一些术语 / 8
第2章 内核是如何接收网络包的 / 9
2.1 相关实际问题 / 10
2.2 数据是如何从网卡到协议栈的 / 11
2.2.1 Linux网络收包总览 / 12
2.2.2 Linux启动 / 13
2.2.3 迎接数据的到来 / 23
2.2.4 收包小结 / 33
2.3 本章总结 / 34
第3章 内核是如何与用户进程协作的 / 41
3.1 相关实际问题 / 42
3.2 socket的直接创建 / 43
3.3 内核和用户进程协作之阻塞方式 / 46
3.3.1 等待接收消息 / 47
3.3.2 软中断模块 / 52
3.3.3 同步阻塞总结 / 57
3.4 内核和用户进程协作之epoll / 59
3.4.1 epoll内核对象的创建 / 60
3.4.2 为epoll添加socket / 62
3.4.3 epoll_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.1 send系统调用实现 / 92
4.4.2 传输层处理 / 94
4.4.3 网络层发送处理 / 99
4.4.4 邻居子系统 / 103
4.4.5 网络设备子系统 / 105
4.4.6 软中断调度 / 109
4.4.7 igb网卡驱动发送 / 111
4.5 RingBuffer内存回收 / 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.1 listen系统调用 / 141
6.2.2 协议栈listen / 142
6.2.3 接收队列定义 / 143
6.2.4 接收队列申请和初始化 / 145
6.2.5 半连接队列长度计算 / 146
6.2.6 listen过程小结 / 148
6.3 深入理解connect / 148
6.3.1 connect调用链展开 / 149
6.3.2 选择可用端口 / 151
6.3.3 端口被使用过怎么办 / 153
6.3.4 发起syn请求 / 155
6.3.5 connect小结 / 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.1 connect系统调用耗时失控 / 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.2 Linux内核如何管理内存 / 188
7.2.1 node划分 / 189
7.2.2 zone划分 / 191
7.2.3 基于伙伴系统管理空闲页面 / 192
7.2.4 slab分配器 / 194
7.2.5 小结 / 197
7.3 TCP连接相关内核对象 / 198
7.3.1 socket函数直接创建 / 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 一台客户端机器*多只能发起65 535条连接吗 / 232
8.4.1 65 535的束缚 / 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.2 veth设备对 / 274
10.2.1 veth如何使用 / 274
10.2.2 veth底层创建过程 / 276
10.2.3 veth网络通信过程 / 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.2 Bridge是如何创建出来的 / 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
作者简介
张彦飞,2010年硕士毕业于西北大学计算机学院,有十多年的大型互联网公司项目经验,目前就职于腾讯。他喜欢对技术进行深度思考,善于挖掘技术点背后的原理。他的技术公众号“开发内功修炼”一年便收到五万多读者的关注。
-
全图解零基础word excel ppt 应用教程
¥15.6¥48.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥12.7¥39.8 -
情感计算
¥66.8¥89.0 -
大模型RAG实战 RAG原理、应用与系统构建
¥69.3¥99.0 -
LINUX企业运维实战(REDIS+ZABBIX+NGINX+PROMETHEUS+GRAFANA+LNMP)
¥48.3¥69.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
LINUX实战——从入门到精通
¥48.3¥69.0 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
快速部署大模型:LLM策略与实践(基于ChatGPT等大语言模型)
¥56.9¥79.0 -
数据驱动的工业人工智能:建模方法与应用
¥68.3¥99.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥76.3¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
UN NX 12.0多轴数控编程案例教程
¥24.3¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥38.7¥79.0 -
明解C语言:实践篇
¥62.9¥89.8