《TCP IP协议与网络编程》课件第6章 网络程序设计基本知识.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《TCP IP协议与网络编程》课件第6章 网络程序设计基本知识.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP IP协议与网络编程 TCP IP协议与网络编程课件第6章 网络程序设计基本知识 TCP IP 协议 网络 编程 课件 网络程序设计 基本知识
- 资源描述:
-
1、第第6章章 网络程序设计基本知识网络程序设计基本知识 第第6章章 网络程序设计基本知识网络程序设计基本知识 6.1 6.1 网络应用程序的概念网络应用程序的概念6.2 TCP/IP6.2 TCP/IP应用程序工作模型与网络编程接口应用程序工作模型与网络编程接口6.3 6.3 套接口的概念及其编程原理套接口的概念及其编程原理6.4 Winsock API6.4 Winsock API基本函数基本函数套接口与连接的建立套接口与连接的建立6.5 Winsock API6.5 Winsock API基本函数基本函数数据传输数据传输6.6 Winsock API6.6 Winsock API基本函数基本
2、函数连接与套接口的关闭连接与套接口的关闭习题习题第第6章章 网络程序设计基本知识网络程序设计基本知识 6.1 网络应用程序的概念网络应用程序的概念6.1.1 什么是网络应用程序我们设计的应用程序可以简单地分为两种:一种程序不需要使用其他程序产生的数据并且其他程序也不使用它输出的数据;另一种程序需要与其他的应用程序进行数据交换才能完成其功能,也就是说程序之间存在通信问题。进程间通信的问题也可以分为两种:一种是在操作系统中论述的单机系统中进程间的通信问题,另一种一般是在不同系统的进程间通过网络通信协议进行的进程间的通信问题。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.1.2 网络应用
3、程序的标识问题同一系统中不同进程间进行通信时,通过系统分配的进程号(Process ID)就可以惟一标识一个进程。也就是说,要通信的进程只要知道对方的进程号就可以进行通信。而网络情况下进程间的通信问题就要复杂得多,不能只简单地用进程号来标识不同的进程,因为各主机都独立地分配其进程号。为了惟一地标识网络中通信的一个进程(即通信的某一方),就要使用一个如下的三元组:(本地协议,本地IP地址,本地端口号)第第6章章 网络程序设计基本知识网络程序设计基本知识 这样一个三元组由于它只指定了通信时一条连接的半个部分,即通信的一方,因而称为半相关(Half-association)。如果要完整地表示网络中进
4、行通信的两个进程,那么就要使用一个如下结构的六元组:(本地协议,本地地址,本地端口号,远地协议,远地地址,远地端口号)在互联网中通信的两台主机在网络层都只能使用IP协议,但在网络层之上可以选择使用TCP协议或UDP协议,这样就可能得到以下4种类型的相关六元组:(本地TCP协议,本地IP地址,本地端口号,远程TCP协议,远程IP地址,远程端口号);第第6章章 网络程序设计基本知识网络程序设计基本知识 (本地UDP协议,本地IP地址,本地端口号,远程UDP协议,远程IP地址,远程端口号);(本地TCP协议,本地IP地址,本地端口号,远程UDP协议,远程IP地址,远程端口号);(本地UDP协议,本地
5、IP地址,本地端口号,远程TCP协议,远程IP地址,远程端口号)。如果通信的两端使用不同的协议(后两类六元组),根据前面我们所学的知识,由于TCP协议和UDP协议使用的协议格式大不相同,通信时双方在传输层不能相互识别对方送来的数据,也就不可能进行正常的通信,因此后两种情况是不存在的。第第6章章 网络程序设计基本知识网络程序设计基本知识 换句话说,通信的两个进程在端到端的传输层只能使用相同的协议,因此一个完整的网间通信就可以简化为用一个五元组来标识通信的两个进程:(协议,本地IP地址,本地端口号,远程IP地址,远程端口号)6.1.3 客户/服务器模型 1客户/服务器模型的特点客户/服务器模型的通
6、信方式从所具有的资源角度来说,有明显的非对称性。服务器拥有较多的资源,它具有运算能力强,数据存储容量大,通信速度快,系统的可靠性高等优点。相对来说,客户则拥有较少的资源,它在各方面的性能一般要比服务器差。第第6章章 网络程序设计基本知识网络程序设计基本知识 客户/服务器模型在工作时,要求有一套客户机和服务器能共同识别的规则或约定,用来保证服务器方可以识别客户提出的请求是什么,客户方也能够解释收到的服务器应答。从本质上来说,这其实就是服务器方和客户方在通信中所使用的一套协议,它必须在通信的两端都被实现。根据实际情况,协议可能是对称的也可能是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在
7、非对称协议中,一方被不可改变地认为是主机(服务器),而另一方则是从机(客户机)。第第6章章 网络程序设计基本知识网络程序设计基本知识 2服务器的分类根据服务器提供服务方式的不同,服务器可以分为串行服务器和并发服务器。串行服务器只有一个进程用串行的方式对客户的请求提供服务;并发服务器可以为请求的每一个客户创建一个进程或线程,然后由对应的进程或线程给每一个客户提供服务。并发服务器又可以分为预先创建服务子进程(或线程)和按需创建服务子进程(或线程)两种方式。根据上面的分析,我们来总结一下客户/服务器模型的特点。对于服务器方来说:服务进程一般在启动后就一直运行,以等待客户请求的到来,除非服务被禁止或执
8、行强迫终止服务程序。第第6章章 网络程序设计基本知识网络程序设计基本知识 服务器方进程使用的是众所周知的端口,否则客户无法知道提供服务的端口,也就不可能提出服务的请求。服务器方通常拥有较多的资源(对称方式除外)。服务器方进程可以并行处理多个客户的请求,当然可以同时处理的客户请求数目是有一定限制的。服务器方在通信时属于被动的一方。对于客户方来说:在需要服务时向服务器提出请求,请求的服务得到满足并完成处理任务后,就终止客户程序的执行。第第6章章 网络程序设计基本知识网络程序设计基本知识 使用向系统申请的临时端口与服务器方进程进行通信。拥有相对较少的资源(对称方式除外)。客户方在通信时属于主动的一方
9、。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.2 TCP/IP应用程序工作模型应用程序工作模型与网络编程接口与网络编程接口 6.2.1 TCP/IP应用程序工作模型使用TCP/IP协议的网络,其协议核心内容在层次结构的低三层,即网络接口层、IP层和传输层,而这三层的功能一般是由操作系统的内核来实现的。如图6-1所示的是两台主机的进程间通过网络编程接口进行通信的原理图。第第6章章 网络程序设计基本知识网络程序设计基本知识 客户应用程序网络应用程序编程接口TCP/IP 核心协议物理传输介质服务器应用程序网络应用程序编程接口TCP/IP 核心协议物理传输介质图6-1 TCP/IP应用程
10、序工作模型图 第第6章章 网络程序设计基本知识网络程序设计基本知识 图6-1所示的是使用TCP/IP协议网络的典型应用方式,即客户/服务器模式。通过图6-1用户还要明白一个问题,网络程序设计其实是使用系统提供的网络协议完成用户程序的功能,即在网络应用程序中使用网络协议提供的服务,而不是让用户去实现网络协议各层的功能。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.2.2 Windows Sockets简介1Windows Sockets的概念Windows Sockets是在Windows环境下使用的一套网络编程规范,常常简称为Winsock。2Windows Sockets的来源S
11、ockets本来是Unix操作系统下流行的一种网络编程接口(API),它是1983年在Berkeley(加州大学伯克利分校)4.2 BSD操作系统中被首先引入的,因此被称为“Berkeley Socket API”。第第6章章 网络程序设计基本知识网络程序设计基本知识 3Windows Sockets的版本目前常用的Winsock有两个版本:一个是16位的Winsock 1.1,由动态链接库WINSOCK.DLL提供支持;另一个是32位的Winsock 2.2,由动态链接库WSOCK32.DLL提供支持。4Winsock API函数的分类在Winsock规范中把Winsock API函数集分为
12、与BSD Socket(用在Unix中)相兼容的基本函数、网络数据信息检索函数和Windows专用扩展函数三类。第第6章章 网络程序设计基本知识网络程序设计基本知识 Winsock规范的核心内容是符合Berkeley Socket风格的库函数,但为了使程序员能充分利用Windows消息驱动机制进行编程,又定义开发了一组针对Windows的扩展库函数。Windows Sockets规范中针对Windows的扩展部分,为应用程序开发者提供了开发Windows应用软件的功能,它有利于程序员写出更加稳定并且更加高效的程序。另外,除了WSAStartup()和WSACleanup()两个函数外(在6.5
13、节介绍),其他Windows扩展函数的使用不是强制性的。第第6章章 网络程序设计基本知识网络程序设计基本知识 5Windows Sockets对多线程的支持Windows Sockets支持多线程的Windows进程。一个进程可以包含一个或多个同时执行的线程(在Windows 3.1非多线程版本中,一个任务对应了一个仅具有单个线程的进程)。6.2.3 Windows Sockets规范的目标及几个相关的概念1Windows Sockets规范的目标Windows Sockets规范的目标有两个:一是给网络应用程序的开发者提供一套简单的网络编程API;二是让各家网络软件供应商能够根据这套规范建立
14、各自的符合Windows Sockets标准的实现和应用程序。第第6章章 网络程序设计基本知识网络程序设计基本知识 此外,在一个特定Windows版本的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。2Windows Sockets兼容和Windows Sockets提供者遵守Windows Sockets规范的网络软件称之为是Windows Sockets兼容的,而Windows Sockets兼容实现的提供者称之为Windows
15、 Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到与Windows Sockets兼容。第第6章章 网络程序设计基本知识网络程序设计基本知识 3Windows Sockets应用程序任何能够与Windows Sockets兼容实现协同工作的应用程序都被认为是具有Windows Sockets接口的,称这种应用程序为Windows Sockets应用程序。应用程序通过调用Windows Sockets的API实现它们之间的相互通信。Windows Sockets又利用下层的网络通信协议功能和操作系统调用来实现实际的通信工作。第第6章章 网络程序
16、设计基本知识网络程序设计基本知识 6.3 套接口的概念及其编程原理6.3.1 套接口(Socket)Windows Sockets API依靠套接口(Socket)进行通信。套接口可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡(NIC)的传输介质将这段信息发送到另一台主机的Socket中,使这段信息能传送到其他程序中,如图6-2所示。第第6章章 网络程序设计基本知识网络程序设计基本知识 程序A基于TCP/IP的网络程序B网络管理软件网络接口卡(NIC)主机A主机B套接口
17、套接口图6-2 套接口示意图 第第6章章 网络程序设计基本知识网络程序设计基本知识 现在我们根据图6-2来分析一下使用套接口进行通信的过程。当主机A(Host A)上的网络应用程序(Program A)要发送数据时,通过调用数据发送函数首先将要发送的一段信息写入其Socket中,Socket中的内容通过主机A的网络管理软件由主机A的网络接口卡发送到主机B(Host B),主机B的网络接口卡接收到这段信息后,再传送给主机B的网络管理软件,网络管理软件将这段信息保存在主机B的Socket中,然后程序B(Program B)才能在Socket中读取并使用这段信息。第第6章章 网络程序设计基本知识网络
18、程序设计基本知识 从以上的通信过程可以看出,如果不考虑通信过程中的网络接口卡和传输介质等,则网络通信的过程就是由数据的发送者将要发送的信息写入一个套接口,再通过中间环节将信息传输到接收端的套接口中,然后就可以由接收端的应用程序将信息从套接口中取出。因此,两个应用程序之间的数据传输要通过套接口来完成。在学习了后面更多的内容后我们将会体会到,套接口的本质是通信过程中所要使用的一些缓冲区及一些相关的数据结构。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.3.2 套接口的分类为了满足不同的通信程序对通信质量和性能的要求,一般的网络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序时
19、根据不同的要求来选择。这三种套接口分别是:(1)流式套接口(SOCK_STREAM)。(2)数据报套接口(SOCK_DGRAM)。(3)原始套接口(SOCK_RAW)。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.3.3 套接口编程原理该过程可以分为以下几个阶段:(1)电信局必须要有一个电话总机,相当于套接口通信机制中提供服务的服务器。在Socket中通过调用socket()函数来开启一个服务,即创建一个提供服务的套接口。(2)电信局必须给电话总机分配一个号码(如114,即查号服务的号码是114),以便用户通过拨该号码得到电话服务,同时接入该电信局的用户必须知道该总机的号码。第第6
20、章章 网络程序设计基本知识网络程序设计基本知识(3)电信局114查号台下会开设一些自动服务的分机,但是它们的数量是有限的。总机开通后就一直在监听(listen)用户的拨号,用户拨打114时,可能拨通,得到服务;也可能拨不通,就会听到忙音。同样,我们在建立一个Socket服务时,也会调用listen()函数来监听客户的请求。(4)对于用户来说,如果知道电信局的查号号码,在想得到查号服务时就可以拨打114,请求得到电信局的服务,这相当于在客户端要进行的操作。第第6章章 网络程序设计基本知识网络程序设计基本知识(5)电信局的总机接受了某用户拨打的电话后,负责把用户与一个分机连通,而总机本身则又回到等
21、待状态,等待其他客户的请求。(6)服务完成后,挂上电话,线路断开,一次服务过程结束,否则该线路将一直被占用,浪费了通信资源。在服务器和客户之间,最后也要使用closesocket()函数关闭套接口,释放该套接口上的有关资源,这可以由通信的任何一方或双方同时提出。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.3.4 Winsock套接口编程时对错误的处理机制 用户编写网络应用程序时,出现错误是不可避免的,因此对错误的检查和控制至关重要,一个好的或者说成功的Winsock应用程序应该尽可能地检测和处理各种错误。对Winsock函数来说,返回错误是很常见的。与大多数系统调用类似,Wins
22、ock函数发生的错误也有两种。不成功的Winsock函数调用返回的最常见的值是宏定义SOCKET_ERROR,在Winsock的头文件中(如Winsock2.h),它的数值是1。第第6章章 网络程序设计基本知识网络程序设计基本知识 该函数的使用非常简单,格式如下:int WSAGetLastError(void);这是一个无参函数,调用时返回最新发生的网络错误代码。调用该函数时要注意,当一特定的Windows Sockets API函数指出一个错误已经发生时,就应该调用本函数来获得对应的错误代码。WSAGetLastError()函数返回的这些错误都已预定义成常量值,根据Winsock版本的不
23、同,这些值的声明不在Winsock1.h中,就在Winsock2.h中。这两个头文件的惟一差别是Winsock2.h中包含的错误代码(针对Winsock 2而引入的一些新的API函数)更多。为各种错误代码定义的常量(带有#定义的宏)一般都以WSAE开头。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.3.5 网络字节顺序不同的主机对字节值的存储顺序不同。在存储由多个字节组成的一个字时,有的计算机在起始地址处存放整数的低序号字节,这种存储格式叫“小序在前”(Little-endian);而有的计算机在起始地址处存放整数的高序号字节,这种存储格式叫“大序在前”(Big-endian)。计
24、算机究竟采用那种字节存储顺序由各自的设计决定,如Windows系列的操作系统使用的是小序在前的存储方式,而Sun OS和Solaris等采用的大序在前的存储方式。第第6章章 网络程序设计基本知识网络程序设计基本知识 在计算机中,TCP/IP协议使用的16位整数(如端口号)和32位整数(如IP地址)是按计算机各自的“主机字节”(Host-byte)来表示的。在网络中,为了保证数据的正确性,网络通信协议中必须指定网络字节顺序。如果在网络中使用IP地址和端口号,按“互联网联网标准”的要求,指定的多字节值必须用“大序在前”的形式来表示,一般称之为“网络字节”(Network-byte)顺序。第第6章章
25、 网络程序设计基本知识网络程序设计基本知识 在Winsock中,有一系列的函数可用于多字节数的转换,把它们从主机字节顺序转换成网络字节顺序,反之亦然。下面4个API函数便将一个数从主机字节顺序转换成网络字节顺序:htonl():参数是主机字节顺序的一个4字节数,函数返回网络字节顺序的数;WSAHtonl():参数是主机字节顺序的一个4字节数,函数返回网络字节顺序的数;htons():参数是主机字节顺序的一个2字节数,函数返回网络字节顺序的数;WSAHtons():参数是主机字节顺序的一个2字节数,函数返回网络字节顺序的数。第第6章章 网络程序设计基本知识网络程序设计基本知识 6.4 Winso
展开阅读全文