网络编程试题答案

更新时间:2024-01-23 22:24:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一:选择题(共10小题,每小题3分) 1) 路由器工作在哪一层(B)

A:链路层 B:网络层 C:传输层

D:应用层

2) 一台主机要实现通过局域网与另一个局域网通信,需要做的工作是 (C) 。

A: 配置域名服务器

B :定义一条本机指向所在网络的路由 C :定义一条本机指向所在网络网关的路由 D :定义一条本机指向目标网络网关的路由

3) 下列提法中,不属于ifconfig命令作用范围的是 (D )。

A: 配置本地回环地址 B :配置网卡的IP地址 C :激活网络适配器 D: 加载网卡到内核中 4) 下面的网络协议中,面向连接的的协议是: (A) 。

A:传输控制协议 C :网际协议

B :用户数据报协议 D: 网际控制报文协议

5) 在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是(C) A 主机IP设置有误

B 没有设置连接局域网的网关

C 局域网的网关或主机的网关设置有误 D 局域网DNS服务器设置有误

6) DHCP是动态主机配置协议的简称,其作用是可以使网络管理员通过一台服务器来管

理一个网络系统,自动地为一个网络中的主机分配___D______地址。 A :UDP

B :MAC C: TCP

D: IP

7) 在TCP/IP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中,(B)是能够实现本地与远程主机之间的文件传输工作。

A telnet B FTP C: SNMP D: NFS 8) 当我们与某远程网络连接不上时,就需要跟踪路由查看,以便了解在网络的什么位置出

现了问题,满足该目的的命令是(C)。

A :ping B: ifconfig C :traceroute 9) 关于代理服务器的论述,正确的是(A)。

D: netstat

A :使用internet上已有的公开代理服务器,只需配置客户端。

B :代理服务器只能代理客户端http的请求。

C :设置好的代理服务器可以被网络上任何主机使用。

D :使用代理服务器的客户端没有自己的ip地址。

10) 公司需要把192.168.3.0 /255.255.255 网段划分成10个子网,子网掩码应该是? (C)

A:255.255.255.5

B:255.255.255.4 D:255.255.255.248

C:255.255.255.240

二:填空题(本题共5小题,每空1分 共10分)

1) 网络192.168.220.0/24 定向广播地址是(192.168.220.255),受限的广播地址为(255.255.255.255),定向广播和受限广播的区别(只要路由器可以转发定向广播信息可以向其它子网广播信息,而路由器从来不转发受限的广播信息);

2) 在tcp/ip模型中进程到进程之间通信属于(传输)层,主机到主机属于(网络)层,设备到设备属于(数据链路)层,程序到程序属于(应用)层。

3) Ping命令的功能为(可以测试网络中本机系统是否能到达 一台远程主机 ,所以常常用于测试网络的 连通性)。

4) 进行远程登录的命令是 (telnet)

5) DNS 域名系统的作用是(主机用户名和IP地址之间相互转化)。 三:问答题(本题共4小题,每题6分共24分)

1) 简述TCP/IP协议中各层的主要功能,各有哪些主要协议。 答:网络接口层:实现设备与设备之间的通信

网络层:实现主机与主机之间的通信 IP,ARP,RARP,ICMP 传输层:实现进程与进程之间的通信 TCP,UDP

应用层:实现应用程序 HTTP,SMTP,DNS,SNMP,FNS,FTP

2) 什么是TCP 、UDP ?协议优缺点,应用场合? 1:用户数据报协议UDP(User Datagram Protocol)

UDP协议是面向无连接的用户数据报协议,在传输数据之前不需要先建立连接。远地主机的运输层收到UDP报文后,不需要给出任何确认。

2:传输数据报协议TCP(Transmission Control Protocol)

TCP 则提供面向连接的服务。在传输数据前必须先建立连接,数据传输完毕后要释放连接。

区别:

是否面向连接:Tcp 面向连接 ,udp是面向无连接 是否可靠: Tcp 可靠 ,udp不可靠

应用场合: Tcp应用于传输大量数据 ,udp用于传输少量数据 速度: Tcp的速度慢 ,udp的速度快 是否能够广播:tcp不能 ,udp能广播

tcp是基于连接的,速度慢,有校验等,所以传送相同的数据,要比UDP发送的包多很多

3) 简述TCP/IP协议中三次握手的过程及涵义 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

4) 简述TCP/IP模型中,利用传输控制协议发送数据,应用层数据从主机A发送到主机B的整个过程。

答: 1、首先是主机A通过connect()函数发送连接请求,主机B的accept()函数接受到请求。 此时建立了连接。

2、主机A将数据写如套接口。

3、主机B从套接口读取数据,并保存。 4、数据发送完毕后,主机A关闭套接口。 5、主机B关闭套接口。

四:程序题(共三小题,第一题16分,二三题10分 共36分)

1) 利用setsocketopt()使用嵌套字支持广播,并编写两个程序,其中一个发送广播数据,另一个接收广播数据。 #include #include #include // bzero #include

#include #include #include // inet_ntop #include #include

//#define MAX 1024*1024 int main(int argc, char *argv[]) { struct sockaddr_in srvAddr; int socked = socket(AF_INET, SOCK_DGRAM, 0); unsigned short port = 8000; char sendbuf[1024]=\

int broadcast_en=1; socklen_t broadcast_len=sizeof(broadcast_en); size_t len=sizeof(srvAddr); bzero(&srvAddr, sizeof(srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_port = htons(port); srvAddr.sin_addr.s_addr =inet_addr(\ if(socked < 0) { perror(\ exit(1); } printf(\ if

( (setsockopt(socked,SOL_SOCKET,SO_BROADCAST,&broadcast_en,broadcast_len))<0 ) { perror(\ exit(1); } while(1) { printf(\输入数据:\ fgets(sendbuf,1024,stdin); sendbuf[strlen(sendbuf)-1]='\\0'; sendto(socked,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&srvAddr,(socklen_t)len); } }

#include #include #include // bzero #include

#include #include #include // inet_ntop #include #include

//#define MAX 1024*1024 int main(int argc, char *argv[]) { struct sockaddr_in srvAddr; int socked = socket(AF_INET, SOCK_DGRAM, 0);

unsigned short port = 8000; char recvbuf[1024]=\ int broadcast_en=1; socklen_t broadcast_len=sizeof(broadcast_en); size_t len=sizeof(srvAddr); bzero(&srvAddr, sizeof(srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_port = htons(port); srvAddr.sin_addr.s_addr =inet_addr(\ if(socked < 0) { perror(\ exit(1); } printf(\ printf(\ if( (bind(socked,(struct sockaddr *)&srvAddr,(socklen_t)len))<0 ) { perror(\ exit(1); } while(1) { if((recvfrom(socked,recvbuf,strlen(recvbuf),0,(struct sockaddr*)&srvAddr, (socklen_t *)&len))<0) { perror(\ exit(1); } else

printf(\ } }

2) 写一个TCP 并发的服务器,实现echo功能。

#include #include

#include // bzero #include #include #include

#include // inet_ntop

//============================================================= // 语法格式: void main(void)

// 实现功能: 主函数,建立一个TCP Echo Server // 入口参数: 无 // 出口参数: 无

//============================================================= int main(int argc, char *argv[]) {

char recvbuf[2048]; // 接收缓冲区 int sockfd; // 套接字

struct sockaddr_in servAddr; // 服务器地址结构体 unsigned short port = 8000; // 监听端口

if(argc > 1) // 由参数接收端口 {

port = atoi(argv[1]); }

printf(\ sockfd = socket(AF_INET, SOCK_STREAM, 0);

// 创建TCP套接字 if(sockfd < 0) {

perror(\ exit(1); }

bzero(&servAddr, sizeof(servAddr)); // 初始化服务器地址 servAddr.sin_family = AF_INET; servAddr.sin_port = htons(port);

servAddr.sin_addr.s_addr = htonl(INADDR_ANY); printf(\

if(bind(sockfd, (struct sockaddr*)&servAddr, sizeof(struct sockaddr)) != 0) {

close(sockfd);

perror(\ exit(1); }

if(listen(sockfd, 1) != 0) {

close(sockfd);

perror(\ exit(1); }

printf(\

while(1) {

char cliIP[INET_ADDRSTRLEN]; // 用于保存客户端IP地址

size_t recvLen;

struct sockaddr_in cliAddr; // 用于保存客户端地址 size_t cliAddrLen = sizeof(cliAddr);

// 必须初始化!!!

int connfd = accept(sockfd, (struct sockaddr*)&cliAddr, &cliAddrLen); // 获得一个已经建立的连接 if(connfd < 0) {

close(sockfd);

perror(\ exit(1); }

if(fork() == 0) {

close(sockfd); inet_ntop(AF_INET, &cliAddr.sin_addr.s_addr, INET_ADDRSTRLEN);

printf(\

while((recvLen = read(connfd, recvbuf, 2048)) > 0) {

write(connfd, recvbuf, recvLen); }

printf(\ exit(0); }

close(connfd); }

close(sockfd); return 0; }

3) 写一个UDP echo服务器 #include #include #include #include #include #include #include

//=============================================================

cliIP, // 语法格式: void main(void)

// 实现功能: 主函数,建立一个UDP Echo Server // 入口参数: 无 // 出口参数: 无

//============================================================= int main(int argc, char *argv[]) {

int sockfd;

struct sockaddr_in bindAddr; unsigned short port = 8000;

if(argc > 1) {

port = atoi(argv[1]); }

printf(\

sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) {

printf(\ exit(1); }

bzero(&bindAddr, sizeof(bindAddr)); bindAddr.sin_family = AF_INET; bindAddr.sin_port = htons(port);

bindAddr.sin_addr.s_addr = htonl(INADDR_ANY); printf(\

if(bind(sockfd, (struct sockaddr*)&bindAddr, sizeof(bindAddr)) != 0) {

close(sockfd);

printf(\ exit(1); }

printf(\ while(1) {

char recvBuf[2048];

char cliIP[INET_ADDRSTRLEN]; size_t recvLen;

struct sockaddr_in cliAddr;

size_t cliAddrLen = sizeof(cliAddr);

recvLen = recvfrom(sockfd, recvBuf, 2048, 0, (struct sockaddr*)&cliAddr, &cliAddrLen);

printf(\cliIP, INET_ADDRSTRLEN));

sendto(sockfd, recvBuf, recvLen, 0, (struct sockaddr*)&cliAddr, cliAddrLen); }

close(sockfd); return 0; }

本文来源:https://www.bwwdw.com/article/v43o.html

Top