linux网络技术期末考试,网络程序设计期末考试试卷

一、如何评测软件工程师的计算机网络知识水平与网络编程技能水平?

1.计算机网络基本知识

集线器、路由器、光纤、同轴电缆等硬件设备的基本了解;

TCP/IP网络的五个层次;

TCP/IP协议栈的初始化,网络数据收发的具体过程;

ARP、DNS、L2交换网络的基本了解;

2.代码作业能力

熟悉Linux Socket网络编程;

追踪了解Socket API与系统调用的关系;

能够阅读并分析涉及网络数据收发过程的函数源代码;

3.学习能力

善于阅读源代码与技术文档;

善于搜索并学习他人经验;

二、基于Linux源码的网络协议栈简介

1.网络层次结构

d037ead1004718efd52e3560110fdead.png

2.Linux Socket

socket 位于应用层,它为网络应用编程提供API。通过Linux Socket,网络应用程序得以访问内核空间的协议栈,从而形成通信。同时,Linux系统中一切皆文件,Socket也是文件的一部分,调用Socket API进行数据收发时控制的是收发缓冲区的文件描述符。Linux Socket API的定义在./net/socket.c中。以下是UDP Socket与TCP Socket处理过程

863249a2cb445fa035964348f29ea7fc.png

4c4a09c1d956995d58102d60847291d2.png

3.TCP/IP协议栈

TCP位于传输层,其主要功能包括建立连接(三次握手)、滑动窗口和拥塞控制,Linux中TCP栈的基本处理过程如下:

0d8c73fc715f3d1f54af4a1c563eb55c.png

IP位于网络层,其主要功能包括IP Fragment的分片转发和路由处理,Linux中IP栈的基本处理过程如下:

6f27449ca1a46f32eb9ef8799e9376d7.png

ARP也属于TCP/IP协议,它负责将IP地址转换为物理地址;

DNS为域名系统,由于IP地址不便于记忆,所以将其转换为容易记忆的域名;

Linux TCP/IP协议栈的初始化定义在linux/net/ipv4/af_inet.c

4.数据链路层

数据链路层在物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、流量控制、数据的检错重发等。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

Linux 提供了一个 Network device 的抽象层实现数据链路层的功能,其定义在 linux/net/core/dev.c

参考资料:https://blog.csdn.net/weixin_33724659/article/details/85808277

三、计算机网络知识水平与编程能力测试

一、选择题(5小题,每小题4分,共20分)

1.计算机网络中使用最广泛的交换技术是( ) 【网课“计算机网络”测试题】

A.电路交换 B.报文交换 C.分组交换 D.线路交换

答案:C,最常用的TCP/IP协议数据传输形式为分组

2.关于TCP/IP的IP层协议描述不正确的是( ) 【网课“计算机网络”测试题】

A、是点到点的协议 B、不能保证IP报文的可靠传送

C、是无连接的数据报传输机制 D、每一个IP数据包都需要对方应答

答案:A,IP协议为面向无连接

3.对地址转换协议(ARP)描述正确的是( )【2012考研真题】

A、ARP封装在IP数据报的数据部分 B、ARP是采用广播方式发送的

C、ARP是用于IP地址到域名的转换 D、发送ARP包需要知道对方的MAC地址

答案:B,主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址。不需要提前知道MAC地址。

4.在TCP/IP体系结构中,直接为ICMP提供服务的协议是( ) 【2012考研真题】

A.PPP B.IP C.UDP D.TCP

答案:C, ICMP报文包含在IP数据报内。

5.以下关于API与系统调用之间关系描述不正确的是( ) 【原创】

A. API可能直接提供⽤户态的服务

B. ⼀个单独的API可能调⽤⼏个系统调⽤

C. 每个API都调用了系统调用

D. 不同的API可能调⽤了同⼀个系统调⽤

答案:C, API可能不调用系统调用

二、简答题(5小题,每小题8分,共40分)

1.ipv4和ipv6能表示的总地址数量分别为多少?【原创】

答案:2^32, 2^128。 ipv4有32位(4字节),ipv6有128位(16字节)。

2.简述TCP协议建立连接的过程,并画出示意图。【百度文库】

答案:第1次握手:客户端通过将一个含有“同步序列号(SYN)”标志位的数据段发送给服务器。

第2次握手:服务器用一个带有“确认应答(ACK)”和“同步序列号(SYN)”标志位的 数据段响应客户端。

第3次握手:客户端发送一个数据段确认收到服务器的数据段,并开始传送实际数据。

4b19f08566fc18cdb265f0ba2677eaed.png

3.API和系统调用各自的定义,关系和区别。【原创】

答案:系统调用为操作系统为⽤户态进程与硬件设备进⾏交互提供的⼀组接口,应⽤编程接⼜(application program interface, API)和系统调⽤是不同的,API只是⼀个函数定义;不是每个API都对应⼀个特定的系统调⽤,API可能直接提供⽤户态的服务(如⼀些数学函数),⼀个单独的API可能调⽤⼏个系统调⽤,不同的API可能调⽤了同⼀个系统调⽤。

4.linux/net/socket.c中__sys_sendto和__sys_recvfrom函数包含哪些主要内容?是否包含流量控制?【原创】

答案:包含滑动窗口与收发缓冲区文件描述符的分配,不包含流量控制。

5.什么是DNS?主要功能是什么?如何理解域名www.edu.cn?【百度文库】

答案:DNS是域名服务,即Domain Name Service,它提供将域名与IP地址之间的双向解析功能,即可以将域名解析成对应的IP,可以将IP反向解析为对应的域名。

www.edu.cn的顶级域名是cn,代表中国,而edu是二级域名,代表教育单位,www是主机名。

三、综合题(2小题,每小题20分,共40分)

1.用java socket实现一个简单的网络聊天程序,只需写出主体代码,答案不唯一,合理即可。【原创】

参考答案:

public class server {

public static void main(String[] args) throws Exception {

// 监听指定的端口,阻塞直至客户端连接此端口

int port = 23333;

ServerSocket server = new ServerSocket(port);

System.out.println("server is waiting...");

Socket socket = server.accept();

System.out.println("Connected!");

// 读取从客户端返回的输入流,至尾端时返回-1

InputStream input = socket.getInputStream();

byte[] bytes = new byte[1024];

int len;

StringBuilder get = new StringBuilder();

while ((len = input.read(bytes)) != -1) {

get.append(new String(bytes, 0, len, "UTF-8"));

}

System.out.println("get message from client: " + get);

OutputStream output = socket.getOutputStream();

String sent = "Hi there";

output.write(sent.getBytes("UTF-8"));

System.out.println("sent message to client: " + sent);

// 关闭socket与服务器端

input.close();

output.close();

socket.close();

server.close();

}

}

public class client {

public static void main(String args[]) throws Exception {

// 连接本地主机,端口自设,与服务端一致即可

String host = "127.0.0.1";

int port = 23333;

// 通过socket与服务端建立连接

Socket socket = new Socket(host, port);

if(socket.isConnected()){

System.out.println("Connected!");

}

// 将要发送的信息写入输出流

OutputStream output = socket.getOutputStream();

String sent = "hello";

socket.getOutputStream().write(sent.getBytes("UTF-8"));

// 关闭客户端的输出流(单向,并未关闭socket)

socket.shutdownOutput();

System.out.println("sent message to server: " + sent);

// 读取从server返回的输入流

InputStream input = socket.getInputStream();

byte[] bytes = new byte[1024];

int len;

StringBuilder get = new StringBuilder();

while ((len = input.read(bytes)) != -1) {

get.append(new String(bytes, 0, len,"UTF-8"));

}

System.out.println("get message from server: " + get);

// 关闭socket

input.close();

output.close();

socket.close();

}

}

2.【2009考研真题】某网络拓扑如下图所示,路由器R1通过接口E1、E2分别连接局域网1、局域网2,通过接口L0连接路由器R2,并通过路由器R2连接域名服务器与互联网。

R1的L0接口的IP地址是202.118.2.1;R2的L0接口的IP地址是202.118.2.2,L1接口的IP地址是130.11.120.1,E0接口的IP地址是202.118.3.1;域名服务器的IP地址是202.118.3.2。

R1和R2的路由表结构为:目的网络IP地址 子网掩码 下一跳IP地址接口

047a121497af3d63458e4b4c9ccf2e85.png

(1) 将IP地址空间202.118.1.0/24划分为2个子网,分别分配给局域网1、局域网2,每个局域网需分配的IP地址数不少于120个。请给出子网划分结果,说明理由或给出必要的计算过程。

(2) 请给出R1的路由表,使其明确包括到局域网1的路由、局域网2的路由、域名服务器的主机路由和互联网的路由。

(3) 请采用路由聚合技术,给出R2到局域网1和局域网2的路由。0101H11——02254H1

答案:

(1)CIDR中的子网号可以全0或全1,但主机号不能全0或全1。因此若将IP地址空间202.118.1.0/ 24划分为2个子网,且每个局域网需分配的IP地址个数不少于120个,子网号至少要占用一位。

由 26-2<120<27-2可知,主机号至少要占用7位。由于源IP地址空间的网络前缀为24位,因此主机号位数+子网号位数= 8 。综上可得主机号位数为7,子网号位数为1。因此子网的划分结果为:

子网1:202.118.1.0/25,子网2:202.118.1.128/25。地址分配方案:子网1分配给局域网1,子网2分配给局域网2,或子网1分配给局域网2,子网2分配给局域网1。

(2) 由于局域网1和局域网2分别与路由器R1的E1、E2接口直接相连,因此在R1的路由表中,目的网络为局域网1的转发路径是直接通过接口E1转发,目的网络为局域网2的转发路径是直接通过接口E1转发。由于局域网1、2的网络前缀均为25位,因此它们的子网掩码均为255. 255. 255.128。根据题意,R1专门为域名服务器设定了一个特定的路由表项,因此该路由表项中的子网掩码应为255.255.255.255。对应的下一跳转发地址是202.118.2.2,转发接口是L0。根据题意,到互联网的路由实质上相当于一个默认路由,默认路由一般写作0/0,即目的地址为0.0.0.0,子网掩码为0. 0.0.0。对应的下一跳转发地址是202. 118. 2.2,转发接口是L0。综上可得到路由器R1的路由表为:

696381563cb649eb61bc204902020508.png

(3) 局域网1和局域网2的地址可以聚合为202.118.1.0/24,而对于路由器R2来说,通往局域网1和2的

转发路径都是从L0接口转发,因此采用路由聚合技术后,路由器R2到局域网1和局域网2的路由为:

a3d8ade6641b3f9d5d6df64a97ad51f3.png

标签:socket,IP,试卷,TCP,局域网,期末考试,API,IP地址,程序设计

来源: https://www.cnblogs.com/n-p-2019-blogs/p/12177630.html

1、制作ramdisk,给出主次设备号,并使用df命令显示相关信息。(20分) 要求:(1) ramdisk的大小为学号的后3位*2,单位为M; (2)对文件系统采用ext2进行格式化。 2、编写一个c程序实现下面的功能:监视一个文件,如果文件被其他进程追加了内容,就把追加的内容打印出来。(15分) (1) 假定所编辑的c程序为mytail.c,使用命令行方式将该源程序编译,目标执行程序为mytail。给出具体的编译实现过程。 (2) 假定日志文件为/usr/tmp/pppd.log,给出打印追加内容的方法。 3、设用户mali记录了在Linux系统中的某些用户的月工资清单,记录在文件mylist.txt中,假定文件mylist.txt的内容如下: #================================================== # 登录名 工作证号 姓名 月份 工资 奖金 补助 扣除 总额 #--------------------------------------------------- wang 2076 wangxi 01 1782 1500 300 175 3407 liang 2074 liangyu 02 1560 1400 280 90 3150 zhang 3087 zhangdi 03 1804 1218 206 213 3015 wang 2076 wangxi 03 1832 1550 230 245 3367 wang 2076 wangxi 04 1832 1450 230 245 3267 liang 2074 liangyu 05 1660 1450 230 70 3270 zhang 3087 zhangdi 06 1700 1310 283 270 3023 #================================================== 只允许用户zhang读取行首字符为#的行和与用户zhang有关的行,与其他用户有关的行对用户zhang保密。(15分) (1) 编写相应的查询query.c,给出目标文件为query的实现方法; (2) 给出设置mylist.txt文件权限为仅对文件主具有读写权限的实现命令; (3) 给出设置query文件用户ID权限实现命令; (4) 给出用户zhang执行程序query的结果。 4、使用fork,exec以及wait函数构造简单的shell解释程序。(15分) (1) 假定所编辑的c程序为myxsh.c,使用命令行方式将该源程序编译,目标执行程序为myxsh。给出具体的编译实现过程。 (2) 假定当前目录下有文件信息如下: 文件的行大小 文件名 文件的行大小 文件名 920 auther.c 146 licp.txt 127 myxsh.c 124 fus.h 160 chap1.h 152 myxse.c 46 fsme.h 164 fsme 运行myxsh程序出现提示符=>后,分析find . -name *.[ch] -exec wc -l {} ; 执行结果。 5、对/usr目录进行压缩归档,结果文件名位myusr.tar。(10分) 要求:(1)以控制台方式运行; (2)将该任务挂起,再转后台,再转前台,查看进程的状态变迁过程。 6、编写程序实现通过Windows客户端对Linux服务器端进行相关网络信息配置。(25分) 要求:(1)新修改服务器的IP 地址的构成方式:网络号为192.168.2.0,主机号为学号的后3位-150;掩码为255.255.255.0;默认网关为:网络号与服务器相同,主机号为1,DNS202.117.96.10; (2)服务器端程序以deamon程序的方式运行,监听端口为学号的后4位; (3)客服端使用VC++,以GUI 方式完成对服务器端的IP 地址、掩码、默认网关、DNS信息配置输入; (4)服务器端在接收客户端的配置信息后,使用exec 系列函数完成对IP 地址、掩码、默认网关、DNS修改,并写入相应的配置文件。结果验证:使用ifconfig检查IP地址信息配置的正确性;使用nslookup检查DNS信息的正确性。 把实现的信息结果与配置文件比较,检查其一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值