今天学习Windows的网络编程技术,网络是计算机通信的核心,而且,现在的网络系统也是相当的复杂,不但要考虑起基本的通信功能,还要实现数据的安全传输,更要抵御各型各样的网络攻击,所以在网络编程技术上,要尽量多的去学习计算机网络,通信原理,网络安全,安全编程等多方面的知识,而不能紧紧是停留在会用winsock API写几行简单代码实现通信功能的层面上,因为现在的网络编程接口对网络通信达的细节进行了全面的封装,这种方式使初学者能在短时间内做出比较像样的项目,但是对于深入学习就必须了解并且熟知计算机通信的原理和各种重要的网络协议,否则会发现你写的程序会存在很大的安全隐患,很容易被黑客攻击。
计算机网络体系结构的划分:最开始确定的是OSI七层协议体系结构,由物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。但是这种划分方式显然过于复杂,于是出现了TCP/IP体系结构,它分为网络接口层,网际层,传输层,应用层。现在多数的教育机构为了平衡这两种,把计算机网络体系的划分为五层结构:物理层,数据链路层,网络层,传输层,应用层。尽管他们划分层次各不相同,但其实实质都是一样的,或许在以后的发展中,会提出对计算机网络新的理解,自然也会出现完全不同的体系结构,所以在学习的时候不可拘泥于这些表面上的划分,更多的应该是深入理解计算机是如何一步步实现网络通信的。但是今天既然学习的是基于五层体系结构的计算机网络,自然要把所学到的写出来。
物理层要解决的问题是:如何才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体【参考计算机网络---谢希仁第五版】。对于这句话可以简单这样理解:我们知道,计算机能够识别的数据只有二进制的0和1,一位二进制称为一个比特,所谓比特流就是一连串的0或者1.物理层将上层交下来的数据(即帧)看作比特流,作为最底层的物理层就是要考虑如何将这些数据比特流通过各种传输媒体(如双绞线,光纤,同轴电缆和无线)从源计算机传输到目的计算机上,从而实现数据的无区别传输(即对于不同的传输媒体,数据都可以进行传输,在上层看来,即数据的传输是无区别的)。为了解决这个问题,人们提出了很多有关的技术手段,如信道复用技术,宽带接入技术等。这其中涉及到许许多多的电子知识,本人水平有限,暂时并未完全明白其中的技术原理,有时间需要跟别人请教一下的。
数据链路层: 我们知道,一条能够正确传输数据的数据链路不仅需要看得见摸得着的物理线路,它还需要一些必要的通信协议来控制这些数据的传输。现在常用的方法是使用网络适配器(可以理解为我们常用的网卡)来提供这些协议所需要的硬件和软件实现,每一个网络适配器都有不同的物理地址(MAC),计算机就是通过MAC来确定一个数据报的源计算机和目的计算机的。数据链路层的信道分为两种:点对点通信(只有一个目的计算机)和广播通信(多个目的计算机)。首先需要了解一个在数据链路层非常有名的点对点协议:PPP(Point-to-Point Protocol点到点协议)。PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。设计目的主要是用来通过拨号
或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。至于帧的具体格式这里不讲了(很容易查到的),总结来说,PPP协议有三部分组成:一个将IP数据报封装到串行链路的方法,一个用来建立、配置、和测试数据链路连接的链路控制协议LCP(参考RFC 1661),一套网络控制协议NCP。目的是实现各种主机、网桥和路由器之间的连接。 另外了解一下CSMA/CD协议和MAC帧协议也是非常重要的,在这里就不多介绍了。
网络层:个人理解,网络层主要是为了给计算机设定一个虚拟地址,即所谓的IP,以便方便的确定源主机和目的主机,虽然MAC也能唯一的确定一台计算机,但是MAC地址复杂,最重要的是MAC地址是随着网卡厂商绑定在网卡ROM内部,修改起来不方便,而且网卡厂商众多,很难有一个统一的规则,如果在全球范围内直接使用MAC来进行通信势必会导致管理不便,交流受阻。相比之下,IP灵活的动态分配,方便的统一管理等有点便显现出来了。涉及到网络层的一些技术,虽然看了有好几天的书,但是想完全了解是非常困难的。而且不断有新技术的出现,例如近几年来非常火爆的‘’云计算’‘,其实云计算技术早在80年代就有人提出来了,只是当时这个概念没有被广泛认可。网络层有些常识是大家都必须要懂的:各种协议(网际层IP协议,控制报文协议ICMP,路由选择协议 ,地址解析协议ARP和RARP),以及IP的分类,ip地址危机的解决办法,和逐渐普及的IPV6技术
传输层:网络层通过IP实现了主机之间的通信,但是最终我们想要实现的计算机上的应用程序之间的通信,如QQ,传输层通过端口将消息传递给特定的应用程序。所以,传输层其实就是为应用程序提供端到端的通信。当然,传输层还提供了差错检测,可靠传输,流量控制等非常重要的功能。主要涉及到面向无连接的UDP和面向连接的TCP协议。
应用层:前面的各种协议为应用程序提供足够多的通信服务,但是应用程序种类繁多,所实现的功能也各不相同。应用层所要解决的就是为各种应用程序提供一种方案使其合理的使用这些网络服务来完成自己的功能。
我用这段时间简单的看了计算机网络知识,因此,写这篇文章也花了很长一段时间。现在虽然对计算机网络通信原理有了一定的理解,但肯定是还远远不够的。特别是对于网络新技术这方面,更需要努力钻研。