您的当前位置:首页正文

网络工程师模拟试题6及答案(下午题)

2022-06-05 来源:易榕旅网
网络工程师模拟试题6及答案(下午题)

● 试题一

单位分得合法IP地址202.112.68.40 掩码为255.255.255.248,其中,路由器的外口和ISP之间占据了2个。

[问题1]

若使用202.112.68.41和202.112.68.41,掩码为255.255.255.252,则可供使用的合法IP还有多少哪些?请写出。 [问题2]

使用内部IP进行地址转换,若用一台主机连接内外两个网络,请说出2中不同的网络接法;并进行比较? [问题3]

Internet上保留了哪些内部IP可以供使用?

● 试题一 【答案】 [问题1]

还可用的有 202.112.68.44/29, 202.112.68.45/29 ,202.112.68.46/29 [问题2]

2种网络接法:(1)主机接一块网卡绑定两个不同子网的地址,运行代理软件,内部网络将网关设置指向该主机。 (2) 主机插2块网卡,分别连接内外网,主机起到网关和地址转换作用。

两种接法比较:(1)中方案若内网盗用主机合法IP可以绕过主机 (2)不能绕过主机。 [问题3]

可以使用10.0.0.0 或 172.16至172.31 或192.168.0 至192.168.255

● 试题二

请阅读以下说明和Socket程序,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】

网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。

一般发起通信请求的应用程序称为客户软件,该应用程序通过与服务器进程建立连接,发送请求,然后等待服务器返回所请求的内容。服务器软件一般是指等待接收并处理客户机请求的应用程序,通常由系统执行,等待客户机请求,并且在接收到请求之后,根据请求的内容,向客户机返回合适的内容。 本题中的程序较为简单,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机,在通信过程中服务器方和客户机方都遵守的通信协议如下:

由客户机首先发送请求,该请求由首部和内容两大部分组成,两个部分各占一行文字,通过行结束符\"\n\"隔离。 首部只有一个Length域,用于指定请求的内容部分的长度,首部的结构为:\"关键词Length\"+\"\"+数值+\"\n\"。 内容部分为一行文字,其长度必须与Length域的数值相符例如,客户机的请求为\"Length 14\nHello,my baby!\",服务器接收请求处理后返回文字\"Hello,my baby!\"。 【Socket程序】

服务器主程序部分: #include

……//引用头文件部分略>

#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);//运行服务器的处理函数 close(connfd);//关闭连接套接字} dose(listenfd);//关闭监听套接字} 服务器通信部分: #include

< ……//引用头文件部分略> void serv_respon(int sockfd){ int nbytes;char bur[1024]; for(;;){

nbytes=read_requ(sockfd,bur,1024);

//读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区buf中,

if( (6) )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(1else if(i==0)return(0);

if(stmcmp(inbuf,″″,6)==0)

scanf( (7) ,″%d″,&n); //从缓冲区buf中读出长度信息 else{

sprintf(bur,″″,14); return (14) ;

} //取出首部Length域中的数值,该数值为内容部分的长度

return(read-all(sockfd,bur,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,bur,1024);//一次从套接字缓冲区中读出一个数据块 if(size<0){

if(errno==EINTR){ size=0; contine;

//EINTR表示本次读操作没有成功,但可以继续使用该套接字读出数i }else

return(-1); }

offset=0; //读出数据后,将偏址置为0 *ch=buf[offset ++]; //将当前的字符取出,并将偏址移向下一字符 return (1) ; }

int read _ line(int fd,char*buf,int msxlen){ int i, n; char ch;

for(i=0;i< (9) ){ n=get_char(fd,&ch);//取出一个字符 if(n==1){

buff[i++]=ch;//将字符加入字符串中 if( (10) )break; }else if(n<)return(-1);

else break; }

buf[i]=`\0`; return(i); }

//函数read_line的作用是读出请求的首部,其处理的方法是每次调用get_char函数,取出一个字符,检查该字符是否是回车符`\n`,如果是回车符,就返回请求的首部

//get_char的处理方式较为特殊,并不是每次调用read函数读一个字符,而是一次从缓冲区中读一块内容,再一次一个字符提交给函数read_line,如果提交完了就再读一块,这样就可以提高读缓冲区的效率。另外,由于客户机是分两次调用writ_all函数将请求的首部和内容发送给服务器,因此get_char不会取出请求内容部分的字符 部分SOCKET数据结构与函数: 1.地址结构。 sockaddr-in:

sockaddr_in类型的结构定义,sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。 Struct sockaddr_in{

short int sin_family;//地址类型AF_XXX,其中AF_INET为TCP/IP专用 unsigned short int sin _port;//端口号 struct in_addr sin_addr;//Internet地址

//端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换 }

struct_inaddr{

_u32 s_addr;//类型为unsignel long }

hostent:

hostent类型的结构定义 struct hostnet{

char*h_name;//主机的正式名称 char**h_aliases;//别名列表

nit h_addrtvPe;//主机地址类型:AF_XXX int h_length;//主机地址长度:4字节(32位) char**h_addr_list;//主机IP地址列表 }

#define h_addr h_addr_list[0] 2.基本函数。

int socket(int domain,int type,int protocol);

函数socket创建一个套接字描述符,如果失败则返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。

int connect(int sockfd,struct sockaddr*servaddr,int addrlen);

函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。 int read(int fd,char*bur,int len); int write(int fd,char*buf,int len);

函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。

int bind(int sockfd,struct sockaddr*myaddr,int addrlen);

函数bind将本地地址与套接字绑定在一起,成功返回0,否则返回-1;myaddr是本机地址;addrlen为套接字地址结构的长度。

int listen(int sockfd,int backlog);

函数listen将一个套接字转换为倾听套接字,成功返回0,否则返回-1;backlog为请求队列的最大长度。 int accept(int sockfd,struct sockaddr*addr,int*addrlen);

函数accept从倾听套接字的完成连接中接收一个连接,如果完成连接队列为空,那么这个进程睡眠,失败时返回-1,成功时返回新的套接字描述符。Sockfd为倾听套接字,addr为客户机的地址,addlen为地址长度,在调用时用常量NULL代替addr与addlen表示无须取出客户机的地址信息 struct hostent *gethostbyname(const char*hostname);

函数gethostbyname查询指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功返回NULL。 3.用户自定义函数。

int read_all(int fd,void*bur,int nbyte);

函数read all从参数fd指定的套接字描述符中读取nbytes字节数据至缓冲区buf中,成功返回实际读的字节数(可能小于nbyte),失败返回-1。

int write_all(int fd,void*bur,int nbyte);

函数write_all向参数fd指定的套接字描述符中写入缓冲区buf前nbyte字节的数据,成功返回实际写的字节数(始终等于nbyte),失败返回-1。

write_requ函数为客户机发送请求的函数;read_requ函数为服务器获取请求的函数。

● 试题二

【答案】(1)socket(AF_INET,SOCK_STREAM,0) (2)INADDR_ANY

(3)htons(SERVER_PORT)

(4)listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr) (5)accept(listenfd,NULL,NULL) (6)nbytes==0 (7)buf+6

(8)offset==size (9)maxlen

(10)ch==`\n`

● 试题三

阅读以下说明和交换机的配置信息,回答问题1~3,将解答填入答题纸的对应栏内。 【说明】

某公司下设3个部门,为了便于管理,每个部门组成一个VLAN,公司网络结构如图1所示。

图1网络结构图

【交换机Switch1的部分配置信息】 Switch1 (cnfig)#tinterface fO/9

Switch1(config-if)#switchport mode access Switch1(config-if)#switchport access vlan 11 Switch1(config)#interface fO/10

Switch1(config-if)#switchport mode access Switch1(config-if)#switchport access vlan 12 Switch1(config)#interface fO/17

Switch1(config-if)#switchport mode access Switch1(config-if)#switchport access vlan 13 【交换机Switch2的部分配置信息】 Switch2(config)#interface fO/6

Switch2(config-if)#switchport mode access Switch2(config-if)#switchport access vlan 11 Switch2(config)#interface fO/8

Switch2(config-if)#switchport mode access Switch2(config-if)#switchport access vlan 12 Switch2(corffig)#intefface fO/11

Switch2(config-if)#switchport mode access Switch2(config-if)#switchport access vlan 13 【交换机Switch3的部分配置信息】 Switch3(config)#interface fO/3

Switch3(config-if)#switchport mode access Switch3(config-if)#switchport access vlan 11 Switch3(config-if)#exit

Switch3(corfig)#interface fO/7

Switch3(config-if)#switchport mode access Switch3(config-if)#switchport access vlan 12 Switch3(config)#interface fO/13

Switch3(config-if)#switchport mode access Switch3(config-if)#switchport aocess vlan 13 [问题1]

划分VLAN有哪几种划分方式? [问题2]

在VLAN中,STP和VTP是什么协议?各有什么作用? [问题3]

填充VLAN信息表,见表1,将答案填写在答题纸相应位置。

● 试题三 [问题1]

【答案】划分方式有:① 交换机端口划分; ② MAC地址划分;③第三层协议划分;④IP组播划分;⑤策略划分。 [问题2]

【答案】STP(SpanningTreeProtocol,生成树协议)是一个既能够防止环路、又能够提供冗余线路的第二层的管理协议。为了使交换网络正常运行,STP网络上的任何两个终端之间只有一条有效路径。STP使用生成树算法求解,没有环路的最佳路径,使一些备用路径处于阻塞状态。大型交换网络中尤其是有多个VLAN的时候,配置STP很重要。

VTP(VLAN TrunkProtocol,VLAN中继协议)保持VLAN的删除、添加、修改等管理操作的一致性。在同一个VTP域内,VTP通过中继端口在交换机之间传送VTP信息,从而使一个VTP域内的交换机能共享VLAN信息。 [问题3]

【答案】(1)Server3+Computer2+Computer5 (2)Servet2+Computer3+Computer6 (3)Serverl+Computerl+Computer4

● 试题四

若设置域名解析服务器,已知该文件服务器上文件named.boot的内容如下: Directory /var/named Cachenamed.root

Primary 0.0.127 in-addr.arpa named.local

Primary net.edu.cn net.edu.cn.hosts Primary 58.112.202.in-addr.arpa net.edu.cn.rev Secondary edu.cn 202.112.0.33 edu.cn.2nd Forward 202.112.0.35 回答以下问题。 [问题1]

给出域名解析的两种方案。 [问题2]

使用DNS服务器时,该服务器是哪个域名的主服务器?该域对应的IP地址是多少? [问题3]

当DNS服务器启动后,如何验证其是否工作正常? [问题4]

当dns服务器发生故障,我们是否可以访问网络上的计算机?如果可以,需要什么条件?说明原因。

● 试题四 [问题1]

【答案】本地解析hosts和分布式域名解析系统DNS [问题2]

【答案】net.edu.cn 202.112.58.0

[问题3]

【答案】nslookup 域名 [问题4]

【答案】可以,需要知道对方IP 。因为DNS目的也是将域名转换成IP,计算机根据IP访问对方计算机。

● 试题五

阅读以下说明,回答问题,将解答填入答题纸的对应栏内。 【说明】

网络地址转换(NAT)的主要目的是解决IP地址短缺问题以及实现TCP负载均衡等。在如图2所示的设计方案中,与Internet连接的路由器采用网络地址转换。 [问题]

请根据路由器的NAT表和图2中给出的网络结构、IP地址,简要叙述主机B向内部网络发出请求进行通信时,边界路由器实现TCP负载均衡的过程。

图2网络设计方案图

● 试题五 【答案】

(1)外部主机B(172.20.7.3)发出请求,建立B到虚拟主机(10.1.1.127)的连接。

(2)边界路由器接到这个连接请求后,查询NAT表,建立一个新的地址转换映射。如为10.1.1.127分配真实主机地址10.1.1.1。

(3)边界路由器用所选真实地址替换目的地址,转发该数据报。内部主机10.1.1.1接收到该数据报,并作应答。

(4)边界路由器接到应答报后,根据内部地址及端口号和外部地址及端口号,从NAT映射表中查找对应的内部虚拟主机地址及端口号。

(5)将源地址转换为虚拟主机地址,并转发应答报;B接收到源地址为10.1.1.127的应答报。 (6)下一个请求时,边界路由器为其分配下一个内部局部地址,如10.1.1.2。

因篇幅问题不能全部显示,请点此查看更多更全内容