VC内部培训资料第10章网络编程.docx
《VC内部培训资料第10章网络编程.docx》由会员分享,可在线阅读,更多相关《VC内部培训资料第10章网络编程.docx(48页珍藏版)》请在冰豆网上搜索。
VC内部培训资料第10章网络编程
第10章网络编程
近年来,因特网发展迅速,越来越多的应用程序能够通过网络(包括因特网)与其他应用程序进行通信。
应用程序可具备各种各样的网络功能,如我们所熟识的聊天程序、收发电子邮件程序、远程多媒体教学等等,无论是实现何种网络功能,它们都使用同样的原则来执行通信,并且都围绕着Winsock接口来建立。
本章将介绍关于网络的一些基本知识、TCP/IP协议、Winsock等概念,以及如何通过Winsock接口在两个或多个计算机之间进行网络通信。
10.1计算机网络的基本概念
在讲述如何编写网络程序之前,读者有必要了解一些网络的基本概念。
这对于深入学习Internet网络编程是非常有益的。
本节主要介绍计算机网络的分类及网络拓扑结构。
10.1.1计算机网络的分类
计算机网络有多种分类方法,但主要依据以下两点来对网络进行分类:
●根据网络所使用的传输技术
●根据网络的覆盖范围与规模
1.根据网络传输技术进行分类
网络所采用的传输技术决定了网络的主要技术特点,因此根据网络所采用的传输技术对网络进行分类是一种很重要的方法。
在通信技术中,通信信道的类型有两类
1)广播通信信道
2)点—点通信信道
在广播通信信道中,多个结点共享一个通信信道,一个结点广播信息,其他结点都可以接收到信息;而在点—点通信信道中,一条通信线路只能连接一对结点,如果两个结点之间没有直接连接的线路,那么它们只能通过中间结点转接。
显然,网络要通过通信信道完成数据传输有两种方式:
广播(Broadcast)方式和点—点(Point-to-Point)方式,因此,相应的计算机网络也可分成两类:
1)广播式网络(BroadcastNetworks)
2)点—点式网络(Point-to-PointNetworks)
在广播式网络中,所有连网计算机都共享一个公共通信信道。
当一台计算机利用共享通信信道发送数据包时,所有其他的计算机都会“接收”到这个数据包。
由于发送的分组数据包中带有目的地址与源地址,接收到该数据包的计算机将检查目的地址是否和自己的地址一致,如果与自己的地址一致,则接收该数据包,否则将其丢掉。
在广播式网络中,发送的数据包的目的地址有三类:
单一物理地址、多站地址和广播地址。
与广播式网络相反,在点—点式网络中,每条物理线路连接一对计算机。
假如两台计算机之间没有直接连接的线路,那么它们之间的数据传输就要通过中间结点接受、存储和转发。
由于连接多台计算机之间的线路结构可能是复杂的,因此从源结点到目的结点可能存在多条路由。
决定数据从通信子网的源结点到达目的结点的路由需要有路由选择算法。
采用数据存储转发与路由选择是点—点式网络和广播式网络的重要区别之一。
2.根据网络的覆盖范围进行分类
按照计算机网络覆盖的范围进行分类,可以很好地反映不同类型网络的技术特征,由于网络覆盖的地理范围不同,它们所采用的传输技术也不同,因而形成了不同的网络技术特点与网络服务功能。
按照覆盖的地理范围不同,计算机网络可以分为三类:
1)局域网LAN(LocalAreaNetword)
局域网用于将有限范围内(如一个教研室、一栋大楼、一个校园)的各种计算机、终端与外部设备进行互联。
局域网按照采用的技术、应用范围和协议标准的不同可以分为共享式局域网和交换式局域网。
2)城域网MAN(MetropolitanAreaNetword)
城市地区网络统称为城域网。
城域网是介于广域网与局域网之间的一种高速网络。
城域网设计的目标是要满足几十公里范围内的大量企业、机关、公司的多个局域网互联的需求,以实现各企业用户及其客户之间的数据、语音、图形与视频等多种信息的传输。
3)广域网WAN(WideAreaNetwork)
广域网也称为远程网。
它所覆盖的地理范围从几十公里到几千公里。
广域网覆盖一个国家、地区,甚至横跨几个洲、整个地球,形成国际性的远程网络。
广域网的通信子网主要使用分组交换技术。
广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的计算机系统互联起来,以达到资源共享的目的。
10.1.2网络拓扑结构
计算机局域网络设计的第一步,就是要解决在给定计算机的位置及保证一定的网络响应时间、吞吐量和可靠性的条件下,通过选择适当的线路、线路容量、连接方式,使整个网络的结构合理。
为了应付复杂的网络结构设计,人们引入了网络拓扑的概念。
拓扑学是几何学的一个分支,它是从图形论演变过来的。
拓扑学首先把实体抽象成与其大小、形状无关的点,将连接实体的线路抽象成线,进而研究点、线、面之间的关系。
计算机网络拓扑是通过网中结点与通信线路之间的几何关系表示网络结构,反映出网中总各实体之间的结构关系。
拓扑设计是计算机网络建设的第一步,也是实现各种网络协议的基础,它对网络性能、系统可靠性与通信费用都有重大的影响。
计算机网络拓扑主要是指通信子网的拓扑结构。
网络拓扑结构主要有星形、总线型、环形等几种方式
1.星形网络结构
星形结构主要是由中央结点和连接到中央结点的各结点组成,如图10-00所示。
结点通过点—点通信线路与中心结点连接。
中心结点控制全网的通信,任何两结点之间的通信都要通过中央结点。
图10-00星形网络结构
星形结构连接方式比较简单,因此,当网络中连接点出现故障时,只会影响到相应的连接点而不会秧及整个网络,同时便于故障的检测和维修,它所使用的访问协议也比较简单。
由于星形网络的结构特性,使得中央结点比较复杂,每扩展一个结点都要增加中央结点的负担;另外,由于其他结点之间的访问都要通过中央结点,因此,可以想象如果中央结点出了故障很有可能导致整个网络的瘫痪。
2.总线型网络结构
总线型网络结构是由一条总的通信信道及连接在信道上的结点构成,如图10-01所示。
信道中的每一个结点都有唯一的标识号或地址,这样就可以确定网络中信息的来源了。
总线通常采用同轴电缆或双绞线作为传输介质,所有结点都可以通过总线传输介质发送或接收数据,但一段时间内只允许一个结点利用总线发送数据。
在总线结构中,一个结点发出的信息能被所有的结点接收到。
当某一结点发送信息时,该结点先将数据分组,然后按顺序发送这些被分成组的数据,当这些数据经过各个站点时,各站点都将检测数据中的地址,查看是否和自己的地址一致,从而决定是否接收该数据。
图10-01总线型网络结构
由于这种结构是建立在一个公用的信息通道上,因此,在安装和扩展上容易些。
虽然它简单可靠,但是故障检测却不容易,因为这种结构的网不是集中控制的,因此,检测时需要在各个结点进行,并且在对某个结点进行隔离时也要把整个网络停止下来。
另外,由于总线作为公共传输介质为多个结点共享,因此有可能出现同一时刻有两个或多个结点同时发送数据的情况,很有可能出现“冲突”,造成传输失败。
3.环形网络结构
环形网络是由一些中继器(环接口)和连接设备的通信信道组成的一个环形网络,如图10-02所示。
中继器可以接收一条通信信道上的数据,同时也可以用相同的速度把数据用串行通信的形式发送到另一条通信信道上去。
数据在中继器中不缓存,传输时为单向。
图10-02环形网络结构
图中的环接口就是中继器。
环形结构最广泛的应用就是令牌环网。
所谓令牌环就是一种特殊的控制帧,也就是一种控制信息。
一个环有且只有一个令牌。
令牌不断在网中进行循环,某个结点一旦抓住了令牌,便可进入传输方式,发送数据,这时,其他结点只能进入接收方式。
10.2网络体系结构和网络协议
10.2.1ISO/OSI参考模型
国际标准化组织ISO发布的最著名ISO/OSI(InternationalStandardOrgnization/OpenSystemInterconnection)模型,简称OSI模型,如图10-03所示。
该模型定义了网络互联的七层框架,即ISO开发系统互联模型。
图10-03OSI参考模型
当数据通过OSI模型的不同层时,传送的数据格式有不同的名称,各层的数据名称如表10-00所示。
表10-00各层传输的数据名称
OSI模型中的层
数据名称
应用层
报文(message)
表示层
数据包(datagram)
会话层
数据包(datagram)
传输层
数据包及数据段(datagram/datasegament)
网络层
数据包(datagram)
数据链路层
帧(frame)
物理层
位(bit)
下面详细说明OSI模型各层的主要功能:
1.物理层
OSI模型的最低层就是物理层。
物理层的主要功能是为数据链路层提供物理连接,通过网络介质传输比特位。
物理层负责保证数据在目标设备以与源设备发送时相同的方式进行读取。
2.数据链路层
数据链路层的主要任务是提供一种可靠的通过物理介质传输数据的方法。
在物理层提供比特流传输服务的基础上,在通信的实体之间建立数据链路连接,这一层将传输的数据转换成帧,然后按顺序传输帧,并处理接收端发回的确认收到的帧。
数据链路层为其所创建的帧添加了一个报头和报尾,这些报头和报尾允许目标设备查看帧在物理介质上开始传输和结束传输的时间。
数据链路层采用差错控制、流量控制的方法,使有差错的物理线路变成无差错的数据链路。
数据链路层被分为两个子层:
介质访问控制(MediaAccessControl,MAC)子层和逻辑链路控制(LogicLinkControl,LLC)子层。
介质访问控制子层负责物理寻址和对网络介质的物理访问。
每次只能有一台设备可以在任一类型的介质上传输数据。
如果多台设备试图同时传输数据,它们将会互相扰乱对方的信号。
逻辑链路控制子层负责建立和维护网络设备之间的数据链路连接,以及在本层中的流量控制和错误纠错。
3.网络层
网络层的主要任务是通过一定的路由算法,为报文通过通信子网选择最适当的路径。
网络层从源主机那里接收报文,将报文转换成数据包,并确保这些数据包直接发往目标设备。
如果发送的目标设备在另一个网络中,网络层必须决定数据包将发往至何处,并给出一条最佳路径。
另外,如果网络中同时存在太多的数据包,它们会互相争抢通路形成瓶颈,但网络层可控制这样的阻塞。
网络层中的设备间的连接被看作是无连接,在该层不进行连接的建立和维护。
传送的任何数据都被视为应尽的义务。
如果数据没有到达目的地或由于其他什么原因被破坏了,请求重发数据是目标设备的事情。
总之,网络层在分层体系结构中占有非常重要的地位,它主要实现的功能概括来说就是负责路由选择、阻塞控制及网络互联等功能。
4.传输层
传输层的主要任务是向用户提供可靠的端到端服务,透明的传送报文,它向高层屏蔽了下层数据通信的细节。
传输层提供会话层和网络层之间的传输服务。
这种服务从会话层取得数据,并在必要时对数据进行分割。
然后,传输层将信息传递到网络层,并检验以确保信息成功到达目标设备。
传输层是真正的从源到目的地层。
这意味着源设备上的一个程序可通过报文标题和控制报文,继续与目标设备上的另一个程序进行对话,这些报文标题和控制报文用于错误检测、排序和流量控制。
与网络层不同,传输层的连接服务被视为是面向连接的。
通过这一层传递的数据将由目标设备确认。
如果在指定的超时时间内没有收到确认信息,数据将被重新发送。
5.会话层
会话层的主要任务是组织两个会话进程之间的通信,并管理数据的交换。
这一层允许用户在设备之间建立一种连接,即会话(session)。
一旦连接建立起来,会话层可以管理会话,可以按照如下方式建立会话:
●半双工(half-duplex):
一种双向切换的通信方法(每次只能一个方向传输),例如无线对讲机。
●单工(simplex):
一种简单的单向通信方法。
不允许进行双向通信,例如收音机。
●全双工(full-duplex):
允许完全的、双向同进连接。
任何设备均可以随意进行传送或接收,例如现代的电话。
6.表示层
表示层主要用于处理在两个通信系统中交换信息的表示方式,它包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
我们知道,在计算机内部,并没有像字母和标点符号这样的东西,它们全都被表示为数字形式。
由于计算机只能识别数字,因此,需要一种方法将字母与某种数字相对应。
例如,字母A用十进制65来表示,换算成二进制数为01000001。
计算机读取那些由1和0组成的字符串时,是从左到右读还是从右到左读?
不同的制造商对此有不同的做法。
表示层要照顾到按正确顺序发送数据的工作。
如果目标设备没有收到正确顺序的信息,数据将严重错乱。
7.应用层
应用层是OSI模型中的最高层。
应用层确定进程之间通信的性质,以满足用户的需要。
应用层不仅要提供应用程序所需要的信息交换和远程操作,而且还要作为应用进程的用户代理,来完成一些为进行信息交换所必须的功能。
这一层是用户的应用程序和网络之间的接口。
本层允许用户看见应用程序传输文件、发送电子邮件和需要在网络上进行的其他任何事情。
OSI参考模型是一种开放的网络模型,每一层都有自己严格的定义,每一层使用下层提供的服务,并向上层提供服务,并且各层之间的接口都必须符合规范。
10.2.2TCP/IP参考模型
OSI参考模型研究的初衷是希望为网络体系结构与协议的发展提供一种国际标准。
但是,我们不能不看到Internet在全世界的飞速发展及TCP/IP协议广泛应用对网络技术发展的影响。
ARPANET是最早出现的计算机网络之一,现代计算机网络的很多概念与方法都是在ARPANET基础上发展起来的。
最初ARPANET使用的是租用线路,当卫星通信系统与通信网发展起来之后,ARPANET最初开发的网络协议使用在通信可靠性较差的通信子网中出现了不少问题,这就导致了新的网络协议TCP/IP的出现。
虽然TCP协议、IP协议都不是OSI标准,但它们是目前最流行的商业化的协议。
在TCP/IP协议出现以后,出现了TCP/IP参考模型。
TCP/IP参考模型具有四层框架,如图10-04所示
图10-04TCP/IP参考模型
1.链路层
TCP/IP参考模型中的链路层与OSI参考模型中的数据链路层及物理层相对应,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节,并负责通过网络发送或接收IP数据包。
链路层是TCP/IP的实现基础,包括各种物理网协议,如局域网Ethernet、TokenRing、TokenBus,X2.5分组交换网等等。
2.网络层
TCP/IP参考模型中的网络层与OSI参考模型中的网络层相对应,有时也称为互联层,处理分组在网络中的活动,例如分组的路由选择。
该层的功能主要体现在如下几个方面:
1)处理来自传输层的分组发送请求。
在收到分组发送请求之后,将分组装入IP数据包,填充包头,选择最佳发送路径,然后将数据包发送到相应的网络输出线。
2)处理接收到的数据包
在接收到其他主机发送的数据包之后,检查目的地址,如目的地址为本结点IP地址,则去掉包头,将分组发送给传输层处理;如需要转发,则选择转发路径,将其转发出去。
3)处理互联的路径、流量控制与阻塞问题。
网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议),关于协议内容将在下一小节有详细介绍。
3.传输层
TCP/IP参考模型中的传输层与OSI参考模型中的传输层相对应。
传输层主要为两台主机上的应用进程之间提供端到端的通信。
TCP/IP参考模型中设计传输层的主要目的是在互联网中源主机与目的主机的对等实体之间建立用于会话的端到端的连接。
从这一点上讲,TCP/IP参考模型中的传输层与OSI模型中的传输层功能是相似的。
在TCP/IP参考模型中的传输层中,有两个互不相同的传输协议:
TCP协议(传输控制协议,TransportControlProtocol)和UDP协议(用户数据报协议,UserDatagramProtocol)。
关于协议内容将在下一小节有详细介绍。
4.应用层
TCP/IP参考模型中的应用层与OSI参考模型中的应用层相对应。
应用层负责处理特定的应用程序细节。
应用层包括很多高层协议,并且总是不断有新的协议加入。
应用层协议主要有FTP、SMTP、TELNET、HTTP、DNS、TFTP等等,关于具体的协议内容将在下一小节有详细介绍。
10.2.3TCP/IP协议
TCP/IP协议是当今最成熟、应用最广泛的互联网技术,拥有一整套总体结构和协议标准。
按照TCP/IP协议而建立的Internet已经成为当今社会最大的信息网络,它覆盖范围之广是以往任何网络技术所无法比拟的。
TCP/IP不仅用于互联网,同时也可用于各种广域网、城域网和局域网。
TCP/IP从名字来看,很容易让人误解为只包含两种协议(TCP协议、IP协议)。
但实际上它是一个协议栈,是一堆协议,这些协议是分层次的,分别对应着TCP/IP参考模型的四个层次,就像我们在上一小节中看到的。
本节我们就将介绍TCP/IP协议,即TCP/IP参考模型的四个层次上的各种协议。
10.2.3.1协议概述
协议是通信双方的约定。
协议对于计算机通信来说,好比程序设计语言之计算。
程序设计语言有底层的汇编语言和高层的高级语言,协议也有高低层次之分。
有的协议直接描述物理网络上的通信,如以太网协议;有的协议描述较复杂较抽象的功能,如TCP/IP协议。
在复杂的通信系统中,协议是分层次的,各层协议互相协作,构成了一个整体,叫协议栈或协议族,后面对这些协议会有一个详细的介绍。
图10-05TCP/IP协议层次结构
10.2.3.2TCP/IP协议层次结构及各种协议介绍
前面介绍了TCP/IP参考模型的四个层次,那么,我们就按照四层体系结构来讲解每一层上的协议,如图10-05所示。
1.TCP/IP参考模型中网络层上的协议
1)IP
网间协议(InternetProtocol)负责主机间数据的路由和网络上数据的存储。
同时为ICMP,TCP,UDP提供分组发送服务。
用户进程通常不需要涉及这一层。
Internet的核心层是网络层和传输层,相应的核心协议是IP和TCP两大协议。
IP协议横跨整个层次,同时被UDP和TCP使用。
TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
IP协议的主要功能包括无连接数据报发送、数据报寻径以及差错处理。
2)ICMP
Internet互联网控制报文协议(InternetControlMessageProtocol),IP协议的附属协议,此协议处理信关和主机的差错和传送控制。
在网络上传递IP数据包时,如果发生了错误,那么就会用ICMP协议来报告错误。
ICMP报文使用IP数据报进行传送,这些报文通常由TCP/IP网络软件本身来保证正确性。
3)IGMP
Internet组管理协议(InternetGroupManagementProtocol),IGMP协议运行在主机和与它们直接邻接的路由器之间,它用来维护路由器中的组员数据。
IGMP协议使用IP地址规范中的D类地址(首位为224~239)作为多点广播地址,从中分配一个IP地址给参与网络会议的各计算机,发送数据时以该地址作为目标地址,则数据只需发送一次就可以到达多台主机。
从架构上来说虽然ICMP协议和IGMP协议都是IP协议的附属协议,但是从网络7层结构上讲ICMP、IGMP协议与IP协议同属一层。
4)ARP和RARP
●ARP:
地址解析协议(AddressResolutionProtocol),此协议将网络地址映射到硬件地址。
●RARP:
反向地址解析协议(ReverseAddressResolutionProtocol),此协议将硬件地址映射到网络地址。
严格点说,地址解析协议ARP/PARP并不属于单独的一层,它介于物理地址和IP地址之间,起着屏蔽物理地址细节的作用。
IP可以建立在ARP/PARP上,也可以直接建立在网络硬件接口协议上。
2.TCP/IP参考模型中传输层上的协议
TCP/IP传输层有两个并列的协议:
TCP和UDP,如下:
1)TCP
传输控制协议(TransmissionControlProtocol),这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。
TCP提供两台计算机之间的可靠无错的数据传输。
应用程序利用TCP进行通信时,源主机和目的主机之间会建立一个虚拟连接,这个连接一旦建立,两台计算机之间就可以把数据当作一个双向字节流进行交换;如果连接建立不成功,则不会发送数据。
另外,面向连接传输的每一个报文都需要接收端确认,未确认报文被认为是出错的报文。
所谓流,就是一个无报文丢失、重复和失序的正确的数据序列。
流相当于一个管道,从一端放入什么,从另一端可以照样取出什么。
传输层协议为实现流传输,付出了大量开销。
2)UDP
用户数据报协议(UserDatagramProtocol),这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。
在通信过程中,UDP不保障可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。
简单地说,如果一个客户机向服务器发送数据,这一数据会立即发出,不管服务器是否已准备接收数据。
如果服务器收到了客户机的数据,它不会确认收到与否。
数据传输方法采用的是数据报。
一般情况下,TCP和UDP协议共存于一个Internet中,二者是同等地位,前者提供可靠服务,后者提供高效率服务。
如果传输文件小,并且要求很高的速度,可以考虑使用UDP协议;如果对传输质量要很高,并物理网络的可靠性很差,那最好使用TCP协议;而根据用户需要,也可以在同一个应用程序中一起用到这两个协议。
3.TCP/IP参考模型中应用层上的协议
1)FTP
文件传输协议(FileTransferProtocol),是Internet上用来传送文件的协议,允许用户以交互式文件操作的方式与另一主机相互通信。
FTP协议是由支持Internet文件传输的各种规则所组成的集合,这些规则使Internet用户可以把文件从一个主机拷贝到另一个主机上,通过FTP,因特网上的用户可以很方便地把文件从服务器传输到本机中,即我们常说的下载,也可以把本机文件传输到服务器上,即我们常说的上传。
和其他Internet应用一样,FTP也是依赖于客户程序/服务器关系的概念。
在Internet上有一些网站,它们依照FTP协议提供服务,让网友们进行文件的存取,这些网站就是FTP服务器。
网上的用户要连上FTP服务器,就要用到FPT的客户端软件,通常Windows都有“ftp”命令,这实际就是一个命令行的FTP客户程序,另外常用的FTP客户程序还有CuteFTP、Ws_FTP、FTPExplorer等。
2)SMTP
简单邮件传输协议(SimpleMailTransferProtocol),SMTP协议为系统之间传送电子邮件。
它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,我们就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件。
3)TELNET
网络终端协议(TelnetTermin