ImageVerifierCode 换一换
格式:PPT , 页数:30 ,大小:708.50KB ,
资源ID:384582      下载积分:12 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-384582.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络编程语言.ppt)为本站会员(ga****84)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

网络编程语言.ppt

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)即使用流式套接字。(2)数据报式套

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

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

10、在数据收发过程中动态地建立了全相关。,见下图,15,16,应用程序程序编程接口(套接字),1.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 时它仍作为参数。,17,应用程序程序编程接口(套接字),在客户机上,应用程序执行主动打开;也就是,它通过调用如下的一个操作来表明它希望与谁通信:,该操作直至T C P 成功建立连接后才返回,此时应用程序就可以开始发送数据。a d d r e s s 中包括了远

12、程参与者的地址。 实际上,客户机通常只描述远程参与者的地址,让系统自动填写本地信息。鉴于服务器通常在共知的端口监听消息,一般地,客户机并不关心它自己用哪个端口;操作系统简单地选一个未用端口即可。,18,应用程序程序编程接口(套接字),一旦连接建立,应用进程将调用以下两个操作来发送和接收数据:,这个操作在指定的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 来控制操作的特定细节。,19,应用实例,现在,我们来看一个简单的客户机/服务器程序的实现,它用套接字接口

13、在一个T C P 连接上发送消息。这个程序还用到了其他的U n i x 网络功能,我们将逐个介绍。我们的应用允许用户在一端的机器上输入并把文本发送给另一端机器的用户。它是U n i x 中t a l k 程序的一个简化版本,类似于We b 聊天室的核心程序。,20,应用实例,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 )。 在

14、以下例子中,我们用T C P 端口号5 4 3 2 作为共知的服务器端口号;它恰好不是分配给其他因特网服务的端口号。 建立连接的最后一步是调用s o c k e t 和c o n n e c t 。一旦c o n n e c t 操作返回,建立起连接,客户机程序将进入主循环,不断从标准输入读取文本并通过套接字发送。,21,客户端程序,22,应用实例,2. 服务器 服务器的实现也很简单。首先,它填入自己的端口号(S E RV E R _ P O RT )构造地址数据结构。 其次,它并不指明I P地址,从而使应用程序可以接受来自本地任一I P 地址的连接。 然后,服务器执行与被动打开有关的初始步骤

15、: 创建一个套接字,将它绑定到本地地址。 然后设置允许同时连接的最大数。 最后,主循环等待远端主机与它连接,当远端有一台主机试图与它连接时,它就接收并输出连接上送来的字符。,23,服务器程序,24,协议实现的问题,应用程序与底层网络交互的方式类似于高层协议与低层协议交互的方式。例如,T C P 需要一个接口向I P 发送消息,同时也需要I P 能向T C P 传送消息。这就是服务接口。 既然我们已经有了网络的A P I (如套接字),或许我们可以在协议栈的每一对协议间使用同样的接口。尽管这只是一种选择,但在实际中我们并不这样使用套接字接口。原因在于套接字接口在协议实现方面的低效是协议实现者所不

16、能忍受的。应用编程人员之所以能忍受是因为它简化了编程工作,而且毕竟他对低效只需忍受一次就够了,而协议实现者却要常常被它们的性能所困扰,总担心穿过几层协议是否能得到一条消息。 本节的其余部分将讨论网络A P I 和位于协议图下方的协议到协议接口的两点主要不同。同时介绍协议实现常用到的库例程。,25,协议实现的问题,1. 进程模型 大多数操作系统都提供一种抽象概念叫进程(p ro c e s s ),或叫线程(t h re a d )。每个进程的运行很大程度上独立于其他进程,操作系统负责确保给所有当前的进程分配如地址空间和C P U 周期这样的资源。 进程这一抽象概念使得在一台机器上并发运行多个事

17、件变得相当简单;例如,每个用户的应用程序可以在自己的进程中执行,操作系统中的各种事件可以作为其他进程执行。 操作系统将正在C P U 上运行的进程停止并启动另一进程时,我们称这一转换为上下文切换(context switch )。,26,协议实现的问题,在设计一个网络子系统时,首先要回答的问题之一是,“进程在哪儿?”基本上有两种选择,如图所示。 第一种选择,我们称为进程/协议(p ro c e s s - p e r- p ro t o c o l )模型,每个协议由一个独立的进程实现。这就意味着当一条消息向协议栈的上方或下方移动时,它被从一个进程/协议传送到另一个进程/协议,即实现协议i 的

18、进程处理这个消息,然后把它传给协议i -1 ,以此类推。一个进程/协议如何向下一个进程/协议传递消息依赖于主机操作系统提供的进程间通信的支持。通常有一个简单的机制把消息与进程排队。然而,重要的一点是,协议图的每一层都要求上下文切换,这是一个典型的耗时操作。,27,协议实现的问题,我们把另一种称为进程/消息(p ro c e s s - p e r-me s s a g e )模型,它把每个协议当做一段静态编码并把进程同消息联系起来。也就是说,当网络送来一条消息时,操作系统调度一个进程,使之负责消息在协议图中向上移动。在每一层,调用实现该协议的过程,然后调用实现下一个协议的过程,以此类推。对于输

19、出的消息,应用程序调用必要的过程,直到消息被送入网络。在两个方向中,协议图都被一系列过程调用一遍。,28,协议实现的问题,结论: 虽然有时感觉进程/协议模型比较容易,即我在我的进程中实现我的协议,而你在你的进程中实现你的协议。 但由于一个简单的原因,进程/消息模型通常更有效:即在大多数计算机上,过程调用的效率比上下文切换高一个数量级。 第一种模型要求每一层有一个上下文切换,而第二种模型只要求每一层有一个进程调用。,29,协议实现的问题,大多数协议实现用d e l i v e r 操作代替r e c e i v e 操作。也就是低层协议做向上调用(u p c a l l ),它是一个向上调用协议

20、栈的过程,将消息传送到高层协议。图显示了两个相邻协议(本例中为T C P 和I P )的接口。 一般情况下,消息向协议栈的下方移动调用一系列s e n d 操作,向协议图上方移动则调用一系列d e l i v e r 操作。,代码段用下列操作:,其中:l l p 表示低层协议,其上的正在调用它的协议已被配置;h l p 表示正在调用协议之上配置的高层协议。注意,我们用P r o t o c o l 这一变量类型和变量l l p 和h l p 简化了使用,它们隐藏了协议图中如何配置协议、高层协议如何在低层协议上打开一个连接的细节。,30,协议实现的问题,2. 消息缓冲区 套接字接口的第二个低效之处在于当调用s e n d 时应用进程提供缓冲区,保存向外发送的消息,类似于当调用r e c e i v e 时将进来的消息复制到缓冲区中。它强制最高层的协议把消息从应用程序缓冲区复制到网络缓冲区中,或反之,如图所示。 将数据从一个缓冲区复制到另一个缓冲区是协议实现中代价最高的工作之一。因为处理器的速度以巨大的步伐加快,而内存的发展并不如处理器那么快。,

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。