“谈一谈网络编程学习经验“总结

来源:互联网 发布:淘宝客怎么关闭掉 编辑:程序博客网 时间:2024/05/24 04:17

原文地址谈一谈网络编程学习经验(06-08更新)

  1. 网络编程的一些胡思乱想,谈谈我对这一领域的认识
  2. 几本必看的书,基本上还是W. Richard Stevents那几本

网络编程的各种任务角色

  1. 开发网络设备,编写防火墙、交换机、路由器的固件 firmware
  2. 开发或移植网卡的驱动
  3. 移植或维护TCP/IP协议栈(特别是在嵌入式系统上)
  4. 开发或维护标准的网络协议程序,HTTP、FTP、DNS、SMTP、POP3、NFS
  5. 开发标准网络协议的“附加品”,比如HAProxy、squid、varnish等web load balancer
  6. 开发标准或非标准网络服务的客户端库,比如ZooKeeper客户端库,memcached客户端库
  7. 开发与公司业务直接相关的网络服务程序,比如即时聊天软件的后台服务器,网游服务器,金融交易系统,互联网企业用的分布式海量存储,微博发帖的内部广播通知,等等
  8. 客户端程序中涉及网络的部分,比如邮件客户端中与 POP3、SMTP通信的部分,以及网游的客户端程序中与服务器通信的部分
    本文所指的“网络编程”专指第7项,即在TCP/IP协议之上开发业务软件。

面向业务的网络编程的特点

  1. 业务逻辑比较复杂,而且时常变化
  2. 不一定需要遵循公认的通信协议标准
  3. 程序结构没有定论
  4. 性能评判的标准不同
  5. 网络编程起到支撑作用,但不处于主导地位

协议设计是网络编程的核心

对于专用的业务系统,协议设计是核心任务,决定了系统的开发难度与可靠性,但是这个领域还没有形成大家公认的设计流程。
系统中哪个程序发起连接,哪个程序接受连接?没有固定的方法。
比新建连接难的是关闭连接,是服务器主动关闭还是客户端主动关闭?或者将二者结合?
而比连接的建立与断开更重要的是设计消息协议,难点在消息内容。

网络编程的三个层次

  1. 读过教程和文档
    第一个层次是基本要求,读过《Unix网络编程》这样的编程教材,读过《TCP/IP详解》基本理解TCP/IP协议,读过系统的manpage。这个层次可以编写一些基本的网络程序,完成常见的任务。
  2. 熟悉本系统TCP/IP协议栈的脾气
    第二个层次,熟悉系统的TCP/IP协议栈参数设置与优化(这样有利于了解系统的TCP/IP的问题),也要熟悉各个场景下的error code
  3. 自己写过一个简单的TCP/IP stack
    第三个层次,通过自己写一个简单的TCP/IP协议栈,能大大加深对TCP/IP的理解,更能明白TCP为什么要这么设计,有哪些因素制约,每一步操作的代价是什么,写起网络程序来更是成竹在胸。

最主要的三个例子

我认为TCP网络编程有三个例子最值得学习研究,分别是echo、chat、proxy,都是长连接协议。
Echo的作用:熟悉服务端被动接受新连接、收发数据、被动处理连接断开。每个连接是独立服务的,连接之间没有关联。在消息内容方面Echo有一些变种:比如做成一问一答的方式,收到的请求和发送响应的内容不一样,这时候要考虑打包与拆包格式的设计,进一步还可以写简单的HTTP服务。
Chat的作用:连接之间的数据有交流,从a收到的数据要发给b。这样对连接管理提出的更高的要求:如何用一个程序同时处理多个连接?fork() per connection似乎是不行的。如何防止串话?b有可能随时断开连接,而新建立的连接c可能恰好复用了b的文件描述符,那么a会不会错误地把消息发给c?
Proxy的作用:连接的管理更加复杂:既要被动接受连接,也要主动发起连接,既要主动关闭连接,也要被动关闭连接。还要考虑两边速度不匹配,见《Muduo 网络编程示例之十:socks4a 代理服务器》。
这三个例子功能简单,突出了TCP网络编程中的重点问题,挨着做一遍基本就能达到层次一的要求。

三本必看的书

《TCP/IP Illustrated, Vol. 1: The Protocols》中文名《TCP/IP 详解》,以下简称 TCPv1
《Unix Network Programming, Vol. 1: Networking API》第二版或第三版(这两版的副标题稍有不同,第三版去掉了 XTI),以下统称 UNP,如果需要会以 UNP2e、UNP3e 细分。
《Effective TCP/IP Programming》

记一段博客中的话:(孟岩)我主张,在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。

0 0
原创粉丝点击