计算机网络工程复习题及答案.docx
- 文档编号:7045379
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:13
- 大小:23.51KB
计算机网络工程复习题及答案.docx
《计算机网络工程复习题及答案.docx》由会员分享,可在线阅读,更多相关《计算机网络工程复习题及答案.docx(13页珍藏版)》请在冰豆网上搜索。
计算机网络工程复习题及答案
练习题二
习题九
【问题1】简答虚电路的原理。
【问题2】虚电路分为哪两种?
简述其定义。
【问题1】
在虚电路分组交换中,第一个分组决定随后所有分组要遵循的路由。
为了进行数据传输,网络的源节点与目的节点之间先建立一条逻辑通路,源节点先向目的节点发出呼叫请求,要求与目的节点建立连接,该呼叫请求是作为一个特殊的分组从源节点传送到目的节点的。
在虚电路建立起来之后,源节点就可以向目的节点发送若干个数据分组。
最后由源节点向目的节点发出拆除连接的请求,这样,整个连接就一段一段的断开了。
【问题2】
虚电路分为永久虚电路(PVC)和交换虚电路(SVC)。
PVC是在两个端用户之间建立的固定逻辑连接,为用户提供约定的服务。
SVC是使用ISDN信令协议Q.931临时建立的逻辑连接。
它要以呼叫的形式通过信令来建立和释放。
习题十
【问题1】帧中继协议运行在OSI参考模型的哪几层?
帧中继与x25的区别。
【问题2】帧中继广域网的设备分为几类?
【问题3】帧中继网络中通过什么来标识链路的?
帧中继本地管理接口(LMI)的作用?
【问题1】帧中继是一种高性能的WAN协议,它运行在OSI参考模型的物理层和数据链路层。
它是一种数据包交换技术,是X.25的简化版本。
它省略了X.25的一些强健功能,如提供窗口技术和数据重发技术,而是依靠高层协议提供纠错功能,这是因为帧中继工作在更好的WAN设备上,这些设备较之X.25的WAN设备具有更可靠的连接服务和更高的可靠性,它严格地对应于OSI参考模型的最低二层,而X.25还提供第三层的服务,所以,帧中继比X.25具有更高的性能和更有效的传输效率。
【问题2】帧中继广域网的设备分为数据终端设备(DTE)和数据电路终端设备(DCE),Cisco路由器作为DTE设备。
【问题3】帧中继技术提供面向连接的数据链路层的通信,在每对设备之间都存在一条定义好的通信链路,且该链路有一个链路识别码。
这种服务通过帧中继虚电路实现,每个帧中继虚电路都以数据链路识别码(DLCI)标识自己。
DLCI的值一般由帧中继服务提供商指定。
帧中继即支持PVC也支持SVC。
帧中继本地管理接口(LMI)是对基本的帧中继标准的扩展。
它是路由器和帧中继交换机之间信令标准,提供帧中继管理机制。
它提供了许多管理复杂互联网络的特性,其中包括全局寻址、虚电路状态消息和多目发送等功能。
缺问4及问题11
附:
一.TCP/IP服务
1、TCP/IP应用服务原理
TCP/IP应用服务采用客户机/服务器工作模式,服务器端启动守护进程,等待客户端的请求;服务器对应客户端的请求,派生子进程与客户进程进行数据通信,提供服务。
(1)服务器(HostA)首先要启动应用程序服务进程(守护进程Server),等待客户端的请求。
(2)当服务进程Server接收到客户端HostB的请求时,派生一个子进程(Child1)与HostB进行交互,实现数据通信,同时守护进程Server继续等待客户端的请求。
(3)当服务进程Server接收到客户端HostC的请求时,派生一个子进程(Child2)与HostC进行交互,实现数据通信,同时守护进程Server继续等待客户端的请求。
二.TCP/IP应用编程接口(API)
为了支持用户开发面向应用的通信程序,大部分系统都提供了一组基于TCP或者UDP的应用程序编程接口(API),该接口通常以一组函数的形式出现,称为套接字(Socket)。
TCP/IP应用程序之间的通信通过Socket进行。
服务器拥有全局公认的Socket,任何客户端都可以向它发出连接请求和信息请求。
客户端向操作系统随机申请一个Socket,系统为之分配一个Socket号。
Socket的系统调用库函数主要有:
1、创建套接字
Sockid=Socket(af,type,protocol)
2、建立地址和套接字的联系
bind(sockid,localaddr,addrlen)
3、服务器端侦听客户端的请求
listen(Sockid,quenlen)
4、建立服务器/客户端的连接(面向连接TCP)
客户端请求连接
Connect(sockid,destaddr,addrlen)
服务器端等待从编号为Sockid的Socket上接收客户连接请求
newsockid=accept(Sockid,Clientaddr,paddrlen)
5、发送/接收数据
面向连接:
send(sockid,buff,bufflen)
recv()
面向无连接:
sendto(sockid,buff,…,addrlen)
recvfrom()
6、释放套接字
close(sockid)
三.TCP/IP应用编程接口(API)的使用方法
/***************LINUXSOCKET编程例子;服务器程序********************/
#include
#include
#include
#include
#defineSERVER_PORT8888/*服务端口*/
#defineMAX_MSG_SIZE1024/*缓冲区的大小*/
#defineBACKLOG5/*等待服务的最大数*/
intServer_Proc(intsockfd)
/*服务过程;服务器接受一条消息,然后发送一条消息*/
{
intn;/*接受到的或发送的数据的字节数*/
charmsg[MAX_MSG_SIZE];/*缓冲区*/
n=recv(sockfd,msg,MAX_MSG_SIZE,0);
msg[n]=0;
printf("%s
",msg);/*在屏幕上打印出来*/
strcpy(msg,"hi,Iamserver!
");
n=send(sockfd,msg,sizeof(msg),0);
close(sockfd);
return1;
}
main()
{
intser_sockfd,/*服务器SOCKET*/
cli_sockfd;/*客户端SOCKET*/
interrno;
intaddrlen;
void*optval;
socklen_toptlen;
structsockaddr_inser_addr,/*服务器的地址*/
cli_addr;/*客户端的地址*/
ser_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET*/
if(ser_sockfd<0)
{/*创建失败*/
fprintf(stderr,"sockerError:
%s
",strerror(errno));
exit
(1);
}
/*初始化服务器地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
ser_addr.sin_port=htons(SERVER_PORT);
if(bind(ser_sockfd,(structsockaddr*)&ser_addr,
sizeof(structsockaddr_in))<0)
{/*棒定失败*/
fprintf(stderr,"BindError:
%s
",strerror(errno));
exit
(1);
}
/*侦听客户端请求*/
if(listen(ser_sockfd,BACKLOG)<0)
{
fprintf(stderr,"ListenError:
%s
",strerror(errno));
close(ser_sockfd);
exit
(1);
}
while
(1)
{/*等待接收客户连接请求*/
cli_sockfd=accept(ser_sockfd,(structsockaddr*)&cli_addr,
&addrlen);
if(cli_sockfd<=0)
{
fprintf(stderr,"AcceptError:
%s
",strerror(errno));
}
else
{/*开始服务*/
Server_Proc(cli_sockfd);
}
}
close(ser_sockfd);
}
/***********LINUXSOCKET编程例子;客户机程序******************/
#include
#include
#include
#include
#defineSERVER_PORT8888/*服务端口*/
#defineMAX_MSG_SIZE1024/*缓冲区的大小*/
intGetServerAddr(char*addrname)
{
printf("Pleaseinputserveraddr:
");
scanf("%s",addrname);
return1;
}
intClient_Proc(intsockfd)
/*客户端过程;服务器接受一条消息,然后发送一条消息*/
{
intn;/*接受到的或发送的数据的字节数*/
charmsg[MAX_MSG_SIZE];/*缓冲区*/
strcpy(msg,"hi,Iamclient!
");
n=send(sockfd,msg,sizeof(msg),0);
n=recv(sockfd,msg,MAX_MSG_SIZE,0);
msg[n]=0;
printf("%s
",msg);/*在屏幕上打印出来*/
return1;
}
main()
{
intcli_sockfd;/*客户端SOCKET*/
intaddrlen;
charseraddr[14];
structsockaddr_inser_addr,/*服务器的地址*/
cli_addr;/*客户端的地址*/
GetServerAddr(seraddr);
cli_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET*/
if(ser_sockfd<0)
{/*创建失败*/
fprintf(stderr,"sockerError:
%s
",strerror(errno));
exit
(1);
}
/*初始化客户端地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
cli_addr.sin_family=AF_INET;
cli_addr.sin_addr.s_addr=htonl(INADDR_ANY);
cli_addr.sin_port=0;
if(bind(cli_sockfd,(structsockaddr*)&cli_addr,addrlen)<0)
{
/*棒定失败*/
fprintf(stderr,"BindError:
%s
",strerror(errno));
exit
(1);
}
/*初始化服务器地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=inet_addr(seraddr);
ser_addr.sin_port=htons(SERVER_PORT);
if(connect(cli_sockfd,(structsockaddr*)&ser_addr,&addrlen)!
=0)/*请求连接*/
{
/*连接失败*/
fprintf(stderr,"ConnectError:
%s
",strerror(errno));
close(cli_sockfd);
exit
(1);
}
Client_Proc(cli_sockfd);
close(ser_sockfd);
}
/***************WINDOWSSOCKET编程例子;服务器程序********************/
#include"windows.h"
#include
#include
#defineSERVER_PORT8888/*服务端口*/
#defineMAX_MSG_SIZE1024/*缓冲区的大小*/
#defineBACKLOG5/*等待服务的最大数*/
intServer_Proc(intsockfd)
/*服务过程;服务器接受一条消息,然后发送一条消息*/
{
intn;/*接受到的或发送的数据的字节数*/
charmsg[MAX_MSG_SIZE];/*缓冲区*/
n=recv(sockfd,msg,MAX_MSG_SIZE,0);
msg[n]=0;
printf("%s
",msg);/*在屏幕上打印出来*/
strcpy(msg,"hi,Iamserver!
");
n=send(sockfd,msg,sizeof(msg),0);
close(sockfd);
return1;
}
main()
{
intser_sockfd,/*服务器SOCKET*/
cli_sockfd;/*客户端SOCKET*/
interrno;
intaddrlen;
void*optval;
socklen_toptlen;
structsockaddr_inser_addr,/*服务器的地址*/
cli_addr;/*客户端的地址*/
ser_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET*/
if(ser_sockfd<0)
{/*创建失败*/
errno=GetLastError();
fprintf(stderr,"sockerError:
%s
",strerror(errno));
exit
(1);
}
/*初始化服务器地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
ser_addr.sin_port=htons(SERVER_PORT);
if(bind(ser_sockfd,(structsockaddr*)&ser_addr,
sizeof(structsockaddr_in))<0)
{/*棒定失败*/
errno=GetLastError();
fprintf(stderr,"BindError:
%s
",strerror(errno));
exit
(1);
}
if(listen(ser_sockfd,BACKLOG)<0)/*侦听客户端请求*/
{
errno=GetLastError();
fprintf(stderr,"ListenError:
%s
",strerror(errno));
close(ser_sockfd);
exit
(1);
}
while
(1)
{/*等待接收客户连接请求*/
cli_sockfd=accept(ser_sockfd,(structsockaddr*)&cli_addr,
&addrlen);
if(cli_sockfd<=0)
{
errno=GetLastError();
fprintf(stderr,"AcceptError:
%s
",strerror(errno));
}
else
{/*开始服务*/
Server_Proc(cli_sockfd);
}
}
close(ser_sockfd);
}
/***********WINDOWSSOCKET编程例子;客户机程序******************/
#include
#include
#include
#defineSERVER_PORT8888/*服务端口*/
#defineMAX_MSG_SIZE1024/*缓冲区的大小*/
intGetServerAddr(char*addrname)
{
printf("Pleaseinputserveraddr:
");
scanf("%s",addrname);
return1;
}
intClient_Proc(intsockfd)
/*客户端过程;服务器接受一条消息,然后发送一条消息*/
{
intn;/*接受到的或发送的数据的字节数*/
charmsg[MAX_MSG_SIZE];/*缓冲区*/
strcpy(msg,"hi,Iamclient!
");
n=send(sockfd,msg,sizeof(msg),0);
n=recv(sockfd,msg,MAX_MSG_SIZE,0);
msg[n]=0;
printf("%s
",msg);/*在屏幕上打印出来*/
return1;
}
main()
{
intcli_sockfd;/*客户端SOCKET*/
intaddrlen;
interrno;
charseraddr[14];
structsockaddr_inser_addr,/*服务器的地址*/
cli_addr;/*客户端的地址*/
GetServerAddr(seraddr);
cli_sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建连接的SOCKET*/
if(ser_sockfd<0)
{/*创建失败*/
errno=GetLastError();
fprintf(stderr,"sockerError:
%s
",strerror(errno));
exit
(1);
}
/*初始化客户端地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
cli_addr.sin_family=AF_INET;
cli_addr.sin_addr.s_addr=htonl(INADDR_ANY);
cli_addr.sin_port=0;
if(bind(cli_sockfd,(structsockaddr*)&cli_addr,addrlen)<0)
{
/*棒定失败*/
errno=GetLastError();
fprintf(stderr,"BindError:
%s
",strerror(errno));
exit
(1);
}
/*初始化服务器地址*/
addrlen=sizeof(structsockaddr_in);
bzero(&ser_addr,addrlen);
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=inet_addr(seraddr);
ser_addr.sin_port=htons(SERVER_PORT);
if(connect(cli_sockfd,(structsockaddr*)&ser_addr,&addrlen)!
=0) /*请求连接*/
{
/*连接失败*/
errno=GetLastError();
fprintf(stderr,"ConnectError:
%s
",strerror(errno));
close(cli_sockfd);
exit
(1);
}
Client_Proc(cli_sockfd);
close(ser_sockfd);
}
附:
一.CA中心的安全应用--数字证书颁发
CA(CertificateAuthority)
CA技术是安全认证技术的一种它基于公开密钥体系通过安全证书来实现安全证书采用国际标准的X.509证书格式主要包括
证书的版本号
发证CA的身份信息
持证用户的身份信息
持证用户的公钥
CA中心所发放的数字安全证书可以应用于公众网络上的商务活动和行政作业活动,包括支付型和非支付型电子商务活动,其应用范围涉及需要身份认证及数据安全的各个行业,包括传统的商业、制造业、流通业的网上交易,以及公共事业、金融服务业、工商税务海关、政府行政办公、教育科研单位、保险、医疗等网上作业系统。
它主要应用于网上购物、企业与企业的电子贸易、安全电子邮件、网上证券交易、网上银行等方面。
二.密钥的管理内容
1.一个好的密钥管理系统应该做到:
(1)密钥难以被窃取;
(2)在一定条件下窃取了密钥也没有用,密钥有使用范围和时间的限制;
(3)密钥的分配和更换过程对用户透明,用户不一定要亲自掌管密钥.
a.管理方式
层次化的密钥管理方式,用于数据加密的工作密钥需要动态产生;工作密钥由上层的加密密钥进行保护,最上层的密钥称为主密钥,是整个密钥管理系统的核心;多层密钥体制大大加强了密码系统的可靠性,因为用得最多的工作密钥常常更换,而高层密钥用的较少,使得破译者的难度增大。
b.密钥的生成
密钥的生成与所使用的算法有关。
如果生成的密钥强度不一致,则称该算法构成的是非线性密钥空间,否则称为是线性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 工程 复习题 答案