掌握 Linux 下的 C++ 网络编程,建议按「基础 → 系统调用 → 高级模型 → 实战项目」的路线来,下面给你一个比较系统、可落地的学习路径。
一、先打牢基础(非常重要)
1. Linux 基础
你必须熟悉:
- 文件描述符(fd)
- 进程 / 线程
- 系统调用(syscall)
- 信号(signal)
- shell 基本操作
推荐:
- 《鸟哥的 Linux 私房菜》
- 熟悉常用命令:
ps, netstat, ss, tcpdump, lsof
2. 网络基础(必须懂)
至少要明白:
- TCP / UDP 区别
- 三次握手、四次挥手
- 端口、IP、socket 概念
- 字节序(大端 / 小端)
推荐:
- 《TCP/IP 详解 卷1》(可挑重点看)
- 图解网络(入门更友好)
二、C++ 基础(网络无关但关键)
你需要:
- 类、继承、多态
- 智能指针(shared_ptr / unique_ptr)
- STL(vector / map / string)
- 多线程(std::thread / mutex)
推荐:
- 《C++ Primer》
- 《Effective C++》
三、核心:Linux C++ 网络编程
1. Socket 基础(第一步)
学习顺序:
- UDP
- socket → bind → sendto / recvfrom
- TCP
- server: socket → bind → listen → accept
- client: socket → connect
示例关键词:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
bind / listen / accept / connect / read / write
推荐书:
- 《UNIX 网络编程 卷1》(圣经级)
- 《Linux 高性能服务器编程》(游双,非常实用)
2. I/O 模型(重点)
必须掌握 4 种:
- 阻塞 I/O
- 非阻塞 I/O
- I/O 多路复用
- 异步 I/O(aio,了解即可)
epoll 是 Linux 网络核心
epoll_create
epoll_ctl
epoll_wait
- 水平触发(LT) vs 边缘触发(ET)
3. 并发模型(服务器怎么写)
常见模型:
- 多进程
- 多线程
- ✅ 线程池 + epoll(最常用)
- Reactor 模型
- Proactor(了解)
推荐理解:
- 单 Reactor
- 多 Reactor(主从 Reactor)
四、进阶内容(锦上添花)
1. 高并发 & 性能
- 零拷贝(sendfile / splice)
- 内存池
- 对象池
- 协程(libco / boost.coroutine)
2. 网络库(强烈建议学)
不要重复造轮子,先学会用:
- ✅ libevent
- ✅ muduo(陈硕,C++ 经典)
- boost.asio(现代 C++)
3. 协议 & 实战
- HTTP(手写一个 http server)
- WebSocket
- 自定义二进制协议
- 序列化(protobuf)
五、推荐学习路线(6 个月计划)
第 1–2 月
- Linux 基础
- C++ 基础
- 写 TCP / UDP echo 程序
第 3–4 月
- epoll
- 多线程
- 写一个线程池 + epoll 的服务器
第 5–6 月
- 学 muduo 或 libevent
- 写 HTTP 服务器
- 小型聊天室 / 文件传输
六、练手项目(非常重要)
✅ 初级:
✅ 中级:
✅ 高级:
七、如果你愿意,我可以继续帮你
你可以告诉我:
- 你是 零基础 / 有 C++ 基础 / 有网络基础
- 目标是 面试 / 做项目 / 兴趣
- 想用 原生 socket 还是库
我可以直接给你:
✅ 学习资料清单
✅ epoll 示例代码
✅ 项目结构建议
✅ 面试重点总结