2002年网络设计师下午试卷
转载请注明出处:盛威网(http://www.snwei.com/) [专业计算机学习网站]
2002 年度网络设计师级下午试卷
|
本试卷的 5 道试题都是必答题,请全部解答。每题 15 分,满分 75 分。 |
阅读以下有关网络结构的说明,回答问题 1 至问题 3 ,将解答填入答题纸的对应栏内。
【说明】

如图所示, GSW 为千兆以太网交换机,内设 ATM 模块。 SWI 为 100M /l000Mbps 以太网交换机, SWZ 为 ATM/100Mbps 以大网交换机, RT 为中心路由器 ; S1 和 S2 为服务器,分别经千兆以太网卡和 155M ATM 网卡与 GSW (千兆以太网交换机)和 ATM 交换机相连, PC1 、 SI 、 SZ 、 PC4 划在 VLAN1 中, PC2 、 PC5 划到 VLAN2 中, PC3 、 PC6 划到 VLAN3 中。
【问题 1 】
为了实现 VLAN1 , VLAN2 和 VLAN3 的虚拟网络划分,在 ATM 和 RT 路由器中应设置哪几种服务协议?(如 BUS )
【问题 2 】
试述从 PC1 发送一个 IP 包到 PC4 数据封装与解封的全过程。
【问题 3 】
试述从 PC1 发送一个 IP 包到 PC2 的路由计算过程和传送路径。
试题四
阅读以下有关网络设备安装与调试的叙述,分析设备配置文件,回答问题 1 至问题 3 ,把解答填入答题纸的对应栏内。
虚拟局域网( Virtual LAN )是与地理位置无关的局域网的一个广播域,由一个工作站发送的广播信息帧只能发送到具有相同虚拟网号的其他站点,可以形象地认为, VLAN 是在物理局域网中划分出的独立通讯区域。 在以交换机为核心的交换式局域网络中, VLAN 技术应用广泛,其优势在于控制了网络上的广播风暴,增加了网络的安全性,利于采用集中化的管理控制。其中,基于端口的 VLAN 划分方式较为常见,通过将网络设备的端口划归不同的 VLAN 实现广播帧的隔离。
【问题 1 】
请指出现有虚拟局域网络的四种划分方式。
【问题 2 】
在基于端口的 VLAN 划分中,交换机上的每一个端口允许以哪三种模式划入 VLAN 中,并简述它们的含义。
【问题 3 】
以下为 Cisco 以太网交换机 Catalyst 2924 ( ws - c2924xlA ,拥有 24 个 10/100M 自适 应端口)的 VLAN 划分命令,请解释【 l 】~【 3 】处的标有下划线部分配置命令的含义。 (“//” 后为注释内容 )
switch> en // 进入特权执行态
switch# config term // 进入通用配置状态
switch(config)# interface vlan 1 // 配置 vlan 1(ID 为 1 的 Vlan)
【 l 】 ( 此处有 2 条下划线 )
switch(config-if)# ip address 202.112.111.23 255.255.255.0
switch(config-if)# management
switch(config-if)# exit // 退出对 vlan 的配置状态
......
......
switch(config)# interface fa0/1 // 配置第一模块的第 2 个端口
【 2 】 ( 此处有 2 条下划线 )
switch(config-if)# switchport mode access
switch(config-if)# switchport acess vlan
switch(conflg-if)# exit // 退出对端口的配置状态
......
......
switch(config)# interface fa0/2 // 配置第一模块的第 3 个端口
【 3 】 ( 此处有 2 条下划线 )
switch(config-if)# switchport mode multi
switch(config-if)# switchport multi vlan add 2,3
switch(config-if)# exit // 退出对端口的配置状态
试题五
请阅读以下说明和 Socket 程序,将应填入 ___(n)___ 处的字句写在答题纸的对应栏内。
【说明】
网络应用的基本模型是客户机 / 服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。
一般发起通信请求的应用程序称为客户软件,该应用程序通过与服务器进程建立连接,发送请求,然后等待服务器返回所请求的内容。服务器软件一般是指等待接收并处理客户机请求的应用程序,通常由系统执行,等待客户机请求,并且在接收到请求之后,根据请求的内容,向客户机返回合适内容。
本题中的程序较为简单,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机,在通信过程中服务器方和客户机方都遵守的通信协议如下:
由客户机首先发送请求,该请求由首部和内容两大部分组成,两个部分各占一行文字,通过行结束符 '\n' 隔离。
首部只有一个 Length 域,用于指定请求的内容部分的长度,首部的结构为: ' 关键词 Length'+''+ 数值 +'\n'
内容部分为一行文字,其长度必须与 Length 域的数值相符 例如,客户机的请求为 “Length 14\nHello,my baby!” ,服务器接收请求处理后返回文字 “Hello,my baby!” 。
< 注: Socket 函数与数据结构,以及用户自定义函数的解释见附录一 >
【 Socket 程序】
服务器主程序部分:
#include<stdio.h>
……// 引用头文件部分略 >
#define SERVER_PORT 8080 // 服务器监听端口号为 8080
#define BACKLOG 5 // 连接请求队列长度
int main( int argc, char *argv [ ] ) {
int listenfd , connfd // 监听套接字、连接套接字描述符
struct sockaddr_in servaddr ; // 服务器监听地址
listenfd =___(1)___ ; // 创建用于监听的套接字
if (listenfd<0){
fprintf( stderr," 创建套接字错误! ")
exit(1) ;
} // 套接字创建失败时打印错误信息
bzero(&servaddr.sizeof(servadd)) ; // 将地址结构置空
servaddr.sin_family = AF_INET ; // 设置地址结构遵循 TCP/IP 协议
servaddr.sin_addrs_addr = htonl.(___(2)____) ; // 设置监听的 IP 地址为任意合法地址,并将该地址转换为网络字节顺序
servaddr.sin_port = ___(3)___; // 设置监听的端口,并转化为网络字节顺序
if ( bind(____(4)_____)<0 ) {
fprintf( stderr," 绑定套接字与地址! ");
exit(1) ;
} // 将监听地址与用于监听的套接字绑定,绑定失败时打印错误信息
if ( listen( listedfd,BACKLOG)<0 ) {
fprintf(stderr," 转换套接字为监听套接字! ") ;
exit(1) ;
} // 将用于监听的套接字由普通套接字转化为监听套接字
for (;;) {
connfd = ____(5)____ ;
// 从监听套接字的连接队列中接收己经完成的连接,并创建新的连接套接字
if(connfd<0) {
fprintf(stderr,” 接收连接失败! ”);
exit(1) ;
}// 接收失败打印错误信息
serv_respon(connfd); // 运行服务器的处理函数
___(6)___; // 关闭连接套接字 }
close(listenfd);// 关闭监听套接字 }
服务器通信部分:
#include <stdio.h>
…… // 引用头文件部分略 >
void serv _ respon( int sockfd ) {
int nbytes ; char buf [ 1024 ];
for( ;; ) {
nbytes = read _ requ(sockfd , buf , 1024) ;
// 读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区 buf 中,
if ( nbytes == 0 ) return ; // 如客户机结束发送就退出
else if ( bytes<0 ) {
fprintf( siderr , " 读错误情息: %s\n" , strerror( errno ) );
return ;
}// 读请求错误打印错误信息
if ( write_all ( sockfd , buf , nbytes )<0 )
// 将请求中的内容部分反向发送回客户机
fprintf( siderr , " 写错误信息: %s\n" , strerror( errno) ) ;
}
}
int read_requ( int sockfd , char*buf int size ) {
char inbuf[256 ];
int n; int i;
i = read_line( sockfd,inbuf,256 ) ;
// 从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部
if ( 1<O ) return(i);
else if ( i==0 ) return(0);
if ( strncmp( inbuf,"",6 ) == 0)
sscanf( ____(7)____ , "%d" , &n ) ; // 从缓冲区 buf 中读出长度信息
else {
sprintf( buf," " , 14 ) ;
return(14) ;
} // 取出首部 Length 域中的数值,该数值为内容部分的长度
return( read_all( sockfd , buf,n ) ) ; // 从接收缓冲区中读出请求的内容部分
}
int get_char(int fd , char *ch) {
static int offset=0;
static int size = 0 ;
static char buff[1024 ];
// 声明静态变量,在 get_char 多次被调用期间,该变量的内存不释放
for ( ; size <= 0 || __(8)__ ; ) {
size = read( fd , buf,1024 ) ; // 一次从套接字缓冲区中读出一个数据块
if ( size < 0 ) {
if ( errno==EINTR ) {
size = 0 ;
contine ;
//EINTR 表示本次读操作没有成功,但可以继续使用该套接字读出数 i
} else
return( - 1) ;
}
offset = 0; // 读出数据后,将偏址置为 0
转载请注明出处:盛威网(http://www.snwei.com/) [专业计算机学习网站]
|