网络程序设计.docx

上传人:b****1 文档编号:23268248 上传时间:2023-05-15 格式:DOCX 页数:24 大小:172.66KB
下载 相关 举报
网络程序设计.docx_第1页
第1页 / 共24页
网络程序设计.docx_第2页
第2页 / 共24页
网络程序设计.docx_第3页
第3页 / 共24页
网络程序设计.docx_第4页
第4页 / 共24页
网络程序设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

网络程序设计.docx

《网络程序设计.docx》由会员分享,可在线阅读,更多相关《网络程序设计.docx(24页珍藏版)》请在冰豆网上搜索。

网络程序设计.docx

网络程序设计

2010网络程序设计

一、说明面向连接服务和面向无连接服务的原理。

二、说明RPC远程调用系统时主要考虑哪几种语义,针对每种语义如何实现。

三、说明并发服务员的工作原理,说明/*…..*/的含义。

四、重复服务员的工作原理

五、服务源语,及实现过程

六、服务源语节省资源

七、说明守护进程原理及inetd守护进程的工作过程。

八、网络程序设计时需要保证一个对象只有一个实例在系统中运行,举例说明如何保证。

九、一个理想的路由选择算法应该具有哪些特性?

试说明这些特性。

一十、C/S和B/S结构原理及优缺点。

一十一、TCP协议为保证传输的可靠性提供了哪些措施,说明其含义。

一十二、说明IP路由表包括哪些信息,并说明IP路由选择主要完成的功能。

一十三、传输层服务质量有哪些参数?

并说明其含义?

一十四、面向连接编程模型使用的主要系统调用

一十五、分散路由算法实现原理。

一十六、实现一个机器上两个进程通信的几种方式,并说明其特点。

 

一、面向连接服务和面向无连接服务的差别:

1、面向连接服务:

所谓连接,就是两个对等实体为进行数据通信而进行的一种结合。

面向连接服务在进行数据交换前,先建立连接。

当数据传输结束后,应释放这个连接。

因此,采用面向连接的服务进行数据传送要经历三个阶段:

建立连接阶段、数据交换阶段、释放连接阶段。

面向连接服务数据传输阶段:

(1)建立连接阶段:

在有关的服务原语以及协议数据单元中,必须给出源用户和目的用户的完整地址。

同时可以协商服务质量和其他一些选项。

(2)数据交换阶段:

在这个阶段,每个报文中不必包含完整的源用户和目的用户的完整地址,而是使用一个连接标识符来代替。

由于连接标识符相对于地址信息要短得多,因此使控制信息在报文中所占的比重相对减小,从而可减小系统的额外开销,提高信道的利用率。

另外,报文的发送和接收都是按固定顺序的,即发送方先发送的报文,在接受方先收到。

(3)释放连接阶段:

通过相应的服务原语完成释放操作。

 

2、面向无连接服务:

在无连接服务的情况下,两个实体之间的通信不必事先建立一个连接。

相对于面向连接的服务,无连接服务灵活方便且快速。

但它不能防止报文的丢失、重复和乱序。

由于它的每个报文必须包括完整的源地址和目的地址,因此开销较大。

主要有3中类型:

数据报、证实服务、请求回答。

面向无连接服务主要有三种类型:

(1)数据报:

它的特点是发完报文就结束,而对方不做任何响应。

数据报的服务简单,额外开销少,但可靠性差,它比较适合于数据具有很大的冗余度以及要求有较高的实时性的通信场合。

(2)证实交付:

又称可靠的数据报。

这种服务对每一个报文产生一个证实给发送方,不过这种证实不是来自对应方用户,而是来自提供服务的层。

这种证实只能保证报文已经发给目的站了,而不能保证对应方用户正确地收到报文。

(3)请求回答:

这种类型服务是接收端用户每收到一个报文,即向发送端用户发送一个应答报文。

但是双方发送的报文都有可能丢失。

如果接收端发现报文有错误,则回送一个表示有错误的报文。

 

面向连接和无连接服务的主要差别:

项目

面向连接

面向无连接

初始化设置,状态保持

需要

不需要

目的地址

仅在建立连接时需要

每个包均需要

包的顺序传送

保证

不保证

差错控制

提供

不提供

流量控制

提供

不提供

任选项协商

提供

不提供

连接标识符

使用

不使用

路由选择

仅在建立连接时需要

每个包均需要

节点失效的影响

严重

不严重

网内负载平衡

不支持

支持

数据速率

 

二、RPC调用语义

☐第一种是恰好一次语义(Exactly-Once)。

每次调用请求服务员只精确执行一次,它具有和本地过程调用相同的语义。

这种语义比较难以实现,主要是服务员有可能崩溃。

☐第二种是最多一次语义(At-Most-Once)。

最多一次语义常使用有状态服务员实现。

这种语义保证一个调用的重复请求不被服务员执行,服务员根据状态表中的信息判断一个请求是否是一个重复的请求。

☐第三种是至少一次语义(At-Least-Once)。

这种语义保证对于一个远程执行请求,服务员会为它至少执行一次,可能会重复执行多次。

因此这种语义不保证会给一个调用的哪个请求返回值,但是会给这个调用返回一个或多个值。

☐第四种是多次中最后一次语义(Last-of-Many-Call)。

这种语义要求给一个调用的每次请求一个顺序号。

顾客只接受最近一次请求的返回值。

☐第五种是等效语义(Idempotent)。

这种语义可以使用有状态服务员,也可以使用无状态服务员。

在有多个顾客请求远程过程调用的情况下,这种语义保证不会对结果构成不利影响。

对于有状态服务员,服务员所保持的状态不会被多个顾客的请求所破坏。

RPC的组成及功能

用户程序:

在进行远程过程调用时,只需进行通常的本地调用,引起用户代理过程运行,接收来自用户代理程序处理后的结果。

用户代理程序:

将目标过程的说明和参数装入一个或几个调用包内,交给通信网络程序。

将通信程序收到的结果进行拆包,并将结果发送给用户程序。

通信程序:

包括两部分,分别为顾客机和服务员机。

负责发送和接收通信双方的调用包和结果包。

负责重发、确认、包的路径选择和数据加密等。

服务员代理:

把接收到的调用包进行参量拆包,把参数取出后发给服务员程序,将服务员程序的处理结果进行打包、交给通信程序。

服务员程序:

完成调用的任务并把结果发回给服务员代理。

RPC解决的问题:

A、如何在报文中表示不同机型的参数和结果

B、RPC透明性带来的服务员追位问题

C、广播通信的问题

D、可靠性语言问题

 

三、说明并发服务员的工作原理,说明/*…..*/的含义。

工作原理:

并发服务员利用生成其它服务器的方法来处理客户请求。

也就是说,每个客户都有自己对应的服务员,如果操作系统允许许多任务,那么就可以同时为多个客户服务,一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外。

实现流程:

C1、等待一个客户请求到来;

C2、启动一个新的服务器来处理这个客户的请求,在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。

这个步骤是如何完成的取决于操作系统。

生成的新服务器对客户的全部请求进行处理。

处理结束后,终止这个新的服务器。

C3、返回C1。

含义:

1、建立一个socket描述符

2、开始监听已绑定的端口

3、创建一个新的子进程

4、当前处于子进程中,关闭最初用来监听的socket描述符

5、已完成通信退出子进程

6、当前处于父进程,关闭客户端连接时创建的socket描述符

pid_tpid;

intlistenfd,connfd;

listenfd=Socket(...);/*....1....*/

Bind(listenfd,...);

Listen(listenfd,LISTENQ);/*....2....*/

For(;;){

connfd=Accept(listenfd,..);

if((pid=Fork())==0){/*....3...*/

Close(listenfd);/*....4...*/

Doit(connfd);

Close(connfd);

Exit(0);/*....5...*/

}

Close(connfd);/*....6...*/

}

四、守护进程原理、启动方法及inetd守护进程工作过程。

原理:

1、守护进程(daemon)是在系统后台运行不受终端控制的进程,只要系统没有关机或者崩溃,守护进程将在系统中不间断地运行。

Unix系统中一般有很多守护进程执行不同的系统任务。

2、为了保证守护进程正常地工作,必须使守护进程和其它进程运行的环境隔离开,避免由于其它进程的行为影响守护进程的工作。

3、守护进程要脱离所有的终端的原因是:

(1)因为守护进程可能是从终端上启动,在这之后这个终端可能执行其它的任务。

(2)由终端上的一些键(热键)所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。

Inetd工作过程:

(1)启动时读入/etc/inetd.conf文件,并且为该文件中每一个服务员生成一个类型适当的(流/数据报)管座。

(2)生成每一个管座后要执行bind(),为该服务员指定一个众所周知的地址。

查找/etc/services文件中的构造文件的service_name字段可以得到TCP/UDP端口号。

(3)对于流管座要执行listen(),表示希望在该管道上接收连接,并指定用于输入连接的队列的长度。

对于数据报管座不必执行这一步。

(4)执行select(),等待第一个管座变为可读入。

当一个连接请求到达流管座时就认为它变为可读;对于数据报管座来说,当数据报到达时就变为可读。

(5)当一个管座变为可读时,若它是流管座,则执行accept()系统调用接受该连接。

(6)fork(),并且由子进程来处理这个服务请求。

(7)如果这个管座是一个流管座,那么父进程必须把这个连接的管座关闭。

父进程再一次执行select()系统调用,等待下一个管座变为可读。

启动方法:

1.在系统启动时很多守护程序是由系统初始化脚本启动。

这些脚本一般在/etc目录或者以/etc/rc开头的目录下,它们的位置和内容依赖于具体的实现。

由这些脚本启动的守护进程在开始时拥有超级用户权限。

例如,syslog守护进程、inetd守护进程、Web服务员守护进程等等。

2.许多网络服务员是由inetd超级服务员启动的。

inetd自身是由上一步中的某个脚本启动的。

Inetd监听所有的网络请求,当请求到来时根据请求的类型启动实际的服务员(例如,收到一个FTP请求,inetd就启动一个FTP服务员)。

3.cron守护进程按规则定期执行一些程序,由它启动的程序也以守护进程的方式运行。

cron自身是在系统启动过程中由第一步启动的。

4.可以用at命令指定在将来的某个时刻执行程序。

at守护进程在到达相应的时间时会启动程序,被启动的程序以守护进程的方式运行。

5.不管是前台还是后台,守护进程也可以在终端上启动,这在调试守护进程或守护进程由于某种原因终止而需要重新启动时经常使用。

五、网络程序设计时需要保证一个对象只有一个实例在系统中运行,举例说明如何保证。

使用动态对象

单例模式(singleton),原理如下:

1、将类的创建设为私有。

2、提供一个全局访问点,使外部能生成此类实例,即有一个公共方法。

3、判断是否存在类的实例,如果不存在创建方法。

如果是多线程环境,则:

4、通过对程序段加锁的方法,使其不再“同时”生成实例。

5、加锁之前判断是否有实例存在;进入锁后,在判断一次是否有实例存在,这是为了避免同时到达锁多个进程,一些等锁的后续进程获得执行权时要再判断一次。

示例:

(下图注释是上述原理的标号)

Classsingleton

{

Privatesingleton(){…}//1

PublicstaticsingletonGetinstance()//2

{

If(instance==null)//3

{

lock(syncRoot)//4

{

If(instance==null)//5

{

Instance=newsingleton();//3

}

}

}

}

returninstance;

}

六、一个理想路由算法应具有哪些特征,试说明这些特性。

(1)正确性。

即路由算法必须是正确的,路由不能有回路,否则数据包就可能在网络中无穷循环,不但不能被传送到目的节点,而且还浪费掉大量的网络资源。

(2)简单性。

即算法在计算上应该简单。

在每个节点上由于要进行路由选择的计算,因此,必然要增加包的延迟。

计算简单可以使延迟增加很少。

☐(3)坚定性。

是指可靠性,长时间运行不会出现整个系统的故障。

在系统运行的期间内,软件和硬件会出现各种各样的故障,设备和链路要更换,网络拓扑结构可能要改变。

坚定的路由算法应能应付这些情况,在这些情况出现时,不必让整个网络系统重新启动。

例如当某个设备发生故障时,只要整个网络还是连通的,算法应能及时改变路由,绕过出故障的节点。

☐(4)稳定性。

指算法是收敛的。

即当网络拓扑和通信量发生变化时,路由算法应收敛于一个可以接受的解,而不会产生过多的震荡,使其在一些路由之间来回不停的变化。

☐(5)公平性。

指各通信节点利用信道的机会均等,不会使有的节点上的负载过重,而有的节点上的负载过轻。

☐(6)最佳性。

指按一定的标准获得最好的效果,例如,平均包延迟最小,整个网络的吞吐量最大等。

当然不同要求显然是相互制约的。

不可能存在一个绝对的最佳路由算法。

但我们应该在这些相互制约的要求中寻找一个较满意的平衡。

 

七、B/S和C/S的机构原理,以及他们的优缺点

B/S模型结构和工作原理:

B/S模式,即浏览器/服务器模式,是一种从传统的二层C/S模式发展起来的新的网络结构模型,其本质是三层结构C/S模型。

原理:

在B/S模式中,客户端运行浏览器软件。

浏览器以超文本形式向Web服务器提出访问数据的要求,Web服务器接收客户端请求后,将这个请求转化为SQL语法,并交给数据库服务器,数据库服务器得到请求后,验证其合法性,并进行数据处理,然后将处理结果返回给Web服务器,Web服务器再一次将得到的结果进行转化,变成HTML文档形式,转发给客户端浏览器以友好的Web页面形式显示出来。

 

B/S模式的特点:

1、系统开发、维护和升级的经济性

对于大型的管理信息系统,软件开发、维护与升级费用是非常高的,B/S模式所具有的框架结构可以大大节省这些费用。

同时,B/S模式对前台客户机的要求并不高,可以避免盲目进行软件升级造成的巨大浪费。

2、B/S模式提供了一致的用户界面

B/S模式的应用软件是基于Web服务器的,这些浏览器的界面都很相似。

对于无用户交互功能的页面,用户接触的界面都是一致的,从而降低了软件的培训费用。

3、B/S模式具有很强的开放性

在B/S模式下,外部用户也可以通过浏览器进行访问。

4、B/S的结构易于拓展

由于Web的平台无关性,B/S模式结构可以任意扩展,可以从一台服务器、几个用户的工作组扩展成拥有成千上万用户的大型系统。

5、B/S系统具有更强的信息系统集成性

在B/S模式下,集成解决企事业单位各种问题的服务,而非零散的单一功能的多系统模式因而他提供了更高的工作效率

6、B/S模式提供灵活的信息交流和信息发布服务

B/S模式借助Internet强大的信息发布和信息传送功能可以有效的解决企业内部的大量不规则的信息交流。

C/S网络模式的结构、工作原理和特点:

C/S模式是一种两层结构的系统:

第一层是在客户机系统上结合表示与业务逻辑;第二层是通过网络结合数据库服务。

C/S模式主要由客户应用程序、服务器管理程序和中间件三个部分组成。

首先,交互性强是C/S固有的一个优点。

在C/S中,客户端有一套完整应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。

其次,C/S模式提供了安全存取模式。

由于C/S配备是点对点结构模式采用适用于局域网、安全性可以得到可靠保障。

而B/S采用点对点,多点对多点这种开放的结构模式,并采用TCP/IP这一类运用于Internet的开放协议,其安全性只能靠数据服务器上的管理密码的数据库来保证。

由于C/S在逻辑结构上比B/S少一层对于相同的任务,C/S的速度总比B/S要快使得C/S更有利于处理大量的数据。

由于客户端实现与服务器直接相连,没有中间环节,因此相应速度快。

由于开发具有针对性,因此,操作界面漂亮,形式多样,可以充分满足客户的自身个性化需求。

但缺少通用性,业务的变更需要重新设计和开发,增加了管理和维护的难度,进一步的业务拓展困难较多。

不过此部分对于管理制度成熟的仓库企业而言,其难度并不大。

C/S与B/S的区别:

1、硬件环境不同。

C/S一般建立在专用网络上,小范围里的网络环境,局域网之间在通过专门的服务器提供连接与数据交换服务。

B/S建立在广域网之上,不必专门的网络硬件环境,有比C/S更强的适应范围,一般只要有操作系统跟浏览器就行。

2、对安全要求不同。

C/S一般面向固定的用户群,对信息安全的控制力很强,一般高度机密的信息系统采用C/S结构适宜,可以通过B/S发布部分公开信息。

B/S建立在广域网上,对安全的控制能力相对较弱,面向不可知的用户群。

3、对程序框架不同。

C/S程序更加注重流程,可以对权限多层次校验,对程序运行速度可以较少考虑。

B/S对安全及访问速度的多重考虑,建立在需要更加优化的基础之上,比C/S有更高的要求,B/S的程序框架是发展的趋势。

4、软件重用不同。

C/S程序可以不避免的整体性考虑,构件的重用性不如在B/S要求下的构件重用性好。

B/S对的多重结构,要求构件相对独立的功能。

能够相对较好的重用。

5、系统维护不同。

C/S程序由于整体性,必须整天考察、处理出现的问题以及升级。

升级难,可能需要做一个全新的系统。

B/S构件组成方便构件个别替换,实现系统的无缝升级。

系统维护开销减到最小。

用户自己从网上下载安装就可以实现升级。

6、处理问题不同。

C/S程序可以处理用户面固定,并且在相同区域,安全要求高,与操作系统相关。

应该都是相同的系统。

B/S建立在广域网上,面向不同的用户群,分散地域,这是C/S无法做到的,与操作系统关系最小。

7、用户接口不同。

C/S多是建立在Window平台上,表现方法有限,对程序员普遍要求高。

B/S建立在浏览器上,有更加丰富生动的的表现方式与用户交流,并且大部分难度降低,降低开发成本。

8、信息流不同。

C/S程序一般是典型的中央集权的机械处理,交互性相对低。

B/S信息流向可变化,B-B、B-C、B-G等信息、流向变化,更像交易中心。

 

八、TCP协议为了保证传输可靠性提供了哪些措施,说明其含义。

分割:

应用数据被分割成TCP认为最适合发送的数据块。

这和UDP完全不同,应用程序产生的数据报长度保持不变。

由TCP传递给IP的信息单位称为报文段或段(segment)。

定时重传:

当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。

如果不能及时收到一个确认,将重发这个报文段。

这里要求发送端在收到确认信息前必须保留该报文段的副本,一旦不能及时收到确认信息,才能重发该报文段。

确认:

当TCP收到发自TCP连接另一端的数据,它将发送一个确认。

通常这个确认不是立即发送,将延迟几分之一秒。

检查和:

TCP将保持它首部和数据的检查和。

这是一个端到端的检查和,目的是检查数据在传输过程中的变化。

如果收到一个段的检查和有差错,TCP将丢弃这个报文段,同时向该报文段的发送方发送否定的信息,表示收到的报文段有错误,希望对方重发该报文段。

顺序控制:

TCP报文段作为IP数据报中的数据来传送,而IP数据报的到达可能乱序,因此TCP报文段的到达也可能乱序。

如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序提交给应用层。

重复控制:

IP数据报会发生重复,因此TCP的接收端必须丢弃重复的数据。

流量控制:

TCP提供流量控制。

TCP连接的每一方都有固定大小的缓冲空间。

TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。

这种控制将防止较快主机致使较慢主机的缓冲区溢出。

TCP三次握手:

1、请求端发送一个SYN段指明客户想要连接的服务器的端口,以及初始序号(ISN)。

这个SYN段为报文段1。

2、服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。

同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。

一个SYN占用一个序号。

3、客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。

这三个报文段的传递完成了一个TCP连接的建立,如图2-5所示,这个过程也称为三次握手(three-wayhandshake)。

SYN

报文段1

SYNACK

报文段2

报文段3

ACK

TCP连接释放:

建立一个TCP连接需要三次握手,而释放一个TCP连接需要经过4次握手,这是由于TCP的半关闭(half-close)造成的。

一个TCP连接是全双工的,因此每个方向必须单独地进行关闭。

即当TCP连接的一方完成它的数据发送后就能发送一个FIN来终止这个方向的连接;当TCP连接的另一端收到一个FIN,它必须通知应用层对方已经终止了那个方向上的数据传送。

发送FIN通常是应用层进行关闭的结果。

收到一个FIN只意味着在这个方向上没有数据流动。

一个TCP连接在收到一个FIN后仍能发送数据。

这种情况对于利用半关闭的应用是可以的,尽管在实际的应用中只有很少的TCP应用程序这样做。

正常的关闭过程如图12-5所示。

首先进行关闭的一方(发送第一个FIN报文的一方)将执行主动关闭,而TCP连接的另一方(收到这个FIN报文的一方)执行被动关闭。

通常情况下,一方完成主动关闭而另一方完成被动关闭。

图2-6显示了释放一个TCP连接的典型握手顺序。

在这个图中,发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动产生的。

一个TCP连接通常是由客户端发起的,这样第一个SYN从客户传到服务器。

每一端都能主动关闭这个连接(即首先发送FIN报文)。

然而,一般由客户端决定何时终止连接,因为客户进程通常由用户交互控制。

FIN

服务员

客户

FIN的ack

向应用程序交付EOF

应用程序关闭

FIN的ack

FIN

应用程序关闭

TCP拥塞控制:

TCP使用确认来触发它的拥塞窗口长度的增大,所以,TCP被称为是自计时的。

算法:

①加性增,乘性减②慢启动③超时事件反应

1、乘性减:

发生一次丢包事件使拥塞窗口值congwin减半,下限为1MSS

加性增:

每收到一个ACK,congwin值增大1

2、慢启动:

TCP发送方初始congwin值为1MSS,每收到一个RTT,ongwin值翻倍增大,直

到发生第一次丢包事件,上限设置为Threshold。

3、对事件做出反应:

收到3个冗余ACK拥塞窗口减小到一半,然后线性增长,Theshold=congwin/2,超时事件发生后TCP让发送方进入慢启动阶段,收到冗余ACK,对其计数。

4、在收到3个冗余ACK后,取消慢启动阶段的行为,快速恢复。

 

九、说明IP路由表包括哪些信息,并说明IP路由选择主要完成的功能。

路由表信息:

(1)目的IP地址。

它既可以是一个完整的主机地址,也可以是一个网络地址,由该表中的标志字段来指定。

主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机。

(2)下一跳路由器(next-hoprouter)的IP地址,或者有直接相连的网络IP地址。

下一跳路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。

下一跳路由器通常不是最终的目的,但是它可以把数据报转发到最终目的。

(3)标志。

其中一个标志指明目的IP地址是网络地址还是主机地址;另一个标志指明下一跳路由器是否为真正的下一跳路由器,还是一个直接

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1