之前学习的主要内容是单机上的处理,比如编程语言、游戏编程、数据库、多媒体编解码。其实对网络也有些接触,比如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)的更多相关文章

  1. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  2. 网络编程TCP/IP详解

    网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...

  3. 网络编程TCP/IP实现客户端与客户端聊天

    一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...

  4. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  5. 五十三 网络编程 TCP/IP简介

    虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...

  6. Python中的socket网络编程(TCP/IP,UDP)讲解

    在网络编程中的一个基本组件就是套接字(socket).套接字基本上是两个端点的程序之间的"信息通道".程序可能分布在不同的计算机上,通过套接字互相发送信息.套接字包括两个:服务器套 ...

  7. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

  8. UNIX网络编程——TCP/IP简介

    一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi ...

  9. 18 网络编程-TCP/IP各层介绍(5层模型讲解)

    1.TCP/IP五层协议讲解 物理层--数据链路层--网络层--传输层--应用层 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就 ...

  10. Java网络编程のTCP/IP

    TCP/IP参考模型和TCP/IP协议 与OSI参考模型相似,TCP/IP参考模型汲取了网络分层的思想,而且对网络的层次做了简化,并在网络各层都提供了完善的协议,这些协议构成了TCP/IP协议集,简称 ...

随机推荐

  1. 关于easyui的问答(来自百度问答)

    求教大神,jquery easyui中$('#table').datagrid('options').queryParams是什么意思 https://zhidao.baidu.com/questio ...

  2. 【Android】如何获取本机号码、IMSI、EMSI

    获取本机号码: 获取本机号码,需要在配置文件中加入权限: <uses-permission android:name="android.permission.READ_PHONE_ST ...

  3. Digital Color Meter 颜色值提取工具

    1.Digital Color Meter 简介 Digital Color Meter 是一款 Mac 自带的颜色值提取工具. 其它下载地址 Digital Color Meter for Mac, ...

  4. 我所经历的企业中IT部门在企业内部的地位

    本月参加了一个ITIL的培训,从培训中了解很多关于企业信息化及系统业务运维的知识和方法论.通过这次培训并结合自己近6年的IT 工作经历,明白了以前很多不明白的道理. 先说说自己经历的几家公司吧,我属于 ...

  5. mysql常用查询语句

    一.查询指定schema下表的个数 select count(TABLE_NAME) from information_schema.tables where table_schema="d ...

  6. 为什么说,长跑和爬山能锻炼意志?因为要不停的run,run,run......

    长跑和爬山教会我们的是无论做什么都要坚持,教会我们的是生活的态度. 如果不能体会到这一点,那你长跑的意义就是纯粹的锻炼身体. 中国教育的最大败笔就是教会了人学习,却没教会人思考.

  7. mysql FullText全文索引的问题

    今天有同学问题,搜索ip的时候怎样能把 select ip from tabelx where ip like '%192.168.0.1%' 这种句子的性能优化. 的确,使用 like %x 的方式 ...

  8. centos7 中搭建gitlab

    1.在virtual box中新建一个虚拟机 2.gitlab ce(community版本)地址:https://about.gitlab.com/installation/#centos-7?ve ...

  9. jQuery学习笔记(简介,选择器)

    jQuery优势 1. 强大的选择器.jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器. 2. 出色的DOM操作封装 3. 可靠的事件处理机制 ...

  10. 《Java Concurrency》读书笔记,Java并发编程实践基础

    1. 基本概念 程序,是一组有序的静态指令,是一种静态的概念.程序的封闭性是指程序一旦运行,其结果就只取决于程序本身:程序的再现性是指当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同 ...