以一个 c/c++ 开发者的角度谈一谈网络编程的学习过程以及注意事项.
引子
记录一下我过去学习网络编程的道路(目前还在不断探索中). 相关代码记录(或者一些基础记录), 可以参考的github库
正文
网络学习步骤:
有基础的1个月; 没有基础的2.5个月. 深入学习3个月.
(本文建立在你熟悉一门支持网络编程的计算机语言的基础上; 最好对于网络并发多线程; Linux系统编程有一定的了解)
- TCPIP模型 (网络的理论基础)
- 学习socket api集.
- 创建 socket bind listen accept
- 收发 read/recv/recvfrom write/send/sendto
- 关闭 close shutdown
- 参数 getsockopt/setsockopt
- 地址 gethostbyaddr getaddrbyhost,…
在学习这些api时候,可以先关注在函数功能,参数意义上
- 基本的socket编程模型(socket api的理论实践)
- tcp socket的语法如下: socket(AF_INET, SOCK_STREAM)
- udp socket的语法如下: socket(AF_INET, SOCK_DGRAM)
- 学习实现server端编程, 关注服务器
学习socket server端编程实现简单规约比如echo, time等, 然后通过cmd中的telnet来测试. - 学习linux下相关网络IO模型
演化过程, 比如阻塞, 非阻塞, 异步, 事件IO(select,poll,epoll, kqueue, WaitForMultipleObject)等 - 学习Richard Stevens的 “Unix网络编程” 即unp, 深入学习其中的api原理以及服务端设计原理, 并通过代码编写
- 学习高性能网络框架libevent, libuv, boost.asio等
- 把所学知识或者经验用于工业/商业项目
以上均为个人的浅见, 不正确的地方还望指点.
尾巴
学习网络部分还是蛮有意思的, 不过深入学习可能需要几年的时间.
后续的学习推荐《Linux网络内核分析与开发》
.