网络编程试题答案
歌曲歌唱祖国-2017高考语文作文
一:选择题(共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) 在TCPIP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中,(
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.024 定向广播地址是(192.168.220.255),受限的广播地<
br>址为(255.255.255.255),定向广播和受限广播的区别(只要路由器可以转发定向广播<
br>信息可以向其它子网广播信息,而路由器从来不转发受限的广播信息);
2) 在tcpip模
型中进程到进程之间通信属于(传输)层,主机到主机属于(网络)
层,设备到设备属于(数据链路)层
,程序到程序属于(应用)层。
3) Ping命令的功能为(可以测试网络中本机系统是否能到达
一台远程主机 ,
所以常常用于测试网络的 连通性)。
4) 进行远程登录的命令是
(telnet)
5) DNS 域名系统的作用是(主机用户名和IP地址之间相互转化)。
三:问答题(本题共4小题,每题6分共24分)
1)
简述TCPIP协议中各层的主要功能,各有哪些主要协议。
答:网络接口层:实现设备与设备之间的通信
网络层:实现主机与主机之间的通信
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) 简述TCPIP协议中三次握手的过程及涵义
第一次握手:建立连接时,客户端发送s
yn包(syn=j)到服务器,并进入SYN_SEND状态,
等待服务器确认;
二次握
手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个
SYN包(
syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
三次握手:客户端收
到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此
包发送完毕,客户端
和服务器进入ESTABLISHED状态,完成三次握手
4)
简述TCPIP模型中,利用传输控制协议发送数据,应用层数据从主机A发送到主机B
的整个过程。
答: 1、首先是主机A通过connect()函数发送连接请求,主机B的accept()函数接
受到请求。
此时建立了连接。
2、主机A将数据写如套接口。
3、主机B从套接口读取数据,并保存。
4、数据发送完毕后,主机A关闭套接口。
5、主机B关闭套接口。
四:程序题(共三小题,第一题16分,二三题10分
共36分)
1) 利用setsocketopt()使用嵌套字支持广播,并编写两个程序,其中一
个发送广播数据,另
一个接收广播数据。
#include
#include
#include
#include
#include
#include
#include
#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));
_family = AF_INET;
_port = htons(port);
_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
#include
#include
#include
#include
#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));
_family = AF_INET;
_port = htons(port);
_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
#include
#include
#include
#include
==================================
===========================
语法格式: 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)); 初始化服务器地址
_family =
AF_INET;
_port = htons(port);
_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,
&_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));
_family = AF_INET;
_port = htons(port);
_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;
}