梅芳-网络编程-复习.ppt
《梅芳-网络编程-复习.ppt》由会员分享,可在线阅读,更多相关《梅芳-网络编程-复习.ppt(89页珍藏版)》请在三一办公上搜索。
1、网络编程,主讲:王新颖wxyal,吉林大学软件学院,1.1 网络编程相关的基本概念,1.1.1 网络编程与进程通信1进程与线程的基本概念 进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位。一个进程实体由程序代码、数据和进程控制块三部分构成。各种计算机应用程序在运行时,都以进程的形式存在。网络应用程序也不例外。,第一页 最后一页,吉林大学软件学院,Windows系统不但支持多进程,还支持多线程。当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。Windows 2000能够在拥有多个CPU的计算机上运行,每个
2、CPU上运行不同的线程,达到多线程运行。,Windows系统,第一页 最后一页,吉林大学软件学院,2网络应用进程在网络体系结构中的位置 从计算机网络体系结构的角度来看,网络应用进程处于网络层次结构的最上层。从功能上,可以将网络应用程序分为两部分,一部分是专门负责网络通信的模块,它们与网络协议栈相连接,借助网络协议栈提供的服务完成网络上数据信息的交换。另一部分是面向用户或者作其他处理的模块,它们接收用户的命令,或者对借助网络传输过来的数据进行加工,这两部分模块相互配合,来实现网络应用程序的功能。,第一页 最后一页,吉林大学软件学院,网络应用程序最终要实现网络资源的共享,共享的基础就是必须能够通过
3、网络轻松地传递各种信息。网络编程首先要解决网间进程通信的问题。然后才能在通信的基础上开发各种应用功能。,第一页 最后一页,吉林大学软件学院,3实现网间进程通信必须解决的问题 网间进程通信是指网络中不同主机中的应用进程之间的相互通信问题,网间进程通信必须解决以下问题:(1)网间进程的标识问题(2)如何与网络协议栈连接的问题(3)多重协议的识别问题(4)不同的通信服务的问题,第一页 最后一页,吉林大学软件学院,按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信的能力。TCP/IP协议提出了传输层协议端口(protocol port,简称端口)的概念,成功地解决了通信进程
4、的标识问题。传输层是计算机网络中,通信主机内部进行独立操作的第一层,是支持端到端的进程通信的关键的一层。,第一页 最后一页,吉林大学软件学院,2端口的概念,端口是TCP/IP协议族中,应用层进程与传输层协议实体间的通信接口 类似于文件描述符,每个端口都拥有一个叫作端口号(port number)的整数型标识符,第一页 最后一页,吉林大学软件学院,3端口号的分配机制 TCP/IP协议采用了全局分配(静态分配)和本地分配(动态分配)相结合的分配方法。对于TCP,或者UDP,将它们的全部65535个端口号分为保留端口号和自由端口号两部分。保留端口的范围是01023,又称为众所周知的端口或熟知端口(w
5、ell-known port),只占少数,采用全局分配或集中控制的方式,由一个公认的中央机构根据需要进行统一分配,静态地分配给因特网上著名的众所周知的服务器进程,并将结果公布于众。,第一页 最后一页,吉林大学软件学院,4进程的网络地址的概念 在因特网络中,用一个三元组可以在全局中唯一地标识一个应用层进程:应用层进程地址=(传输层协议,主机的IP地址,传输层的端口号)这样一个三元组,叫做一个半相关(half-association),它标识了因特网中,进程间通信的一个端点,也把它称为进程的网络地址。,第一页 最后一页,吉林大学软件学院,5网络中进程通信的标识 一个完整的网间通信需要一个五元组在全
6、局中唯一地来标识:(传输层协议,本地机IP地址,本地机传输层端口,远地机IP地址,远地机传输层端口)这个五元组称为一个全相关(association)。即两个协议相同的半相关才能组合成一个合适的全相关,或完全指定一对网间通信的进程。,第一页 最后一页,吉林大学软件学院,1面向消息的协议与基于流的协议(1)面向消息的协议 面向消息的协议以消息为单位在网上传送数据,在发送端,消息一条一条地发送,在接收端,也只能一条一条地接收,每一条消息是独立的,消息之间存在着边界。,1.1.3 网络协议的特征,第一页 最后一页,吉林大学软件学院,(2)基于流的协议 基于流的协议不保护消息边界,将数据当作字节流连续
7、地传输,不管实际消息边界是否存在。,第一页 最后一页,吉林大学软件学院,2面向连接的服务和无连接的服务 一个协议可以提供面向连接的服务,或者提供无连接的服务。面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。,第一页 最后一页,吉林大学软件学院,3可靠性和次序性 可靠性保证了发送端发出的每个字节都能到达既定的接收端,不出错,不丢失,不重复,保证数据的完整性,称为保证投递。次序性是指对数据到达接收端的顺序进行处理。保护次序性的协议保证接收端收到数据的顺序就是
8、数据的发送顺序,称为按序递交。,第一页 最后一页,吉林大学软件学院,高效的用户数据报协议UDP 传输层的用户数据报协议(User Datagram Protocol,UDP)是一种尽力传送的无连接的不保障可靠的传输服务,是一种保护消息边界的数据的传输。,第一页 最后一页,吉林大学软件学院,1.1.5 可靠的传输控制协议TCP,1可靠性是很多应用的基础 2TCP为应用层提供的服务 传输控制协议(Transmission Control Protocol,TCP)应用层进程提供一个面向连接的、端到端的、完全可靠的(无差错、无丢失、无重复或失序)全双工的流传输服务。,第一页 最后一页,吉林大学软件学
9、院,TCP被称作一种端对端(end to end)协议,这是因为它提供一个直接从一台计算机上的应用进程到另一远程计算机上的应用进程的连接。应用进程能请求TCP构造一个连接,通过这个连接发送和接收数据,以及关闭连接。由TCP提供的连接叫做虚连接(virtual connection),虚连接是由软件实现的。事实上,底层的因特网系统并不对连接提供硬件或软件支持,只是两台机器上的TCP软件模块通过交换消息来实现连接的幻象。,3TCP利用IP数据报实现了端对端的传输服务,第一页 最后一页,吉林大学软件学院,第2章 UNIX中的套接字网络编程接口,UNIX套接字网络编程接口的产生与发展过程套接字与UNI
10、X操作系统的关系套接字编程的基本概念面向连接的套接字编程无连接的套接字编程,最后一页,吉林大学软件学院,套接字应用程序编程接口是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(Socket API)。它定义了应用程序与协议栈软件进行交互时可以使用的一组操作,决定了应用程序使用协议栈的方式、应用程序所能实现的功能、以及开发具有这些功能的程序的难度。,第一页 最后一页,吉林大学软件学院,2.1 UNIX套接字网络编程接口的产生与发展,加州大学伯克利(Berkley)分校开发并推广了一个包括TCP/IP互联协议的UNIX,称为BSD UNIX(
11、Berkeley Software Distribution UNIX)操作系统,套接字编程接口是这个操作系统的一个部分。后来的许多操作系统并没有另外搞一套其它的编程接口,而是选择了对于套接字编程接口的支持。由于这个套接字规范最早是由Berkeley大学开发的,一般将它称为Berkeley Sockets规范。,2.1.2 套接字编程接口的起源与应用,第一页 最后一页,吉林大学软件学院,要想实现套接字编程接口,可以采用两种实现方式,一种是在操作系统的内核中增加相应的软件来实现,一种是通过开发操作系统之外的函数库来实现。,2.1.3 套接字编程接口的两种实现方式,第一页 最后一页,吉林大学软件学
12、院,UNIX操作系统对文件和所有其它的输入/输出设备采用一种统一的的操作模式,就是“打开-读-写-关闭”(open-read-write-close)的I/O模式。当TCP/IP协议被集成到UNIX内核中的时候,相当于在UNIX系统中引入了一种新型的I/O操作,就是应用程序通过网络协议栈来交换数据。,2.1.4 套接字通信与UNIX操作系统的输入/输出,第一页 最后一页,吉林大学软件学院,在UNIX系统的实现中,套接字是完全与其他I/O集成在一起的。操作系统和应用程序都将套接字编程接口也看作一种输入/输出机制。但是,用户进程与网络协议的交互作用实际要比用户进程与传统的I/O设备相互作用要复杂得
13、多。,第一页 最后一页,吉林大学软件学院,2.2 套接字编程的基本概念,套接字是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。,图2.1 电插座与电话插座的作用,2.2.1 什么是套接字(SOCKET),第一页 最后一页,吉林大学软件学院,我们应当从多个层面来理解套接字这个概念的内涵。从套接字所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议栈进行通信的接口,是应用程序与网络协议栈进行交互的接口。,第一页 最后一页,吉林大学软件学院,从实现的角度来讲,非常复杂。套接字是一个复杂的
14、软件机构,包含了一定的数据结构,包含许多选项,由操作系统内核管理。从使用的角度来讲,非常简单。对于套接字的操作形成了一种网络应用程序的编程接口(API)。本书把这一套操作套接字的编程接口函数称作套接字编程接口,套接字是它的操作对象。总之,套接字是网络通信的基石。,第一页 最后一页,吉林大学软件学院,1通信域 接字存在于通信域中,通信域是为了处理一般的进程通过套接字通信而引入的一种抽象概念,套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。现在,仅仅针对Internet域,并且使用Internet协议族(即TCP/IP协议族)来通信。,2.2.2 套接
15、字的特点,第一页 最后一页,吉林大学软件学院,2套接字具有三种类型 每一个正被使用的套接字都有它确定的类型,只有相同类型的套接字才能相互通信。(1)数据报套接字(Datagram SOCKET)数据报套接字提供无连接的不保证可靠的独立的数据报传输服务。在Internet通信域中,数据报套接字使用UDP数据报协议形成的进程间通路,具有UDP协议为上层所提供的服务的所有特点。,第一页 最后一页,吉林大学软件学院,(2)流式套接字(Stream SOCKET)流式套接字提供双向的、有序的、无重复的、无记录边界的可靠的数据流传输服务。在Internet通信域中,流式套接字使用TCP协议形成的进程间通路
16、,具有TCP协议为上层所提供的服务的所有特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接。,第一页 最后一页,吉林大学软件学院,(3)原始式套接字(RAW SOCKET)原始式套接字允许对较低层次的协议,如IP、ICMP直接访问,用于检验新的协议的实现。,第一页 最后一页,吉林大学软件学院,3套接字的创建套接字由应用层的通信进程创建,并为其服务就是说,每一个套接字都有一个相关的应用进程,操作该套接字的代码是该进程的组成部分。,第一页 最后一页,吉林大学软件学院,4使用确定的IP地址和传输层端口号,往往在生成套接字的描述符后,要将套接字与计算机上的特定的IP地址和传输层
17、端口号相关联,这个过程称为绑定。一个套接口要使用一个确定的三元组网络地址信息,才能使它在网络中唯一地被标识。,第一页 最后一页,吉林大学软件学院,(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。,2.2.3 套接字的应用场合,第一页 最后一页,吉林大学软件学院,本机字节顺序和网络字节顺序 在具体计算机中的多字节数据的存储顺序,称为本机字节顺序。多字节数据在网络协议报头中的存储顺序,称为网络字节顺序。,第一页 最后
18、一页,吉林大学软件学院,网络应用程序要在不同的计算机中运行,本机字节顺序是不同的,但是,网络字节顺序是一定的。所以,应用程序在编程的时候,在把IP地址和端口号装入套接字的时候,应当把它们从本机字节顺序转换为网络字节顺序;相反,在本机输出时,应将它们从网络字节顺序转换为本机字节顺序。,第一页 最后一页,吉林大学软件学院,通常,我们使用域名来标识站点,可以将文字型的主机域名直接转换成IP地址,struct hostent*gethodtbyname(const char*name);入口参数:是站点的主机域名字符串,返回值:是指向hostent 结构的指针,hostent结构包含主机名,主机别名数
19、组,返回地址的类型(一般是AF-INET),地址长度的字节数,已符合网络字节顺序的主机网络地址等。,域名服务,第一页 最后一页,吉林大学软件学院,2.3 面向连接的套接字编程,第一页 最后一页,吉林大学软件学院,1创建套接字SOCKET()SOCKET过程创建一个套接字并返回一个整型描述符:int SOCKET(int Protofamily,int Type,int Protocol);,第一页 最后一页,吉林大学软件学院,2.3 面向连接的套接字编程,2绑定套接字到指定的地址 BIND()int BIND(int Sockfd,struct sockaddr*My_addr,int Add
20、rlen);3启动监听Listen()int LISTEN(int Sockfd,int Queuesize);4接收连接请求ACCEPT()int ACCEPT(int Sockfd,struct sockaddr*Addr,int*addrlen);,第一页 最后一页,吉林大学软件学院,5请求建立连接CONNECT()int CONNECT(int Sockfd,struct sockaddr*Service_addr,int Addrlen);举例:if(CONNECT(sockfd,(struct sockaddr*)(&serv_addr),sizeof(struct sockadd
21、r)0)报错,并退出,第一页 最后一页,吉林大学软件学院,6读/写套接字READ()和WRITE()int READ(int sockfd,void*buffer,int len)int WRITE(int sockfd,void*buffer,int len)7发送 SEND()和接收 RECV()int SEND(int sockfd,char*buf,int len,int flags);int RECV(int sockfd,char*buf,int len,int flags);8关闭套接字CLOSE()int CLOSE(int sockfd);,第一页 最后一页,吉林大学软件学院
22、,2.3.4 进程的阻塞问题和对策,1什么是阻塞 阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。,第一页 最后一页,吉林大学软件学院,2能引起阻塞的套接字调用 在Berkeley套接字网络编程接口的模型中,套接字的默认行为是阻塞的,具体地说,在一定情况下,有多个操作套接字的系统调用会引起进程阻塞。(1)ACCEPT()(2)READ()、RECV()和READFORM()(3)WRITE()、SEND()和SENDTO()(4)CONNECT()(5)SELECT()(6)C
23、LOSESOCKET(),第一页 最后一页,吉林大学软件学院,2.4 无连接的套接字编程2.4.1 无连接的套接字编程的两种模式 使用数据报套接字开发网络应用程序,既可以采用客户/服务器模式,也可以采用对等模式。,第一页 最后一页,吉林大学软件学院,2.4.2 两个专用的系统调用1发送数据报SENDTO()int SENDTO(int sockfd,const void*msg,int len,unsigned int flags,struct sockaddr*to,int tolen);2接收数据报 RECVFROM()int RECVFROM(int sockfd,void*buf,in
24、t len,unsigned int flags,struct sockaddr*from,int*fromlen),第一页 最后一页,吉林大学软件学院,第3章 Windows环境的网络编程内容提要:Windows Sockets 规范 WinSock 规范与Berkeley套接口的区别 Winsock 1.1 的库函数,3.1 Windows Sockets规范3.1.1 概述Microsoft公司以Berkeley Sockets规范为范例,定义了Windows Socktes规范,简称Winsock规范。这是Windows操作系统环境下的套接字网络应用程序编程接口(API)。,3.1.2
25、 Windows Sockets规范 Windows Sockets 规范是一套开放的、支持多种协议的Windows下的网络编程接口。从1991年到1995年,从1.0版发展到版,已成为Windows网络编程的事实上的标准。1Windows Sockets 1.1版本 在Winsock.h包含文件中,定义了所有WinSock 1.1版本库函数的语法、相关的符号常量和数据结构。库函数的实现在WINSOCK.DLL动态链接库文件中。,(1)WinSock 1.1 全面继承了Berkeley Sockets规范(2)数据库函数Winsock规范定义了数据库查询例程,其中六个采用getXbyY()的形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 梅芳 网络 编程 复习
链接地址:https://www.31ppt.com/p-6052155.html