书籍卡片
《计算机网络与因特网》第五版
Douglas E.Comer著
ISBN 978-7-111-26831-4
目录
3.4 如果发送方式使用流模式,且每次总是发送1024B,那么因特网传递给接收方的数据块长度多少?
3.5 假设发送方想把一个数据块的副本传递给3个接收者,应使用哪个通信模式?
3.8 当两个应用软件在因特网上交互通信时,哪一个是服务器?
3.12 试列举出给定计算机上运行的客户和服务器的可能组合。
3.15 在用户输入服务器域名后,列出客户请求连接的服务器步骤。
3.16 为了同时处理多个客户请求,并发服务器要用的基本操作系统特性是什么?
3.26 假设套接字是打开的并创建了新线程,新线程可以使用该套接字吗?
3 因特网应用与网络编程
3.1 因特网中使用的两个基本通信模式是什么?
流模式&报文模式。
3.2 试给出因特网流模式通信的6个特征。
面向连接的;
一对一通信的;
一个个字节的序列;
任意长度的传输;
被大多数应用使用;
构建在TCP协议之上。
3.3 试给出因特网报文模式通信的6个特征。
无连接的;
多对多通信的;
一个个报文的序列;
每个报文限制最多64KB;
用于多媒体应用;
构建在UDP协议之上。
3.4 如果发送方式使用流模式,且每次总是发送1024B,那么因特网传递给接收方的数据块长度多少?
1024B。采用“流”机制来传送字节序列时,它不会对字节加入任何含义,也不会对序列加入任何边界。
3.5 假设发送方想把一个数据块的副本传递给3个接收者,应使用哪个通信模式?
报文模式。报文模式可以提供一对多的通信方式。
3.6 因特网报文传递语义的3个意外方面是什么?
1)丢失(即从未传递成功)
2)重复传递(有多个报文副本到达)
3)乱序传递
3.7 试给出面向连接系统所使用的一般算法。
一对应用进程请求建立连接 --》这对应用进程利用该连接交换数据 --》这对应用进程请求终止该连接。
3.8 当两个应用软件在因特网上交互通信时,哪一个是服务器?
服务器应用进程 | 客户应用进程 |
首先运行 | 随后运行 |
并不需要知道哪个客户将连接它 | 必须知道想要连接的服务器 |
被动等待来自客户的连接请求,且等待时间任意长 | 在需要通信的任何时候,发起连接请求 |
通过发送和接收数据来与客户进行通信 | 通过发送和接收数据来与服务器进行通信 |
在实现对一个客户的服务后,维持运行并等待另一个请求 | 在完成与服务器的交互后,可以终止运行 |
3.9 通过总结客户和服务器特征,试对两者进行比较。
客户 | 服务器 |
它是一个任意的应用程序,仅在需要进行远程访问时才暂时成为客户,同时还要完成其他的计算任务。 | 它是一个专门提供某种服务的专用特权程序,但同时可以处理多个远程客户的请求。 |
直接受用户介入操作。 | 在系统启动时自动被掉入执行,进行多次会话并持续不断地运行。 |
在用户的个人计算机上进行本地运行。 | 运行在大型、高性能计算机上。 |
主动地发起与服务器的连接请求。 | 被动地等待来自任意的远端客户的通信请求。 |
能访问所需的多种服务,但通常一次只与一个远地服务器请求连接。 | 接收来自任何客户的通信请求,但只提供单一服务。 |
不会特别地要求功能强大的计算机硬件。 | 要求功能强大的硬件和高级复杂的操作系统支持。 |
3.10 服务器和服务器类计算机有什么不同
服务器:一个被动等待通信的程序,而不是指运行服务程序的那台计算机。
服务器类计算机:专门用来运行一个或几个服务器程序的计算机本身。
3.11 数据能从客户流向服务器吗?为什么?
信息可以在客户与服务器之间沿任一方向或双向流动。
3.12 试列举出给定计算机上运行的客户和服务器的可能组合。
一台计算机可以运行:
1)单个客户
2)单个服务器
3)连接某服务器的多个客户副本
4)各自连接特定服务器的多个客户
5)各自提供特定服务端的多个服务器
3.13 所有的计算机都能高效地运行多个服务器吗?为什么?
一台功能强大的计算机可以同时提供多种服务,而每种服务都需要单独的服务器程序。
2.14 指定一个服务器要用哪两种标识符?
1)IP地址(标识计算机) —— 运行服务器的计算机的标识符
2)端口号(标识服务) —— 计算机上特定服务的标识符【服务器的软件利用请求中包含的端口号来决定服务器计算机上的哪一个应用软件去处理这个请求。】
3.15 在用户输入服务器域名后,列出客户请求连接的服务器步骤。
3.16 为了同时处理多个客户请求,并发服务器要用的基本操作系统特性是什么?
并发的服务器程序被分为主程序(线程)和句柄两部分,主程序只接受来自客户的连接请求,并为该客户创建一个控制线程;每一个控制线程只与一个客户交互,并执行句柄程序。当处理完一个客户后,该线程终止。这期间,主程序(线程)仍然保持活跃状态——在为一个客户请求创建一个线程后,主程序等待另一个请求的到来。
3.17 什么性能问题激发了P2P通信?
瓶颈:如果单个服务器提供某一特定服务,那么服务器和因特网间的网络连接可能成为瓶颈。
避免瓶颈的方法形成一个文件共享应用的基础。它的思想就是避免将数据安置在单个中央服务器上。从概念上讲,就是将数据平均分布在N个服务器上,并将每个客户的请求发送到合适的服务器上。由于一个服务器仅仅提供1/N的数据,所以服务器与因特网之间的业务流量只是单服务器结构中的1/N。因此,服务器软件可以运行在与一般客户机相同的计算机上。
3.18 请给出两个提供套接字APi的操作系统。
Windows;各类Unix;Linux;
3.19 一旦创建套接字后,应用程序如何引用该套接字?
当应用要创建一个套接字(socket)时,操作系统就返回一个小整数作为描述符,应用程序则使用这个描述符来引用该套接字。
3.20 套接字API的主要函数有哪些?
名称 | 使用者 | 含义 |
accept | 服务器 | 接受一个收到的连接请求 |
bind | 服务器 | 指定IP地址和端口号 |
close | 服务器、客户 | 终止通信 |
connect | 客户 | 连接到远端应用进程 |
getpeername | 服务器 | 获取客户IP地址 |
getsockopt | 服务器 | 获取套接字的当前选项 |
listen | 服务器 | 准备服务器使用的套接字 |
recv | 服务器、客户 | 接收输入的数据或报文 |
recvmsg | 服务器、客户 | 接收数据(报文模式) |
recvfrom | 服务器、客户 | 接收报文和发送者地址 |
send(write) | 服务器、客户 | 发送输出数据或报文 |
sendmsg | 服务器、客户 | 发送一个输出报文 |
sendto | 服务器、客户 | 发送一个报文(sendmsg的变形) |
setsockopt | 服务器、客户 | 改变套接字选项 |
shutdown | 服务器、客户 | 终止一个连接 |
socket | 服务器、客户 | 创建一个套接字(用以上使用的方式) |
3.21 请给出客户和服务器的典型函数调用流程。
3.22 与read和write相对应的函数是什么?
recv&send函数
3.23 客户可用bind函数吗?请解释。
不可用。服务器调用bing函数来指定将要接受连接请求的协议端口号,客户作为发送请求的主体,不需要指定端口号。
3.24 为什么要用符号常量INADDR_ANY?
计算机有多个地址,为了使服务器能在多穴主机上运行,使用符号常量INADDR_ANY指定一个端口号,使该计算机可以在任一个IP地址上使用这个端口号来接受连接请求。
3.25 函数sendto是用于流模式还是报文模式的?
报文模式。
3.26 假设套接字是打开的并创建了新线程,新线程可以使用该套接字吗?
可以。每个新创建的进程,都从创建它的线程那里继承所有打开套接字的一个副本。