学习 Linux 下的 C/C++ 网络编程,建议按「基础 → 系统调用 → 实战 → 进阶」的路径来。下面给你一个比较系统的学习路线和资源。
一、先打好基础(很重要)
在写网络程序前,你需要理解:
1. 计算机网络基础
重点掌握:
- OSI / TCP/IP 模型
- IP、端口、MAC
- TCP 与 UDP 的区别
- 三次握手、四次挥手
- 滑动窗口、拥塞控制(理解即可)
✅ 推荐:
- 《计算机网络:自顶向下方法》
- B 站搜「计算机网络 谢希仁」
2. Linux 基础
你需要会用:
- shell 基本命令
- gcc / g++ 编译
- make / CMake
- 多进程 / 多线程
- 文件 IO(read/write)
✅ 推荐:
- 《鸟哥的 Linux 私房菜》
- 《UNIX 环境高级编程(APUE)》
二、核心:Socket 网络编程
1. 最基础的 Socket API(必须手写)
重点函数:
socket()
bind()
listen()
accept()
connect()
send() / recv()
close()
学习顺序:
- TCP 回显服务器(单连接)
- TCP 多进程服务器
- TCP 多线程服务器
- UDP 服务器/客户端
✅ 推荐书:
- 《UNIX 网络编程 卷1:套接字联网 API》(经典)
- 《Linux 高性能服务器编程》(游双,强烈推荐)
2. I/O 模型(重点)
理解并对比:
- 阻塞 IO
- 非阻塞 IO
- I/O 多路复用
- select
- poll
- epoll(Linux 核心)
✅ 必须掌握:
- epoll 的
ET 和 LT 模式
- 为什么 epoll 高性能
三、实战项目(非常重要)
不要只看书,要写代码!
初级项目
- TCP 聊天室(多线程)
- 文件传输工具
- 简单的 HTTP 服务器
中级项目
- 基于 epoll 的并发服务器
- 线程池 + 网络库
- 简单 RPC 框架
进阶方向
- Reactor / Proactor 模型
- 零拷贝(sendfile / mmap)
- 定时器(时间轮)
- 协程(libco / boost.coroutine)
四、推荐学习资源
书
- 《UNIX 网络编程 卷1》
- 《Linux 高性能服务器编程》
- 《APUE》
视频
- B 站:
- 「Linux C++ 网络编程」
- 「muduo 网络库讲解」
开源代码(必看)
- muduo(陈硕)
- libevent
- redis 网络模块
五、一个最小 TCP 服务器示例(思路)
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
bind(listenfd, ...);
listen(listenfd, 10);
while (true) {
int connfd = accept(listenfd, ...);
}
六、学习建议总结
✅ 先做能跑的小程序
✅ 再理解为什么这样写
✅ 最后看别人怎么优化
如果你愿意,我可以:
- 给你一份 30 天学习路线
- 或带你 从 0 写一个 epoll 服务器
- 或讲 muduo 源码
你想从哪一步开始?