1、下午试题 试题一单位分得合法IP地址2021126840 掩码为255255255248,其中,路由器的外口和ISP之间占据了2个。 问题1 若使用2021126841和2021126841,掩码为255255255252,则可供使用的合法IP还有多少哪些?请写出。问题2 使用内部IP进行地址转换,若用一台主机连接内外两个网络,请说出2中不同的网络接法;并进行比较?问题3 Internet上保留了哪些内部IP可以供使用? 试题一【答案】问题1还可用的有 2021126844/29, 2021126845/29 ,2021126846/29问题22种网络接法:(1)主机接一块网卡绑定两个不同子网
2、的地址,运行代理软件,内部网络将网关设置指向该主机。 (2) 主机插2块网卡,分别连接内外网,主机起到网关和地址转换作用。 两种接法比较:(1)中方案若内网盗用主机合法IP可以绕过主机 (2)不能绕过主机。问题3可以使用10000 或 17216至17231 或1921680 至192168255 试题二请阅读以下说明和Socket程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】网络应用的基本模型是客户机服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。一般发起通信请求的应用程序称为客户软件,该应用程序通过与服务器进程建立连接,发送请求,然后等待服务器返
3、回所请求的内容。服务器软件一般是指等待接收并处理客户机请求的应用程序,通常由系统执行,等待客户机请求,并且在接收到请求之后,根据请求的内容,向客户机返回合适的内容。本题中的程序较为简单,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机,在通信过程中服务器方和客户机方都遵守的通信协议如下:由客户机首先发送请求,该请求由首部和内容两大部分组成,两个部分各占一行文字,通过行结束符n隔离。首部只有一个Length域,用于指定请求的内容部分的长度,首部的结构为:关键词Length+数值+n。内容部分为一行文字,其长度必须与Length域的数值相符例如,客户机的请求为L
4、ength 14nHello,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(listenfd0)fprintf(stderr
5、,创建套接字错误!)exit (1) ;套接字创建失败时打印错误信息bzero(&servaddr.sizeof(servadd);/将地址结构置空servaddrsin_family=AF_INET;设置地址结构遵循TCPIP协议servaddrsin_addrs_addr=htonl (2) ;设置监听的IP地址为任意合法地址,并将该地址转换为网络字节顺序servaddrsin_port= (3) ;设置监听的端口,并转化为网络字节顺序if(bind (4) 0)fprintf(stderr,绑定套接字与地址!);exit (1) ;将监听地址与用于监听的套接字绑定,绑定失败时打印错误信息
6、if(listen(listedfd,BACKLOG)0)fprintf(stderr,转换套接字为监听套接字!);exit (1) ;将用于监听的套接字由普通套接字转化为监听套接字for(;)connfd= (5) ;从监听套接字的连接队列中接收已经完成的连接,并创建新的连接套接字if(connfd0)fprintf(stderr,接收连接失败!);exit (1) ;接收失败打印错误信息serv_respon(connfd);运行服务器的处理函数close(connfd);关闭连接套接字dose(listenfd);关闭监听套接字服务器通信部分:#includevoid serv_resp
7、on(int sockfd)int nbytes;char bur1024;for(;)nbytes=read_requ(sockfd,bur,1024);读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区buf中,if( (6) )return;如客户机结束发送就退出else if(bytes0)fprintf(siderr,读错误情息:sn,strerror(errno);return; 读请求错误打印错误信息if(write-all(sockfd,buf,nbytes)0)将请求中的内容部分反向发送回客户机fprintf(siderr,写错误信息:
8、sn,strerror(errno);int read_requ(int sockfd,char*buf int size)char inbuf256;int n;int i;i=read_line(sockfd,inbuf,256);从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部if(1O)return(i);else if(i=0)return(0);if(stmcmp(inbuf,6)=0)scanf( (7) ,d,&n); 从缓冲区buf中读出长度信息elsesprintf(bur,14);return (14) ; 取出首部Length域中的数值,该数值为内容部分的长度r
9、eturn(read-all(sockfd,bur,n);从接收缓冲区中读出请求的内容部分int get-char(int fd,char*ch)static int offset=0;static int size=0;static char buff1024;声明静态变量,在get_char多次被调用期间,该变量的内存不释放for(;size=0 | | (8) ;)size=read(fd,bur,1024);一次从套接字缓冲区中读出一个数据块if(size0)if(errno=EINTR)size=0;contine;EINTR表示本次读操作没有成功,但可以继续使用该套接字读出数iel
10、sereturn(-1);offset=0; 读出数据后,将偏址置为0*ch=bufoffset +; /将当前的字符取出,并将偏址移向下一字符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)buffi+=ch;将字符加入字符串中if( (10) )break;else if(n)return(-1);else break;bufi=0;return(i);函数read_line的作用是读出请求的首部,其
11、处理的方法是每次调用get_char函数,取出一个字符,检查该字符是否是回车符n,如果是回车符,就返回请求的首部get_char的处理方式较为特殊,并不是每次调用read函数读一个字符,而是一次从缓冲区中读一块内容,再一次一个字符提交给函数read_line,如果提交完了就再读一块,这样就可以提高读缓冲区的效率。另外,由于客户机是分两次调用writ_all函数将请求的首部和内容发送给服务器,因此get_char不会取出请求内容部分的字符部分SOCKET数据结构与函数:1地址结构。sockaddr-in:sockaddr_in类型的结构定义,sockaddr_in是通用套接字结构sockaddr
12、在TCPIP协议下的结构重定义,为TCPIP套接字地址结构。Struct sockaddr_inshort int sin_family;地址类型AF_XXX,其中AF_INET为TCPIP专用unsigned short int sin _port;/端口号struct in_addr sin_addr;/Internet地址端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换struct_inaddr_u32 s_addr;类型为unsignel longhostent:hostent类型的结构定义struct hostnetchar*h_name;主机的正式名称
13、char*h_aliases;别名列表nit h_addrtvPe;主机地址类型:AF_XXXint h_length;主机地址长度:4字节(32位)char*h_addr_list;主机IP地址列表 #define h_addr h_addr_list02基本函数。int socket(int domain,int type,int protocol);函数socket创建一个套接字描述符,如果失败则返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。int connect(int sockfd,struct sock
14、addr*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
15、);函数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为客
16、户机的地址,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 wri
17、te_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(lis
18、tenfd,NULL,NULL)(6)nbytes=0(7)buf+6(8)offset=size(9)maxlen(10)ch=n 试题三阅读以下说明和交换机的配置信息,回答问题13,将解答填入答题纸的对应栏内。【说明】某公司下设3个部门,为了便于管理,每个部门组成一个VLAN,公司网络结构如图1所示。图1网络结构图【交换机Switch1的部分配置信息】Switch1 (cnfig)#tinterface fO9Switch1(config-if)#switchport mode accessSwitch1(config-if)#switchport access vlan 11Switch
19、1(config)#interface fO/10Switch1(config-if)#switchport mode accessSwitch1(config-if)#switchport access vlan 12Switch1(config)#interface fO17Switch1(config-if)#switchport mode accessSwitch1(config-if)#switchport access vlan 13【交换机Switch2的部分配置信息】Switch2(config)#interface fO6Switch2(config-if)#switchpo
20、rt mode accessSwitch2(config-if)#switchport access vlan 11Switch2(config)#interface fO8Switch2(config-if)#switchport mode accessSwitch2(config-if)#switchport access vlan 12Switch2(corffig)#intefface fO11Switch2(config-if)#switchport mode accessSwitch2(config-if)#switchport access vlan 13【交换机Switch3的
21、部分配置信息】Switch3(config)#interface fO3Switch3(config-if)#switchport mode accessSwitch3(config-if)#switchport access vlan 11Switch3(config-if)#exitSwitch3(corfig)#interface fO7Switch3(config-if)#switchport mode accessSwitch3(config-if)#switchport access vlan 12Switch3(config)#interface fO13Switch3(conf
22、ig-if)#switchport mode accessSwitch3(config-if)#switchport aocess vlan 13问题1划分VLAN有哪几种划分方式?问题2在VLAN中,STP和VTP是什么协议?各有什么作用?问题3填充VLAN信息表,见表1,将答案填写在答题纸相应位置。 试题三问题1【答案】划分方式有: 交换机端口划分; MAC地址划分;第三层协议划分;IP组播划分;策略划分。问题2【答案】STP(SpanningTreeProtocol,生成树协议)是一个既能够防止环路、又能够提供冗余线路的第二层的管理协议。为了使交换网络正常运行,STP网络上的任何两个终端
23、之间只有一条有效路径。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 试题四若设置域名解析
24、服务器,已知该文件服务器上文件namedboot的内容如下: Directory /var/named Cachenamedroot Primary 00127 in-addrarpa namedlocal Primary neteducnneteducnhosts Primary 58112202in-addrarpaneteducnrev Secondary educn 202112033educn2nd Forward 202112035 回答以下问题。 问题1 给出域名解析的两种方案。问题2 使用DNS服务器时,该服务器是哪个域名的主服务器?该域对应的IP地址是多少?问题3 当DNS服
25、务器启动后,如何验证其是否工作正常?问题4 当dns服务器发生故障,我们是否可以访问网络上的计算机?如果可以,需要什么条件?说明原因。 试题四问题1【答案】本地解析hosts和分布式域名解析系统DNS 问题2【答案】neteducn 202112580问题3 【答案】nslookup 域名问题4【答案】可以,需要知道对方IP 。因为DNS目的也是将域名转换成IP,计算机根据IP访问对方计算机。 试题五阅读以下说明,回答问题,将解答填入答题纸的对应栏内。【说明】网络地址转换(NAT)的主要目的是解决IP地址短缺问题以及实现TCP负载均衡等。在如图2所示的设计方案中,与Internet连接的路由器
26、采用网络地址转换。问题请根据路由器的NAT表和图2中给出的网络结构、IP地址,简要叙述主机B向内部网络发出请求进行通信时,边界路由器实现TCP负载均衡的过程。图2网络设计方案图 试题五【答案】(1)外部主机B(1722073)发出请求,建立B到虚拟主机(1011127)的连接。(2)边界路由器接到这个连接请求后,查询NAT表,建立一个新的地址转换映射。如为1011127分配真实主机地址10111。(3)边界路由器用所选真实地址替换目的地址,转发该数据报。内部主机10111接收到该数据报,并作应答。(4)边界路由器接到应答报后,根据内部地址及端口号和外部地址及端口号,从NAT映射表中查找对应的内部虚拟主机地址及端口号。(5)将源地址转换为虚拟主机地址,并转发应答报;B接收到源地址为1011127的应答报。(6)下一个请求时,边界路由器为其分配下一个内部局部地址,如10112。