2015-07学习总结——网络编程(TCP/IP)
之前学习的主要内容是单机上的处理,比如编程语言、游戏编程、数据库、多媒体编解码。其实对网络也有些接触,比如WWW、HTTP、UDP/TCP、RTP、RTMP、SNMP、FTP、单播组播、Telnet、RPC等,但仅限于应用,原理一知半解。
近期考虑到需要凝练下我的知识体系,用一个月时间阅读了以下几本书:
- “Windows Sockets Network Porgramming”,中译名《Windows.Sockets网络编程.(Bob等).徐磊等》
虽然这本书英文版完成时间是在上个世纪九十年代,但书中对于Window Socket框架介绍还是比较值得学习和阅读的。
- “C++ Network Programming ”,中译名《C++网络编程》(ACE,第一卷、第二卷)
很早关注c++的时候,就有接触这本书,当时限于只对语言的学习,没有看。现在看来,这本书的内容基本上是围绕这ACE的整体框架和实现展开的,内容偏重于用户手册的性质,如果未接触ACE可能读下来有些难度。
- “Internetworking with TCP/IP”, 《用TCP/IP进行网际互联》(共三卷)
这本书据说是很多外国大学的网络入门教程,内容分为三卷:第一卷 原理协议与结构,第二卷 设计、实现与内核,第三卷:客户——服务器(Linux Posix 套接字版)。相对于《TCP-IP详解》这本书而言,我个人更倾向于阅读这本书。内容相对紧凑,容易理解。读完第一卷,可以对基于TCP/IP网际互连的原理有一个大致的理解,并基本上可以弄清楚各种网络设备的功能及职责,以及各类协议之间的交互。读完第二卷,基本可以弄清楚TCP/IP协议栈的基本实现,划分清楚各层的功能及内部细节,也会体会到协议分层的妙用。第三卷偏向应用层,主要介绍在linux下C/S模式的编程实践,高效编程框架以及各种应用、连接方式、响应方式的选择。
MSDN上的Windows Socket 2的介绍,虽然不适合新手直接阅读,但是依然是最值得推荐的内容,因为上面有很多未曾接触的细节及注意事项(比如IPv6、NLA、Secure WinSock、Reliable Multicast、高性能Socket编程实践等)。当然,也有本书《Windows网络编程 第二版》,10年前的,基本内容是介绍Win Sock 2的。
通过阅读上面基本上,我主要解答了下面几个问题:
1. 两台网络设备是如何互联的? (局域网、广域网)网络设备寻址方式
2. TCP/IP在系统层是如何向下和向上提供服务的?(我们可以认为TCP/IP协议栈是一种驱动程序)如何实现自定义的协议栈?
3. 交换机、路由器、网桥、集线器到底完成了什么功能?
4. IP包在路由器中是如何寻址的?
5. 组播IGMP的功能及路由器针对组播的状态维护。
6. 网络通信程序需要考虑哪些问题? 基于连接/无连接的,串行/并行,多进程/多线程/单线程并行,多协议/单协议。
网络编程内容相对固定,但是要学好、用好网络编程可能需要大量的实践和尝试,同时需要大量的知识储备,比如说你可能需要对操作系统的并发机制、多进程通信机制、互斥机制有所了解,你需要学习基于Berkeley Socket的API接口,还需要对实际应用的协议有所认识(经常看到的RFC XXXX)。
对我而言,关于TCP/IP协议及网络互联的基础知识基本够用,后续有兴趣的话可以深入学习下TCP拥塞控制、发送窗口、定时重传的机制,这也是TCP/IP协议栈最核心,最有意思的部分。当然也有其他基本经典网络编程书籍可以继续学习下。
就写到这里。其实最大的幸运是有人愿意领着你接触陌生的世界,让你看清前面的路。很庆幸我们能够生活在这个知识获取最便捷的时代,也感谢先贤们为此的付出。
-------------------------------------------------------------------
本文作者:Tocy
版权所有@2015,请勿用于商业用途,转载请注明原文地址。本人保留所有权利
----------------------------------------------------------------------------------------------------------------------------
本文作者:Tocy e-mail: zyvj@qq.com
版权所有@2015-2020,请勿用于商业用途,转载请注明原文地址。本人保留所有权利。