2014大学Windows网络编程(机械工业出版社) 课后习题解答

1970-01-01 08:00

应用程序接收缓存拷贝 应用程序实现recvfrom()UDP套接口接收缓存 套接口实现接收 UDP协议实现

2. 在基于数据报套接字的网络应用程序设计中,假设客户端向服务器发送了两个数据报,

一个报文长度为800字节,另一个报文长度为1200字节,设置服务器端的接收缓冲区为1000字节,进行三次接收操作,请思考,服务器在三次接收操作时各发生何种现象,实际接收到的字节长度为多少?

解答:第一次接收操作接收到完整的800字节的报文,recvfrom()函数返回800; 第二次接收操作接收1000字节的报文,recvfrom()函数返回1000,第二个报文后续的200字节内容被截断丢弃;

第三次接收操作依赖于套接字的工作模式,如果是阻塞模式,则接收函数阻塞,如果设置了接收超时,则在超时时间到时返回接收超时错误;如果是非阻塞模式,则接收函数立刻返回,错误类型是WSAEWOULDBLOCK.

3. 总结使用UDP进行数据传输的应用程序应在哪些具体操作上考虑可靠性问题?

解答:由于UDP协议是一个不可靠的协议,使用UDP进行数据传输的应用程序会因为网络环境、主机环境的差异带来数据传递过程中发生丢失、乱序、重复等问题,那么在程序运行过程中需要考虑:

发送操作:发送出去的数据可能会丢失,需要考虑超时重传问题;发送目的地可能并不存在,需要判断目的应用程序的状态。

接收操作:接收到的数据可能重复,需要判断重复数据;接收到的数据可能是噪音,需

11

网络要排除噪音;接收到的数据可能乱序,需要考虑重组;可能无法接收到预期的数据,需要考虑反馈确认和流量控制问题。

第七章原始套接字编程

习题

1. 原始套接字在处理数据发送和接收时与流式套接字和数据报套接字有哪些不同?

解答:在使用原始套接字进行数据传输的编程过程中,增加了诸多操作,如套接字选项的设置、传输协议首部的构造、网卡工作模式的设定以及接收数据的过滤与判断等。

使用原始套接字发送数据需要填写的数据内容更加复杂,根据应用的不同,原始套接字可以有两种数据填充的选择:仅构造IP数据或构造IP首部和IP数据。此时程序设计人员需要根据实际需要对套接字选项IP_HDRINCL进行配置。

使用原始套接字接收数据时,网络接口提交给原始套接字的数据并不一定是网卡接收到的所有数据,如果希望得到特定类型的数据包,应用程序需要对套接字的接收进行控制,设定接收选项SIO_RCVALL,或者通过bind()、connect()函数明确端点地址。由于原始套接字的数据传输也是无连接的,网络接口提交给原始套接字的数据很可能存在噪音,因此在接收到数据后,需要对数据进行一定条件的过滤。

2. 某程序员在Windows 7环境下,使用原始套接字构造TCP的SYN请求实现半开端口扫描,但结果发现网络中并没有看到SYN请求的发送,请分析原因并给出解决思路。

解答:在Windows环境下,原始套接字的支持一直是个备受争议的问题,不同版本的Windows环境对原始套接字给出了一些限制。在Windows7、Windows Vista、Windows XP SP2和Windows XP SP3中,通过原始套接字发送数据的能力受到了诸多限制,其中对TCP的限制是TCP的数据不能通过原始套接字发送。

因此,如果仍要在Windows7环境下开发SYN半开端口扫描,那么需要选择其它的编

12

程方法,如WinPcap编程。

第八章网络通信中的I/O操作

习题

1. 简述阻塞与非阻塞、同步与异步的区别。

解答:同步和异步概念与消息的通知机制有关。对于消息处理者而言,在同步的情况下,由处理消息者自己去等待消息是否被触发;在异步的情况下,由触发机制来通知处理消息者,然后进行消息的处理。同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制。

阻塞和非阻塞与消息的处理机制有关。阻塞模式是指在指定套接字上调用函数执行操作时,在没有完成操作之前,函数不会立即返回。非阻塞模式是指在指定套接字上调用函数执行操作时,无论操作是否完成,函数都会立即返回。

同步与阻塞,异步与非阻塞并不是两对相同的概念,要注意消息的通知和消息的处理是不同的。

2. 简述WSAAsyncSelect模型和WSAEventSelect模型的主要区别和各自在使用中的优缺点。

解答:WSAAsyncSelect模型和WSAEventSelect模型都是Windows Sockets引入的异步处理网络I/O的基本方法。WSAEventSelect模型与基于WSAAsyncSelect的异步I/O模型的最主要的区别是网络事件发生时系统通知应用程序的方式不同。WSAAsyncSelect模型依赖消息通知,而WSAEventSelect模型允许在多个套接字上接收以事件为基础的网络事件的通知。

WSAAsyncSelect模型基于Windows消息机制实现,其优点是:在系统开销不大的情况下可以较简单地同时处理多个客户端的网络I/O。其缺点是:消息的运转需要有消息队列,

13

为了支持消息机制,就必须创建一个窗口来接收消息,另外,在一个窗口中处理大量的消息也可能成为性能的瓶颈。

WSAEventSelect模型不依赖于消息,所以可以在没有窗口的环境下比较简单地实现对网络通信的异步操作。该模型的缺点是等待的事件对象的总数是有限制的(每次只能等待64个事件),在有些应用中可能会因此受到限制。

3. 假设某Web服务器使用TCP协议通信,在同一时间会有上万个客户端同时在线访问,

试选择一种网络I/O通信的模型,使其能够充分发挥服务器所在系统的性能,并阐明原因。

解答:选择使用完成端口模型处理网络I/O,该模型内部提供了线程池的管理,可以避免反复创建线程的开销,同时可以根据CPU的个数灵活地决定线程个数,减少线程调度的次数,从而提高了程序的并行处理能力。由于其稳定、高效的并发通信能力,该模型适合于具有大量并发用户请求的场合。

4. 假设某时间服务器使用UDP协议通信,同一时间仅有少量客户端请求,每次请求的主

要过程是建立连接后获取时间,之后断开连接,试选择一种适合的网络I/O通信模型,并阐明原因。

解答:选择使用WSAAsyncSelect模型或WSAEventSelect模型处理网络I/O,这两个模型使用异步方式进行I/O事件通知,不会使应用程序阻塞于网络事件的等待上,灵活性较好,同时程序的实现比较简单,可以满足业务复杂性不高且对性能要求不高的简单时间服务器的设计需求。

第九章WinPcap编程

习题

1. 请比较使用原始套接字和WinPcap两种方式实现网络嗅探器的差别,从工作层次、数

据内容、协议类型和调用方法等方面进行区分。

解答:尽管原始套接字和WinPcap都能够对较低层的网络通信流量进行发送和接收,但

14

两种编程方法之间是有差别的,主要表现在以下几点:

1) 工作层次:在Windows环境下,WinPcap工作在网卡驱动之上,能够操控链路层的

原始数据帧;原始套接字工作在协议栈实现之上,能够操控网络层的原始数据包。 2) 数据内容:包括帧首部在内的所有内容都是可以被WinPcap捕获和构造的;使用原

始套接字接收和构造的数据不包括帧首部。

3) 协议类型:WinPcap可以发送和接收包括IP、ARP、RARP等协议上传输的数据;

原始套接字不能配置帧类型,因此只能发送和接收IP协议及IP协议承载的其它协议。

4) 调用方法:使用WinPcap需要安装WinPcap驱动;使用原始套接字不需要附加的驱

动。

15


2014大学Windows网络编程(机械工业出版社) 课后习题解答.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:自然之恋绿色生活有限责任公司创业计划书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: