赞
踩
在传输原语中, LISTEN 是一个阻塞调用。试问这是严格要求的吗?如果不是,请解释如何使用一个非阻塞的原语。与正文中描述的方案相比,你的方案有什么优点?解:不是。LISTEN可能表示愿意建立新的连接,而不是阻止。当尝试连接时,可以给调用者一个信号。然后,它将执行,例如,OK或REJECT接受或拒绝连接。
传输服务原语假设在两个端点之间建立连接的过程是不对称的,一端(服务器〉执行LISTEN,而另一端(客户端〉执行CONNECT 。然而,在对等应用中,比如BitTorrent那样的文件共享系统,所有的端点都是对等的。没有服务器或客户端功能之分。试问如何使用传输服务原语来构建这样的对等应用?
解:由于这两个端点是对等点,因此需要一个单独的应用程序级机制,在运行时通知端点哪个端将充当服务器,哪个端将充当客户端以及它们的地址。这样做的一种方法是有一个单独的协调程序,在建立端点之间的连接之前将此信息提供给端点。
在图示的底层模型中,它的假设条件是网络层的数据包有可能被丢失,因此,数据包必须被单独确认。假如网络层百分之百可靠,并且永远不会丢失数据包,试问图中需要做什么修改吗?如果需要的话(斜体标记的状态是由到达的包引起的。实线表示客户的状态序列,虚线表示服务器的状态序列)。
解:从被动建立到已建立的虚线不再取决于收到的确认。从本质上讲,被动建立待定状态消失了(因为客户机收到连接接收段之后不必发送确认段了,所以服务器可以在收到连接建立请求的时候就可以直接建立连接了,注)。
在本章的套接字编程实例的两部分中,有一条注释说明了SERVER PORT 在客户机和服务器中必须相同。试问为什么这一条如此重要?
解:如果客户端向服务器端口发送数据包,而服务器没有监听该端口,则该数据包将不会传递到服务器(所以双方必须约定一个特定端口,注)。
在Internet 文件服务器例子中,除了服务器端的监听队列为满之外,试问还有其他原因能导致客户机的connect ()系统调用失败吗?假设网络完美无缺。
解:服务器没有执行listen()方法调用(即服务器没有监听)
评判一个服务器是否全程活跃,或者通过进程服务器来按需启动它,的一个标准是它所提供服务的使用频率。试问你能想出作出这一决定的任何其他标准吗?
解:另一个标准是客户端如何受到进程服务器技术中涉及的额外延迟的影响(服务器可能在执行过程中,但是没有响应客户机而带来了延迟,应该是这个吧?注)。所请求的服务器必须加载,并且可能必须在客户端请求得到服务之前进行初始化(所以后半句是个解决方法,注)。
假设采用时钟驱动方案来生成初始序号,该方案用到了一个15 位的时钟计数器。每隔100 毫秒时钟滴答一次,最大数据包生存期为60 秒。试问,每隔多久需要重新同步一次?
(a )在最差情况下。
(b )当数据每分钟用掉240 个序号的时候。
解:(a)2的15次方,即32768次滴答,耗时3276.8秒。假定数据发送率极低(接近0),那么发送方在3276.8-60=3216.8秒时进入禁止区,需要同步一次
(b)每分钟使用 240 个序列号,即每秒使用 4 个号码,如果时间以 t 表示(以秒为单位),那么实际的序列号是 4t。现在由于每秒钟 10 个滴答,禁止区的左边是10(t-3216.8)。令 4t =10(t-3216.8),得 t=5316.3 秒。即当 t=5316.3 时,开始进入禁止区,因此当 t=5316.3 时需要进行一次重新同步。(此题好好研究。。。)
试问,为什么最大数据包生存期T 必须足够大,大到确保不仅数据包本身而且它的确认也消失在网络中?
解:下图中,如果ACK包到达后,如果还有一个老的对y的确认存活于网络中,那么就会建立一个不需要的连接(或许人生不应该在这几个题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。