网络编程期末考试带答案.docx
《网络编程期末考试带答案.docx》由会员分享,可在线阅读,更多相关《网络编程期末考试带答案.docx(22页珍藏版)》请在冰点文库上搜索。
![网络编程期末考试带答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/f5adcd80-4a6d-43d9-8d51-3c0c5b03d815/f5adcd80-4a6d-43d9-8d51-3c0c5b03d8151.gif)
1、计算机网络:
是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
2、协议分层具有概念化和结构化的优点,每一层都建立在它的下层之上,使用它的下层提供的服务,下层对它的上层隐藏服务实现的细节。
3、一个机器上的第n层与另一个机器上的第n层交流,所使用的规则和协定合起来被称为第n层协议。
这里的协议,是指通信双方关于如何进行通信的一种约定,每个协议属于某个层次。
特定系统所使用的一组协议被称为协议栈。
4、OSI/RM(OpenSystemInterconnection/ReferenceModel,开放系统互连参考模型)将计算机网络通信定义为一个七层框架模型。
OSI模型中各个层的功能:
名称
层次
功能
物理层
1
实现计算机系统与网络间的物理连接
数据链路层
2
进行数据打包与解包,形成信息帧
网络层
3
提供数据通过的路由
传输层
4
提供传输顺序与相应信息
会话层
5
建立和中止连接
表示层
6
数据转换,确认数据格式
应用层
7
提供用户程序接口
5、TCP/IP参考模型
6、TCP(传输控制协议),TCP提供端到端的质量保证的数据传输,该层负责数据的分组、质量控制和超时重发等,对于应用层来说,就可以忽略这些工作。
7、UDP(用户数据报协议),UDP则只负责简单地把数据报从一端发送到另一端。
在TCP/IP中,网络应用程序使用两个信息来唯一标识一个特定的应用程序:
IP地址和端口号。
8、TCP/UDP协议簇的应用层协议包括finger(用户信息协议)、文件传输协议(FTP)、超文本传输协议(HTTP)、Telent(远程终端协议)、简单邮件传输协议(SMTP)、因特网中继聊天(IRC)、网络新闻传输协议(NNTP)。
9、网络应用程序使用两个信息来唯一标识一个特定的应用程序:
IP地址和端口号。
10、每个IP地址被分割成前缀和后缀两部分
11、网络地址转换(NetworkAddressTranslation,NAT):
是接入广域网(WAN)的一种技术,能够将私有(保留)地址转化为合法的IP地址,它被广泛应用于各种Internet接入方式和各种类型的网络中。
NAT不仅完美地解决了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
12、NAT的实现方式有三种:
即静态转换、动态转换和端口多路复用。
13、基于NDIS的网络编程
网络驱动程序接口规范(NetworkDriverInterfaceSpecification,NDIS):
是一个较为成熟的驱动接口标准,它包含局域网网卡驱动程序标准、广域网网卡驱动程序标准以及存在于协议和网络之间的中间驱动程序标准。
它为网络驱动抽象了网络硬件,指定了分层网络驱动间的标准接口,因此,它为上层驱动(如网络传输)抽象了管理硬件的下层驱动。
同时NDIS也维护了网络驱动的状态信息和参数,这包括到函数的指针、句柄等。
NDIS在网络编程中占据着重要的地位,许多编程方法都是基于NDIS实现的。
第二章
1、网络程序通信模型:
是网络应用程序设计的基础,决定了网络功能在每个通信节点的部署。
2、在计算机网络环境中,运行于协议栈之上并借助协议栈实现通信的网络应用程序,为用户提供了使用网络的简单界面,主要承担三个方面的功能:
1)实现通信能力
在协议簇的不同层次上选择特定通信服务,调用相应的接口函数实现数据传输功能。
比如在文件传输应用中,使用客户/服务器模型,选择TCP协议完成数据传输。
2)处理程序逻辑
根据程序功能,对网络交换的数据进行加工处理,从而满足用户的种种需求。
以文件传输为例,网络应用程序应具备对文件的访问权限管理、断点续传等维护功能。
3)提供用户交互界面
接受用户的操作指示,将操作指示转换为机器可识别的命令进行处理,并将处理结果显示于用户界面。
在文件传输应用中,需提供文件下载选项、文件传输进度的实时显示等界面指示功能。
3、在网络应用进程通信时,最主要的进程间交互的模型是客户/服务器(Client/Server,C/S)模型。
4、在客户/服务器模型中,客户和服务器分别是两个独立的应用程序,即计算机软件。
(1)客户(Client),请求的主动方,向服务器发出服务请求,接收服务器返回的应答。
(2)服务器(Server),请求的被动方,开放服务,等待请求,收到请求后,提供服务,做出响应。
(3)用户(User),使用计算机的人。
5、客户/服务器模型最重要的特点:
是非对等相互作用,即客户与服务器处于不平等的地位
6、客户/服务器模型相互作用的简单过程如图2-2所示:
7、首先服务器要先启动,并根据客户请求提供相应的服务,服务器的工作过程如下:
1)打开一个通信通道,告知服务器进程所在主机将要在某一公认的端口(通常是RFC文档中分配的知名端口或双方协商的端口)上接收客户请求。
2)等待客户的请求到达该端口。
3)服务器接收到服务请求,处理该请求并发送应答。
4)返回第2步,等待并处理另一个客户的请求。
5)当特定条件满足时,关闭服务器。
客户采取的是主动请求方式,其工作过程如下:
1)打开一个通信通道,告知客户进程所在主机将要向某一公认的端口(通常是RFC文档中分配的知名端口或双方协商的端口)上请求服务。
2)向服务器发送请求报文,等待并接收应答,然后继续提出请求。
3)请求结束后,关闭通信通道并终止进程。
8、服务器应具备处理以下问题的能力:
·鉴别——验证客户的身份;
·授权——确定某个给定的客户是否被允许访问服务器所提供的服务;
·数据安全——确保数据不被无意泄露或损坏;
·保密——防止对有关个人的信息进行未授权的访问;
·保护——确保网络应用程序不能滥用系统资源。
9、对于网络应用程序的设计,首要的决定是在传输层选择一种传输服务:
无连接服务或面向连接服务。
10、使用TCP的服务器是面向连接的服务器。
11、使用UDP的服务器是无连接的服务器。
12、循环服务器通过在单线程内设置循环控制实现对多个客户请求的逐一响应。
13、将并发服务器引入的主要原因是需要给多个客户提供快速响应时间。
并发性可以在以下几种情况下缩短响应时间:
(1)构造响应要求有相当的I/O时间。
允许服务器并发地计算响应,意味着即使机器只有一个CPU,它也可以部分重叠地使用处理器和外设,这样当处理器忙于计算一个响应时,I/O设备可以将数据传送到存储器中,而这可能是其他响应所需要的,这使得服务器避免了无谓的I/0等待。
(2)每个请求需要的响应处理时间变化很大。
时间分片允许单个处理器处理那些只要求少量处理的请求,而不必等待处理完那些需要长处理时间的请求,这保证了服务器提供服务的公平性。
(3)服务器运行在一个拥有多处理器的计算机上。
可以允许不同处理器为不同的请求做出响应。
14、并发服务器通过使请求处理和I/O部分重叠而达到高性能。
15、循环服务器和并发服务器的选择取决于对单个客户请求的处理时延
16、循环服务器在以下两种情况下是不能满足应用需求的:
1)客户的观测响应时间远大于服务器的请求处理时间。
2)服务器的请求处理时间大于单个请求要求的时间范围。
17、客户/服务器模型的优缺点
客户/服务器模型的优点如下:
1)结构简单。
系统中不同类型的任务分别由客户和服务器承担,有利于发挥不同机器平台的优势。
2)支持分布式、并发环境。
特别是当客户和服务器之间的关系是多对多时,可以有效地提高资源的利用率和共享程度。
3)服务器集中管理资源,有利于权限控制和系统安全。
4)可扩展性较好。
可有效地集成和扩展原有的软、硬件资源。
以前在其他环境下积累的数据和软件均可在C/S中通过集成而继续使用,并且可以透明地访问多个异构的数据源,自由地选用不同厂家的数据应用开发工具,具有高度的灵活性,客户和服务器均可单独地升级。
客户/服务器模型存在以下局限:
1)缺乏有效的安全性。
由于客户与服务器直接相连,当在客户上存取一些敏感数据时,由于用户能够直接访问中心数据库,就可能造成敏感数据的修改或丢失。
2)客户负荷过重。
随着计算机处理的事务越来越复杂,客户程序也日渐冗长。
同时由于事务处理规则的变化,也需要随时更新客户程序,这就相应地增加了维护困难和工作量。
3)服务器工作效率低。
由于每个客户都要直接连接到服务器以访问数据资源,这就使得服务器不得不因为客户的访问而消耗大量原本就十分紧张的服务器资源,从而造成服务器工作效率不高。
4)容易造成而网络阻塞。
多个客户对服务器的同时访问可能会使得服务器所处的网络流量剧增,进形成网络阻塞。
18、在这种B/S模型中,用户界面完全通过www浏览器实现,一部分事务逻辑在前端(浏览器)实现,但是主要事务逻辑在服务器端实现,通常以三层架构部署实施。
主要包括以下三层:
·客户端表示层。
由Web浏览器组成,它不存放任何应用程序。
·应用服务器层。
由一台或多台服务器(Web服务器也位于这一层)组成,处理应用中的所有业务逻辑、对数据库的访问等工作。
该层具有良好的可扩展性,可以随着应用的需要任意增加服务器的数目。
·数据中心层。
由数据库系统组成,用于存放业务数据。
19、浏览器/服务器模型的优缺点
浏览器/服务器模型的优点是:
1)具有分布性特点,可以随时随地进行查询、浏览等业务处理;
2)业务扩展简单方便,通过增加网页即可增加服务器功能;
3)维护简单方便,只需要改变网页,即可实现所有用户的同步更新;
4)开发简单,共享性强。
浏览器/服务器模型的缺点是:
1)操作是以鼠标为最基本的操作方式,无法满足快速操作的要求;
2)页面动态刷新,响应速度明显降低;
3)功能弱化,难以实现传统模式下的特殊功能要求。
20、P2P的基本概念
P2P可以定义为:
网络的参与者共享它们所拥有的一部分资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其他对等节点(Peer)直接访问而无需经过中间实体。
在此,网络中的参与者既是资源(服务和内容)提供者(Server),又是资源获取者(c1ient)。
21、P2P模型具有以下特征:
·非中心化P2P是全分布式系统,网络中的资源和服务分散在所有的节点上,信息的传输和服务的实现都直接在节点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。
·可扩展性。
用户可以随时加入该网络,服务器的需求增加,系统的资源和服务能力也同步扩充。
·健壮性。
P2P架构天生具有耐攻击、高容错的优点。
由于服务是分散在各个节点之间的,部分节点或网络遭到破坏对其他部分的影响很小。
P2P网络一般在部分节点失效时能够自动调整整体拓扑,保持其他节点的连通性。
·自治性。
节点来自不同的所有者,不存在全局的控制者,节点可以随时加入或退出P2P系统。
·高性价比。
性能优势是P2P被广泛关注的一个重要原因。
采用P2P架构可以有效地利用互联网中散布的大量普通节点,将计算任务或存储资料分布到所有节点上。
利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。
·隐私保护。
在P2P网络中,由于信息的传输分散在各节点之间,无需经过某个集中环节,用户的隐私信息被窃听和泄露的可能性大大缩小。
·负载均衡。
P2P网络环境下由于每个节点既是服务器又是客户,减少了传统C/S结构中对服务器计算能力、存储能力的要求,同时因为资源分布在多个节点上,更好地实现了整个网络的负载均衡。
22、P2P网络的拓扑结构
P2P系统细分为四种拓扑形式
(1)中心化拓扑(CentralizedTopology)
中心化拓扑的资源发现依赖中心化的目录系统,其优点是维护简单,资源发现效率高,缺点是与传统C/S结构类似,容易造成单点故障、访问的“热点”现象和版权纠纷等相关问题。
这是第一代P2P网络采用的结构模式,经典案例是著名的MP3共享软件Napster。
(2)全分布式非结构化拓扑(DecentralizedUnstructuredTopology)
全分布式非结构化拓扑在重叠网络(是建立在一个或多个现有网络上的独立的虚拟网络)上能够较快发现目的节点,面对网络的动态变化,体现了较好的容错能力,因此具有较好的可用性。
采用这种拓扑结构最典型的案例是Gnutella。
(3)全分布式结构化拓扑(DecentralizedStructuredTopology)
全分布式结构化拓扑主要采用分布式散列表(DistributedHashTable,DHT)技术来组织网络中的节点。
DHT是一个由广域范围大量节点共同维护的巨大散列表。
散列表被分割成不连续的块,每个节点分配一个属于自己的散列块,并成为这个散列块的管理者。
通过加密散列函数,一个对象的名字或关键词被映射为128位或160位的散列值。
DHT类结构能够自适应节点的动态加入/退出,有着良好的可扩展性、鲁棒性、节点ID分配的均匀性和自组织能力。
由于重叠网络采用了确定性拓扑结构,DHT可以精确地发现节点。
经典的案例是Tapestry、Pastry、Chord和CAN。
(4)半分布式拓扑(PartiallyDecentralizedTopology)
半分布式拓扑吸取了中心化拓扑和全分布式非结构化拓扑的优点,选择性能较高(处理、存储、带宽等方面性能)的节点作为超级节点(supernode或hub),在各个超级节点上存储了系统中其他部分节点的信息,发现算法仅在超级节点之间转发,超级节点再将查询请求转发给适当的叶子节点。
半分布式结构也是一个层次式结构,超级节点之间构成一个高速转发层,超级节点和所负责的普通节点构成若干层次。
采用这种结构的最典型的案例就是KaZaa。
第三章
网络通信可以在TCP/IP的各个层次上实现,层次越低,数据操控的能力越强。
我们看到的网络通信数据是以字节或位的形态传输的序列。
为了交换固定大小的多字节整数,发送者和接收者会提前定义报文的格式、字段的顺序和长度。
为了确切的获知在当前系统平台上整数类型的准确长度,可以使用sizeof()运算符
大端(big-endian)顺序:
高字节数据存放在内存低地址处,低字节数据存放在内存高地址处。
小端(1ittle-endian)顺序:
低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
什么时候需要使用字节顺序转换呢?
总结来看,有以下几种场景需要注意:
l)发送数据前,用户定义的数据类型为大于l字节(如2字节或4字节)的整数时,需要将主机字节顺序转换为网络字节顺序;
2)接收数据后,当需要将以字节流形式表示的网络数据转换为大于l字节(如2字节或4字节)的整数时,需要将网络字节顺序转换为主机字节顺序;
3)当使用解析函数如gethostbyname()、getserverbyname()、inet_addr()等后,数值都是以网络字节顺序的方式返回,不需要在发送前调用hton*()函数转换,否则会发生错误。
实际上计算机系统对于基本数据类型在内存中的存放位置都有限制,要求这些数据存储的首地址是某个数K的倍数,这样各种基本数据类型在内存中就是按照一定的规则排列的,而不是一个紧挨着一个排放,这就是“内存对齐”。
内存对齐中指定的对齐数值K称为对齐模数(a1ignmentmodu1us)。
内存对齐作为一种强制性要求,简化了处理器与内存之间传输系统的设计,并可以提升读取数据的速度。
微软C编译器(cl.exefor80x86)的对齐策略是:
1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
编译器在给结构体分配空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能被该基本数据类型所整除的位置,作为结构体的首地址。
将这个最宽的基本数据类型的大小作为上面介绍的对齐模数。
2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要,编译器会在成员之间加上填充字节。
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一个成员之后加上填充字节。
一般情况下,在通信两端进行数据交互的数据格式有文本串和二进制两种形态。
文本串是一类可打印的字符串,是表示信息的最常用方式,使用文本串比较有代表性的协议有HTTP协议、MSN通信协议等
二进制格式的消息使用固定大小的数据区域存储消息,是表示信息的常用方式,比较有代表性的例子有IP、TCP等
计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。
为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换和处理的要求。
Unicode(统一码)
Unicode编码系统可分为编码方式和实现方式两个层次。
进行差错检测和差错控制的主要方法是:
在需要传输的数据分组后面加上一定的冗余信息,这些冗余信息通常是通过对所发送的数据应用某种算法进行计算而得到的固定长度的数值。
数据的接收方在接收到数据后进行同样的计算,与接收到的冗余信息进行比较。
如果数据在传输过程中没有发生任何差错,那么接收方计算的结果应该与发送方计算的校验和相同,否则表明校验和错误。
当发生校验和错误时,接收方丢弃收到的数据,由上层发现数据包丢失并进行重传,以此保证数据传递的可靠性。
协议
校验和覆盖范围
IPv4
IPv4首部
UDP
UDP伪首部+UDP首部+UDP数据
TCP
TCP伪首部+TCP首部+TCP数据
第四章
1.协议软件接口承担应用程序与操作系统协议实现之间的桥梁作用,它封装了协议实现的基本功能
2.TCP/IP和使用它的应用之间的接口是不精确指明的。
3.真实的网络通信功能是由协议栈具体完成的
4.发送接口函数成功返回并非意味着数据已经发送出去
5.协议软件接口可以按照两种方法来实现:
第一种方法是设计者发明一种新的系统调用,应用程序用它们来访问TCP/IP,这要求设计者列举出所有的概念性操作,为每个操作指定一个名字和参数,将每个操作实现为一个系统调用;第二种方法是设计者沿用一般的I/0调用,对其进行扩充,使其既可以同网络协议又可以同一般的I/O设备一起工作。
在实际运用中,许多设计者选择了这两种方法的混合,即尽可能使用基本的I/O功能,但对那些不能方便表达的操作则增加其他的函数。
6.但分布在网络上两台主机中的两个进程相互通信面临诸多问题:
1)网间进程的标识问题。
2)多重协议的识别问题。
3)多种通信服务的选择问题。
7.后来的许多操作系统并没有另外开发一套其他的编程接口,而是选择了支持Socket编程接口。
例如windows操作系统、各种UNIX系统(如Sun公司的Solaris)以及各种Linux系统都实现了BSDUNIXSocket编程接口
8.套接字接口并没有直接使用协议类型来标识通信时的协议,而是采用一种更灵活的方式——协议簇+套接字类型,以方便网络应用程序在多协议簇的同类套接字程序中移植。
9.在socket通信中,常用套接字类型包括三类:
·流式套接字(SOCK_STREAM)
·数据报套接字(SOCK_DGRAM)
·原始套接字(SOCK_RAW)
10.单个主机内的应用程序、套接字、协议和端口号之间的逻辑关系。
关于这些关系要注意四点:
1)一个程序可以同时使用多个套接字,不同套接字完成不同的传输任务。
2)多个应用程序可以同时使用同一个套接字,不过这种情况并不常见。
3)每个套接字都有一个关联的本地TCP或UDP端口。
它用于把传入的分组指引到应该接收它们的应用程序。
端口,标识了主机上的套接字,进而标识了主机上的特定应用程序。
4)TCP和UDP的端口号是独立使用的,有时候一个TCP的端口号也会关联多个套接字。
因此不能仅仅用端口来标识套接字,不过尽管如此,TCP仍然有能力清晰地区分开关联在一个端口上的多个套接字。
11.进行网络通信时至少需要一对套接字,其中一个运行在客户端,称之为客户套接字,另一个运行于服务器端,称之为服务器套接字。
12.网络应用程序的通信总是以套接字为线索,以五元组(源IP、源端口、目的IP、目的端口、协议)为通信基础进行数据传输,其基本过程如下:
1)建立一个Socket。
2)配置Socket。
3)连接Socket(可选)。
4)通过Socket发送数据。
5)通过Socket接收数据。
6)关闭Socket。
13.使用套接字进行数据处理有两种基本模式:
同步和异步
同步模式的特点是在通过Socket进行连接、接收、发送数据时,客户和服务器在接收到对方响应前会处于阻塞状态,即一直等到I/O条件满足才继续执行下面的操作。
同步模式只适用于数据处理不太多的场合。
当程序执行的任务很多时,长时间的等待可能会让用户无法忍受。
异步模式的特点是在通过Socket进行连接、接收、发送操作时,客户或服务器会利用多种机制获知I/O条件满足的事件,然后再进行连接、接收、发送处理,这样就可以更灵活、高效地处理网络通信。
异步套接字更加适用于进行大量数据处理、复杂网络I/O的场合。
14.windows套接字是windows环境下的网络编程接口,它最初源于UNIX环境下的BSDSocket,是一个与网络协议无关的编程接口。
15.WindowsSockets规范的目的在于为应用程序开发者提供一套简单的API,并让各家网络软件供应商共同遵守。
16.WindowsSockets一般由两部分组成:
开发组件和运行组件。
17.地址的种类
(1)物理地址;网络中的节点(主机或路由器)都有链路层地址,通常称之为物理地址或MAC地址,该地址是网络节点中适配器的唯一标识,存在于每个数据包的帧首部。
在不同类型的物理网络中,物理地址的长度和内容可能会有差别。
物理地址仅应用在局域网中,一旦数据包离开局域网,其链路层的源和目的物理地址都会发生改变。
(2)IP地址:
互联网上每个主机和路由器都有IP地址,它将网络号和主机号编码在一起。
在IPv4环境下,IP地址长度为32位;在IPv6环境下,IP地址长度为128位。
IP地址存在于IP数据包的首部,在全网范围内唯一标识该数据包的发送端和目的端。
(3)端口号:
网络层的IP地址用来寻址指定的计算机或者网络设备,而传输层的端口号用来确定发送给目的设备上的哪个应用程序接收该数据包。
端口号存在于传输层的TCP或UDP的报文首部,范围在0~65535之间。
许多公共服务都使用固定的端口号,例如WWW服务默认使用80号端口,FTP服务默认使用21号端口。
第五章
TCP协议是一个面向连接的传输层协议,提供高可靠性字节流传输服务,主要用于一次传输要交换大量报文的情形。
TCP协议的传输特点是:
(1)端到端通信:
TCP提供给应用面向连接的接口。
TCP连接是端到端的,客户应用程序在一端,服务器在另一端。
(2)建立可靠连接:
TCP要求客户应用程序在与服务器交换数据前,先要连接服务器,保证连接可靠建立,建立连接测试了网络的连通性。
3)可靠交付:
一旦建立连接,TCP保证数据将按发送时的顺序交付,没有丢失,也没