《网络程序设计》复习题2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、什么叫套接字?套接字按通信性质可以分为哪两类?
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
套接字按通信性质分:会话套接字和数据报套接字。
2、理解线程的创建与使用方法,并能应用到程序设计中。P66
3、异构环境下的网络程序设计需要考虑哪些问题?
1)字节顺序:不同的平台以不同的方式存放一个二进制数。最常见的有两种格式:大数
在前的字节顺序和小数在前的字节顺序。大数在前的字节顺序是指将一个多字节数的高序字节存储在内存的起始地址;而小数在前的字节顺序则相反,将低序字节存储在内存的起始地址。
2)字的长度:不同的实现对于相同的数据类型可能有不同的表示长度。
3)字节定界问题:不同的平台上为结构体(struct)或共同体(union)打包的方式也是
不同的,这取决于所有数据类型的位数及机器的定界限制。
4、为什么在数据结构struct sockaddr_in中,成员变量sin_addr和sin_port需要转换为网络字节顺序,而sin_family不需要呢?
Sin_addr和sin_port分别封装在包的IP和UDP层,必须要是网络字节顺序。
Sin_family域只是被内核使用来决定在数据结构中包含什么类型的地址,没有发送到网络上,所以它必须是本机字节顺序
5、从网络编程的角度来简述和比较IP地址和端口的作用。
端口:是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接受,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,端口操作类似一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件。
地址:网络通信中通信的两个进程在不同的机器上。这两个机器可能位于不同的网络,这些网络通过网络互联设备连接。因此需要三级寻址:某一主机与多个网络相连,必须指定一特定网络地址;网络上每一主机应有唯一的地址;每一主机上的每一进程有在主机上的唯一标识符。
6、为什么网络编程时需要考虑字节顺序问题?
7、WinSock编程中需要哪些文件?
8、UDP程序的工作模型隐含着通信标识五元组的建立过程。这五元组在UDP的客户与服务端是由哪些函数分别确定的?
9、什么是阻塞与非阻塞通信?请解释两者的区别。
通信包括阻塞和非阻塞两种模式。阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
区别:对于不同的协议,阻塞通信和非阻塞通信有不同的表现。以插口为例,在阻塞模式下,利用TCP协议发送一个报文时,如果低层协议没有可用空间来存放用户数据,则应用进程将阻塞等待直到协议有可用的空间。而在非阻塞模式下,调用将直接返回而不需等待。在应用进程调用接收函数接收报文时,如果是在阻塞模式下,若没有到达的数据,则调用将一直阻塞直到有数据到达或出错;而在非阻塞模式下,将直接返回而不需等待。对于UDP协议而言,由于UDP没有发送缓存,因此所有UDP协议即使在阻塞模式下也不会发生阻塞。
对于面向连接的协议,在连接建立阶段,阻塞与非阻塞也表现不一。在阻塞模式下,如果没有连接请求到达,则等待连接调用将阻塞直到有连接请求到达;但在非阻塞模式下,如果没有连接请求到达,等待连接调用将直接返回。
10、简述各种类型数据的发送与接收处理的方法。
11、简述基于UDP的客户机/服务器端socket编程流程。
12、什么是通信三元组和五元组?三元组和五元组每个元素在网络连接中起到什么作用?
三元组:(协议,本地地址,本地端口号);(在网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关(half-association),它指定连接的每半部分。)
五元组:(协议,本地地址,本地端口号,远地地址,远地端口号)(即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。)
13、为什么服务端在TCP通信过程中需要调用bind( )函数而客户端不需要?为什么客户机通常不需要绑定自己的端口号?
14、简述套接字Select模型原理,以及select模型的优势和不足。
15、简述阻塞模式服务器和客户端工作流程,以及阻塞模式套接字的优势和不足。
16、在实际应用中,很多TCP服务器程序在非正常退出时,如果立即重启服务器进程则会发生绑定服务器端口失败的错误,从而无法启动服务器进程,但等待一段时间后就可以了。为什么会发生这种情况呢?如何解决这个问题(或采取什么措施可以立即重启服务器进程)?(要求掌握setsockopt()函数的用法)
17、TCP程序的工作模型隐含着通信标识五元组的建立过程。这五元组在TCP的客户与服务端是由哪些函数分别确定的?
18、accept( )为什么要返回一个套接口?或者说,为什么要为每一个连接创建一个套接口来处理?UDP服务器端为什么不需要多个套接口?
19、理解生产者-消费者模型,理解线程的同步与互斥方法(event和critical-section),并能应用到程序设计中。
20、采用阻塞式I/O模型时,套接字函数recv()的返回值有哪几种?分别对应什么情况?
21、closesocket()函数和shutdown()函数有何差别?
shutdown()与closesocket()的区别shutdown()与closesocket()的区别。1) 如果关闭读,则接受缓冲区的未读出的所有数据都将丢失,以后不会再接受任何数据 2) 如果关闭写,如果输出缓冲区内有数据,则所有的数据将发送出去后将发送一个FIN信号而close 则是关闭该socket,马上发送FIN信号,所有的未完成发送或者接受的数据都将被丢失
对于慢速网络,应该先进行shutdown,然后一定的时间延迟,再close该socket.
22、什么是TCP的三次握手机制?为什么要使用TCP的三次握手机制?
含义:所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。
原因:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。三次握手时在存在包丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。1.请求端(通常称为客户)发送一个SYN段,指明客户打算连接的服务器的端口以及初始序号(SEQ)。这个SYN段为报文段1。2.服务器发回包含服务器的初始序号的SYN 报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1,用以对客户的SYN报文段进行确认。一个SYN占用一个序号。3.客户必须将确认序号设置为服务器的ISN 加1,用以对服务器的SYN报文段进行确认
23、服务器端并发的两种模型及编程实现。
考试形式:闭卷
考试时间:120分钟
考试题型:选择题(2’×10=20’)、简答题(10’×6=60’)、程序设计题(20’)