学习 Linux C++ 网络编程需要循序渐进,从基础到进阶,结合实践和理论。以下是一个系统的学习路径和建议:
一、先打好基础
1. Linux 基础
- 熟悉 Linux 常用命令(
ls, cd, grep, ps, netstat, ss, tcpdump 等)
- 理解 Linux 文件系统、权限、进程/线程概念
- 学会使用
man 手册(如 man 2 socket、man 7 tcp)
2. C++ 基础
- 掌握 C++ 基础语法(指针、引用、类、STL)
- 熟悉 C++11/14/17 新特性(智能指针、lambda、多线程、移动语义)
- 理解 RAII、异常处理、内存管理
3. 网络基础
- 理解 OSI 七层模型和 TCP/IP 四层模型
- 掌握 TCP、UDP、IP、HTTP、DNS 等协议
- 理解 socket、端口、IP 地址、字节序(大端/小端)
二、Linux 系统编程基础
1. 文件 I/O
- 学习
open/read/write/close、select/poll/epoll
- 理解阻塞/非阻塞、同步/异步 I/O
2. 进程与线程
- 进程:
fork, exec, wait, 进程间通信(管道、共享内存、消息队列)
- 线程:
pthread 或 C++11 std::thread,互斥锁、条件变量
3. 信号与信号处理
signal, sigaction, 常见信号(SIGINT、SIGPIPE 等)
三、核心:Linux C++ 网络编程
1. Socket 编程
- 基础 API:
socket(), bind(), listen(), accept(), connect(), send/recv
- 地址结构:
sockaddr_in, sockaddr_un
- 字节序转换:
htons, ntohs, inet_pton
2. TCP 网络编程
- 实现简单的 TCP 服务器和客户端
- 理解三次握手、四次挥手在 API 中的体现
- 处理粘包、拆包问题(自定义协议或定长消息)
3. UDP 网络编程
sendto/recvfrom
- 对比 TCP 与 UDP 的使用场景
4. 高级 I/O 模型
- 阻塞 vs 非阻塞
- I/O 多路复用:
select(了解即可)
poll(了解即可)
epoll(重点!Linux 高性能核心)
epoll_create, epoll_ctl, epoll_wait
- LT 模式 vs ET 模式
- Reactor 模式(核心设计模式)
四、进阶内容
1. 多线程网络编程
- 线程池 + epoll 模型
- 线程安全、锁粒度控制
- 避免竞态条件
2. 高性能网络编程
- 零拷贝:
sendfile, splice
- 内存池、对象池
- 定时器管理(时间轮、最小堆)
- 协议设计(自定义二进制协议、HTTP 解析)
3. 常用网络库与框架
- muduo(强烈推荐学习源码)
- libevent / libev / libuv
- Boost.Asio(跨平台,偏现代 C++)
- gRPC / Thrift(RPC 框架)
五、实践项目建议
初级项目
- TCP 回显服务器/客户端
- 简单的 HTTP 服务器
中级项目
- 聊天室程序
- 基于 epoll 的 Reactor 网络库
- 封装 EventLoop、Channel、TcpServer
高级项目
- 简单的 RPC 框架
- 高性能 Web 服务器
六、学习资源推荐
书籍
- 《UNIX 网络编程》(卷1:套接字联网 API) —— 圣经级
- 《Linux 高性能服务器编程》 —— 游双(适合入门到进阶)
- 《深入理解计算机系统》(CSAPP) —— 系统基础
- 《Effective Modern C++》 —— C++ 现代特性
在线资源
- man 手册:
man 7 socket, man epoll
- Beej’s Guide to Network Programming(英文经典)
- muduo 源码:https://github.com/chenshuo/muduo
- Linux 内核文档:https://www.kernel.org/doc/
调试工具
gdb:调试程序
tcpdump:抓包分析
wireshark:图形化分析协议
valgrind:检测内存泄漏
strace:跟踪系统调用
七、学习建议
- 边学边写代码,不要只看不动手
- 从简单到复杂,先实现功能,再优化性能
- 多读优秀源码(muduo、Nginx、Redis 网络模块)
- 理解原理比调库更重要
- 关注 Linux 内核行为(如 TCP 状态、epoll 实现)
如果你愿意,我可以:
- ✅ 给你一个 从零开始的 TCP 服务器示例代码
- ✅ 帮你 拆解 muduo 源码
- ✅ 针对 面试 给你总结高频问题
- ✅ 推荐一个 3 个月的学习计划
你可以告诉我你的 当前水平 和 学习目标(比如:找工作 / 做项目 / 兴趣)。