2020-11-18 14:44:00
学习 Socket 编程需要系统掌握计算机网络理论、Socket API、网络模型、协议格式及常用命令,并通过实践和阅读经典书籍逐步提升。以下是具体学习路径:
一、夯实计算机网络理论基础
常用函数与场景:
非阻塞模式设置:通过 fcntl 或 ioctl 修改文件描述符属性。
阻塞/非阻塞行为:阻塞模式下 send/recv 会等待数据,非阻塞模式返回 EAGAIN/EWOULDBLOCK 错误。
端口绑宴慧定与监听:bind 绑定端口 0 时由系统自动分配,listen 的 backlog 参数定义待连接队列长度。
异步连接:通过 select/poll/epoll 监听 connect 的可写事件实现异步。
半关闭状态:使用 shutdown(fd, SHUT_WR) 关闭单方向通信。
Nagle 算法:通过 TCP_NODELAY 选项禁用以减少小数据包发送。
多路复用模型:
Linux:select(跨平台但性能差)、poll(解决 select 的文件描述符限制)、epoll(边缘触发 ET/水平触发 LT 模式,高效处理大量连接)。
Windows:select、WSAEventSelect、WSAAsyncSelect、完成端口(I/O Completion Port,高性能模型)。
面试高频问题:
epoll 边缘模式下,部分读取数据后是否触发读事件?新数据到达是否触发?
如何判断边缘模式下数据已读完?
边缘模式中写事件的处理方式(如缓冲区可写时触发)。
HTTP:请求行(方法、URL、协议版本)、请求头(Host、Content-Type)、空行、请求体(POST 数据)。响应结构类似,状态码(如 200、404)位于响应行。
WebSocket:基于 HTTP 升级握手,后续数据帧包含帧头(操作码、掩码、长度)和负载数据。
ifconfig/ip addr:查看网络接口配置。
ping:测试主机可达性。
telnet/nc:快速测试端口连通性(如 nc -zv example.com 80)。
netstat/ss:查看连接状态(如 ESTABLISHED、TIME_WAIT)。
lsof:检查进程打开的文件(包括网络连接)。
curl:发送 HTTP 请求并分析响应。
tcpdump:抓包分析底层通信(如 tcpdump -i eth0 port 80 -w http.pcap)。
理论入门:《计算机网络:自顶向下方法》(链接:
实战编程:
《TCP/IP 网络编程》(尹圣雨,适合零基础,涵盖 Socket API 到高级模型,链接:
《Linux 高性能服务器编程》(游双,需基础,实践后提升显著,链接:
综合提升:《C++ 服务器开发精髓》(第四章总结 Socket 重难点,第五章详解网络命令)。

通过以上步骤,可系统掌握 Socket 编程的核心技能,并逐步向高性能网络服务开发进阶。