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,请勿用于商业用途,转载请注明原文地址。本人保留所有权利
2015-07学习总结——网络编程(TCP/IP)的更多相关文章
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- 网络编程TCP/IP详解
网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...
- 网络编程TCP/IP实现客户端与客户端聊天
一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 五十三 网络编程 TCP/IP简介
虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...
- Python中的socket网络编程(TCP/IP,UDP)讲解
在网络编程中的一个基本组件就是套接字(socket).套接字基本上是两个端点的程序之间的"信息通道".程序可能分布在不同的计算机上,通过套接字互相发送信息.套接字包括两个:服务器套 ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- UNIX网络编程——TCP/IP简介
一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi ...
- 18 网络编程-TCP/IP各层介绍(5层模型讲解)
1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...
- Java网络编程のTCP/IP
TCP/IP参考模型和TCP/IP协议 与OSI参考模型相似,TCP/IP参考模型汲取了网络分层的思想,而且对网络的层次做了简化,并在网络各层都提供了完善的协议,这些协议构成了TCP/IP协议集,简称 ...
随机推荐
- CocoaAsyncSocket UDP发送数据超过包大小限制(Message too long)
最近在做iOS上,基于UDP传输音视频时遇到的一个问题,这边纪录一下: 由于考虑实时性比较高,所以采用了 CocoaAsyncSocket 的UDP框架来实现,将视频切割成一帧帧的图片发给服务端,不过 ...
- Linux查看GPU使用情况
watch -n 10 nvidia-smi 一.watch watch命令用来定时执行某个程序 二.nvidia-smi nvdia-smi是英伟达自带的GPU监控命令.
- ruby的json请求
require 'net/http'require 'uri'require 'json' customers = [{ "id" => 1123, " ...
- Entity Framework之深入分析
EF虽然是一个晚生畸形的ORM框架,但功能强大又具有灵活性的,给了开发人员一定的发挥空间.因为微软出发点总是好的,让开发变得简单,但实际上不是所有的事情都这么理想.这里顺便推荐马丁大叔的书<企业 ...
- 【javascript】escape()、encodeURI()、encodeURIComponent()区别详解
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...
- rsync的基本使用
1,本地同步文件: rsync -avz --delete /home/ /backups/ 注意:在指定复制源时,路径是否有最后的 “/” 有不同的含义,例如: /home: 表示将整个 /home ...
- Android上面通过URL来启动本地应用
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" ...
- 使用Object#tap使代码更优雅
今天看spree源码的时候经常看到Object#tap方法.以前只知道有这个方法,而且感觉这个方法调试的作用大于实际,今日看来以前的理解应该不够准确. 先看下官方文档上tap的例子 Yields se ...
- SharePoint利用HttpModule的Init方法实现全局初始化
接上篇 我们知道,HttpRuntime中会对每一个Request创建一个HttpApplication对象(HttpApplicationFactory从一个HttpApplication池来拿). ...
- CentOS 7安装Redis4.0.10
cd /usr/local/src && wget http://download.redis.io/releases/redis-4.0.10.tar.gz && t ...