福州大学网络程序设计考试随堂习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、socket()、bind()、connect()、listen()、accept()、close()在套接口编程中的作用各是什么?

socket():执行网络通信,进程调用socket函数,指定期望的通信协议

bind():将一个本地协议地址赋予一个套接口

connect():TCP客户端与服务器建立连接用connect函数

connect的三种出错返回

[1] 若TCP客户没有收到SYN分节的响应(ACK)——返回ETIMEOUT错误

[2] 若对客户的SYN响应是RST,则表示该服务器主机在指定端口上没有进程在等待与之连接

[3]称为硬错(hard error),客户收到RST立即返回

ECONNREFUSED错误

listen():监听端口:

未连接的套接口-- 被动套接口

内核应该接收指向该套接口的连接请求

套接口状态:CLOSED -- LISTEN

服务端在socket和bind后,accept前调用

accept(): TCP服务器调用

从已完成连接队列头返回下一个已完成连接

已完成队列为空,则进程睡眠

close():用来关闭套接口,终止TCP连接

2、Ping程序、Traceroute程序和ICMP消息守护程序的工作原理。

ping程序的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者.

Traceroute程序工作原理

1、向目的地发送一个TTL为1的UDP数据报

2、该数据报导致第一跳路由返送一个ICMP错误

3、每递增TTL一次发送一个UDP数据报,逐步确定下一跳路由器

4、当UDP数据报(TTL增加到一定大小后)到达最终目的地时,目标主机返送一个ICMP 错误

ICMP消息守护程序工作原理

1、UDP应用程序使用Unix域套接口的描述字传递机制,通过Unix域连接把自身的UDP套接口传递给icmpd共享

2、icmpd得到该套接口的拷贝后通过getsockname获取绑定在此套接口上的端口号,随即关闭该套接口的本地拷贝

3、icmpd一旦收到了由UDP应用进程通过绑定在它的UDP套接口上的端口发送的UDP数据报所引发的任何ICMP错误,就可以通过Unix域连接向该应用进程发送一个消息

4、UDP应用进程需要使用多路复用方式等待其UDP套接口和Unix域套接口中任何一个有数据到达而变为可读

3、CS模式下,循环服务器和并发服务器分别是什么,它们的特点和异同是什么?分别描

述TCP协议和UDP协议下两种服务器的流程,可绘制流程图。

1、重复服务器(iterative server),也称循环服务器

在同一个时刻只可以响应一个客户端的请求。这种服务器上的进程能够预知在短时间内可以处理完请求,便亲自处理它。例如,典型的服务是通报时间。

并发服务器(concurrent server)

在同一个时刻可以响应多个客户端的请求。这种服务器上的进程事先不能预知完成服务请求需要花多长时间,便以并发的方式处理它。

并发服务器通过激活别的进程来完成服务请求,而本身转入睡眠状态以等待另一个请求的到来。典型的服务是处理文件信息,例如对文件的访问和打印文件。

UDP循环服务器:

TCP并发服务器

基本流程:

创建侦听套接口,等待客户机的请求

接受到一个客户机请求时,创建一个子进程子进程进行数据处理

父进程继续等待新的客户机请求

4、什么是信号驱动IO?其特点是什么?基本流程是如何的?

信号驱动I/O模型:内核在描述字就绪时,发送SIGIO信号通知进程

特点:等待数据报期间,进程不被阻塞

信号驱动I/O模型的步骤:

1、设置信号捕获函数

2、调用函数fcntl,设置套接口属主(F_SETOWN选项)

3、启动信号驱动I/O方式

调用函数ioctl的FIOASYNC选项

或调用函数fcntl,用命令F_SETFL命令打开O_ASYNC标志

5、什么是守护进程?inetd守护进程的工作原理。

守护进程的特征:

1、所有守护进程都以超级用户优先权运行。

2、没有与任何控制终端关联。

3、父进程都是init进程

4、输出消息的方式:统一由syslog记录

5、生命期为系统的运行时间

6、一直等待某个事件的发生,并处理事件

7、调用其他进程处理各种请求

Syslogd守护进程三种方法产生记录消息:

1、内核例程调用log函数,用户进程(如syslogd)则可通过打开和读取/dev/klog设备即可读取消息

2、用户进程(如守护进程inetd)调用syslog函数产生记录消息

3、网络上其他主机将记录消息发向UDP端口514

inetd守护进程的工作流程:

1、启动阶段,读入/etc/inetd.conf文件并给该文件中指定的每个服务创建套接口。

将新创建的套接口加入到由某个select调用使用的描述字集中

2、为每个套接口调用bind,指定捆绑相应服务器的众所周知端口和通配IP地址。

根据配置文件中的service-name和protocol调用getservbyname

3、对每个TCP套接口,调用listen以接受外来的连接请求

数据报套接口不执行

4、调用select等待任何一个套接口变为可读

6、滤程序和协同程序的工作原理是什么?

实例——使用popen变换输入——过滤程序

1、应用程序向标准输出写一个提示

2、从标准输入读1行

3、通过popen,可以在标准输入和应用程序间插入一个过滤程序

4、过滤程序的变换功能

(1)路径名的扩充(2)记住输入的命令

例子中将输入复制到输出,并将大写字母变换为小写字母

协同进程

1、如果一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出——过滤程序即是协同进程

2、popen只提供连接到另一个进程的单行管道(标准输入/标准输出)

3、协同进程有连接到另一个进程的两个单行管道

(1)一个接到标准输入(2)另一个来自标准输出

(3)先将数据写到标准输入,处理后,再从标准输出读取数据

7、多播中的为什么要使用地址过滤?软硬件过滤方式有哪些?他们的特点是什么?

1、不完备过滤方法

散列(hash)函数法:

以太网接口卡要接收宿地址为以太网组地址时,对该组地址应用某个散列函数,计算出一个0~511之间的值,然后将该值在512位数位数组中对应的位置1

当一个目的地址为某个组地址的帧在线缆上经过时,接口对其宿地址应用相同的散列函数,比较散列值和位数组比较,判断是否接收该帧

老的网卡只有64位

2、完备过滤:

有些接口卡已经实现

3、没有组播过滤:

接收所有多播帧,称为多播混杂模式。

4、混合法:

接口卡既具有16个组地址的完备过滤能力,又有512位的散列结果数位数组作为补充

80个组地址的完备过滤,超出容量后进入多播混杂模式

8、什么是非阻塞式IO?套接口如何设置成非阻塞IO?这种方式的优点是什么?

非阻塞I/O模型:

通过fcntl( ),ioctl( )函数对套接口进行设置

使得I/O操作不能完成时,进程不进入休眠状态,返回错误

优点:当I/O操作不能完成时,进程还可以执行后续的程序代码,提高自身的工作效率

相关文档
最新文档