网络编程语言课件

上传人:我*** 文档编号:144771706 上传时间:2020-09-14 格式:PPT 页数:29 大小:512.50KB
返回 下载 相关 举报
网络编程语言课件_第1页
第1页 / 共29页
网络编程语言课件_第2页
第2页 / 共29页
网络编程语言课件_第3页
第3页 / 共29页
网络编程语言课件_第4页
第4页 / 共29页
网络编程语言课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《网络编程语言课件》由会员分享,可在线阅读,更多相关《网络编程语言课件(29页珍藏版)》请在金锄头文库上搜索。

1、1,网络编程语言,2,应用程序程序编程接口(套接字),实现网络应用时,要从由网络输出的接口开始。既然大多数网络协议都是由软件实现的(特别是协议栈中的高层协议),而且几乎所有的计算机系统都将网络协议的实现作为操作系统的一部分,因而我们说“由网络输出的”接口时,通常指的是操作系统为它的网络子系统提供的接口。这个接口叫做网络的应用程序编程接口(A P I )。 虽然每个操作系统都可以自由地定义自己的A P I ,但随着时间的推移,有些A P I 已获得了广泛的支持;也就是说,除了它们原始的系统外,它们还被移植到操作系统中。,3,应用程序程序编程接口(套接字),套接字接(socket interfac

2、e )口:它最初是由加州大学伯克利分校的U n i x 小组开发,而现在几乎所有流行的操作系统都支持它。业界支持单一A P I 的优点是使得应用程序可以很简单地从一个操作系统移植到另一个操作系统。但是我们得记住一点,通常应用程序与操作系统许多部分相互作用,而不仅仅与网络相互作用。例如,读写文件,产生并行进程和输出图形显示。 每个协议提供了一系列服务(s e rv i c e ),A P I 则提供了特定操作系统中调用这些服务所用的语法(s y n t a x )。然后,实现的作用是把A P I 定义的具体操作和对象映射到协议定义的抽象服务集上。,4,应用程序程序编程接口(套接字),套接字接口的

3、主要概念是套接字(s o c k e t )。理解套接字的好方法是把它看作本地应用进程与网络的接入点。接口定义了各种操作,包括创建套接字、将套接字连到网上、通过套接字发送/接收消息,关闭套接字。为了简化讨论,我们在此只讨论T C P 中如何使用套接字。 第一步是创建套接字,用如下操作实现: 该操作有三个参数是因为套接字接口被设计成通用的,定义支持任意的底层协议集。,5,应用程序程序编程接口(套接字),2.t y p e 参数表明通信的语义。 S O C K _ S T R E A M 说明是字节流。 S O C K _ D G R A M则表明是面向消息的服务,像U D P 提供的一样。,3.

4、p r o t o c o l 参数则指明将要用到的特定协议。,s o c k e t 返回值是新创建套接字的句柄(h a n d l e ),即以后引用该套接字时使用的标识符。在套接字的其他操作中,它也将作为一个参数。,1.d o m a i n 参数描述将使用的协议族。 A F _ I N E T 用于表示因特网协议族。 A F _ U N I X 用于表示U n i x 管道功能,6,客户/服务器模式,在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。

5、客户/服务器模式的建立基于以下两点: 首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。 其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。,7,客户/服务器模式,客户/服务器模式在操作过程中采取的是主动请求方式: 首先服务器方要先启动,并根据请求提供相应服务: 1.打开一通信通道并告知本地主机,它愿意在某一公认地址上(周知口,如FTP为21)接收客户请

6、求; 2.等待客户请求到达该端口; 3.接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。 4.返回第二步,等待另一客户请求。 5.关闭服务器,8,客户/服务器模式,客户方: 1.打开一通信通道,并连接到服务器所在主机的特定端口; 2.向服务器发服务请求报文,等待并接收应答;继续提出请求. 3.请求结束后关闭通信通道并终止。 从上面所描述过程可知: 1.客户与服务器进程的作用是非对称的,因此编码不同。 2.

7、服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。,9,应用程序程序编程接口(套接字),下一步看你是客户还是服务器。 如果是服务器:在服务器主机上,应用进程执行一个被动的打开,即服务器表明它已准备好接受连接,但并没有真正建立连接。服务器通过调用以下三个操作来完成打开:,10,套接字类型,TCP/IP的socket提供下列三种类型套接字。 (1)流式套接字(SOCK_STREAM) 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流

8、式套接字。 (2)数据报式套接字(SOCK_DGRAM) 提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。 (3)原始式套接字(SOCK_RAW) 该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。,11,典型套接字调用过程举例,如前所述,TCP/IP协议的应用一般采用客户/服务器模式,因此在实际应用中,必须有客户和服务器两个进程,并且首先启动服务器,其系统调用时序图如下。 面向连接的协议(如TCP)的套接字系统调用如下图所示: 服务器必须首先启动

9、,直到它执行完accept()调用,进入等待状态后,方能接收客户请求。假如客户在此前启动,则connect()将返回出错代码,连接不成功。,见下图,12,服务器方 客户方,13,典型套接字调用过程举例,无连接协议的套接字调用如下图所示: 无连接服务器也必须先启动,否则客户请求传不到服务进程。 无连接客户不调用connect()。因此在数据发送之前,客户与服务器之间尚未建立完全相关,但各自通过socket()和bind()建立了半相关。 发送数据时,发送方除指定本地套接字号外,还需指定接收方套接字号,从而在数据收发过程中动态地建立了全相关。,见下图,14,15,应用程序程序编程接口(套接字),1

10、.b i n d 操作:如其名字一样,是将新创建的s o c k e t 与a d d r e s s 绑定。这是本地参与者(即服务器)的网络地址。 注意,a d d r e s s 在因特网协议中使用时是表示一个数据结构,其中包括服务器的I P 地址和T C P 端口号。端口号通常是一些众所周知的、专门提供给服务的号吗;例如,We b 服务器通常在端口8 0 上接受连接。,2.l i s t e n 操作:定义在指定的s o c k e t 上可以有多少个待处理的连接。,3.a c c e p t 操作:完成被动打开。它是一个阻塞的操作,在远程参与者没有建立起连接前,它不会返回任何参数,一旦

11、连接成功,它将返回一个表示这个新建连接的新的套接字,并且a d d r e s s 参数还包括了远程参与者的地址。,注意,当a c c e p t 返回时,以前作为参数给定的原始套接字依然存在并依然对应于被动打开;在以后调用a c c e p t 时它仍作为参数。,16,应用程序程序编程接口(套接字),在客户机上,应用程序执行主动打开;也就是,它通过调用如下的一个操作来表明它希望与谁通信:,该操作直至T C P 成功建立连接后才返回,此时应用程序就可以开始发送数据。a d d r e s s 中包括了远程参与者的地址。 实际上,客户机通常只描述远程参与者的地址,让系统自动填写本地信息。鉴于服务

12、器通常在共知的端口监听消息,一般地,客户机并不关心它自己用哪个端口;操作系统简单地选一个未用端口即可。,17,应用程序程序编程接口(套接字),一旦连接建立,应用进程将调用以下两个操作来发送和接收数据:,这个操作在指定的s o c k e t 上发送m e s s a g e,这个操作则是将从指定的s o c k e t 上收到的消息放入指定的b u ff e r 。它们都使用一系列f l a g s 来控制操作的特定细节。,18,应用实例,现在,我们来看一个简单的客户机/服务器程序的实现,它用套接字接口在一个T C P 连接上发送消息。这个程序还用到了其他的U n i x 网络功能,我们将逐个

13、介绍。我们的应用允许用户在一端的机器上输入并把文本发送给另一端机器的用户。它是U n i x 中t a l k 程序的一个简化版本,类似于We b 聊天室的核心程序。,19,应用实例,1.客户端 我们先从客户端开始,它用远端的机器名作为参数。它调用U n i x 程序g e t h o s t b y n a m e 把该名字翻译为远端主机的I P 地址。 下一步是构造套接字接口所需的地址数据结构(s i n )。 注意这个数据结构表明我们将一直用套接字与因特网连接(A F _ I N E T )。 在以下例子中,我们用T C P 端口号5 4 3 2 作为共知的服务器端口号;它恰好不是分配给

14、其他因特网服务的端口号。 建立连接的最后一步是调用s o c k e t 和c o n n e c t 。一旦c o n n e c t 操作返回,建立起连接,客户机程序将进入主循环,不断从标准输入读取文本并通过套接字发送。,20,客 户 端 程 序,21,应用实例,2. 服务器 服务器的实现也很简单。首先,它填入自己的端口号(S E RV E R _ P O RT )构造地址数据结构。 其次,它并不指明I P地址,从而使应用程序可以接受来自本地任一I P 地址的连接。 然后,服务器执行与被动打开有关的初始步骤: 创建一个套接字,将它绑定到本地地址。 然后设置允许同时连接的最大数。 最后,主循

15、环等待远端主机与它连接,当远端有一台主机试图与它连接时,它就接收并输出连接上送来的字符。,22,服务器 程 序,23,协议实现的问题,应用程序与底层网络交互的方式类似于高层协议与低层协议交互的方式。例如,T C P 需要一个接口向I P 发送消息,同时也需要I P 能向T C P 传送消息。这就是服务接口。 既然我们已经有了网络的A P I (如套接字),或许我们可以在协议栈的每一对协议间使用同样的接口。尽管这只是一种选择,但在实际中我们并不这样使用套接字接口。原因在于套接字接口在协议实现方面的低效是协议实现者所不能忍受的。应用编程人员之所以能忍受是因为它简化了编程工作,而且毕竟他对低效只需忍

16、受一次就够了,而协议实现者却要常常被它们的性能所困扰,总担心穿过几层协议是否能得到一条消息。 本节的其余部分将讨论网络A P I 和位于协议图下方的协议到协议接口的两点主要不同。同时介绍协议实现常用到的库例程。,24,协议实现的问题,1. 进程模型 大多数操作系统都提供一种抽象概念叫进程(p ro c e s s ),或叫线程(t h re a d )。每个进程的运行很大程度上独立于其他进程,操作系统负责确保给所有当前的进程分配如地址空间和C P U 周期这样的资源。 进程这一抽象概念使得在一台机器上并发运行多个事件变得相当简单;例如,每个用户的应用程序可以在自己的进程中执行,操作系统中的各种事件可以作为其他进程执行。 操作系统将正在C P U 上运行的进程停止并启动另一进程时,我们称这一转换为上下文切换(context switch )。,25,协议实现的问题,在设计一个网络子系统时,首先要回答的问题之一是,“进程在哪儿?”基本上有两种选择,如图所示。 第一种选择,我们称为进程/协议(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号