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协议集,简称 ...
随机推荐
- idea输入法候选区不跟随光标
环境: win10 idea 2017.04 搜狗8.6 问题: idea编辑区输入法候选区不跟随光标 解决: 输入法改成必应输入法 不行的话不用你动手 我自砸蛋蛋.(保命狗头..)
- leetcode44:wildcard
44. Wildcard Matching 问题描述 给定字符串s和模式p,判断字符串s是否完全符合模式p 其中字符串s只包含小写字母,模式串p包含小写字母.*.?,其中星号表示任意长度的任意字符串, ...
- 【经验总结】 fisheye 3.1.5 安装、破解全过程 图文教程(2.0以上版本均可成功!)
声明:此破解仅为个人娱乐,如果你有钱,请支持正版! 重要说明,只要把fisheye先关掉即可,然后执行下面的破解步骤,一样可以破解!本人已测试通过. 一.安装.破解fisheye最新版3.1.5 所需 ...
- vim缩进参考线
编辑缩进嵌套的文件时想找到对应的层级比较困难,写了一个函数,使用cc选项设定一条辅助线,标识到指定的缩进层级.代码如下: ? ReferenceLine 1 2 3 4 5 6 7 8 9 10 11 ...
- 原创工具binlog2sql:从MySQL binlog得到你要的SQL
从MySQL binlog得到你要的SQL.根据不同设置,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL ...
- 六款值得推荐的Android开源框架简介
技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...
- CheckStyle检查规则中文翻译
本文主要介绍CheckStyle 的各个规则配置项目,这个版本的CheckStyle将样式规则分为了以下十六种类型共138条规则: 官方文档地址:http://checkstyle.sourcefor ...
- log4j(三)——如何控制不同级别的日志信息的输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; //by godtrue p ...
- 【Linux】字符转换命令paste
这个 paste 就要比join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』而已!简单的使用方法: [root@w ...
- SimpleAdapter真不简单!
作为一名编程初学者,我总是认为自己什么都不会,什么都不行,就算实现了文档指定的功能,我永远都是觉得自己写过的代码实在是太烂了,它只是恰巧能够运行而已!它只是在运行的时候恰巧没有发现错误而已!!一直都是 ...