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

Posted yingjiehuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?相关的知识,希望对你有一定的参考价值。

题目来源于不同的博客,结合课堂内容梳理得到

选择题

1.以下选项中,是 TCP/IP 体系中运输层最重要的协议之一的是 (A )

A UDP

B FTP

C DNS

D PPP

正确答案选A

 
2.以下不是DNS服务的作用的是:(D)

A 将主机名翻译到指定的IP地址

B 将IP地址反解成主机名

C 解析特定类型的服务的地址,如MX,NS

D 将IP解析成MAC地址

正确答案选D

DNS是域名解析协议

IP地址转换成MAC地址是ARP协议的作用

 
3.服务与协议是完全不同的两个概念,下列关于它们的说法错误的是 (D)

A 协议是水平的,即协议是控制对等实体间通信的规则。服务是垂直的,即服务是下层向上层通过层间接口提供的。

B 在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务

C 协议的实现保证了能够向上一层提供服务。

D OSI将层与层之间交换的数据单位称为协议数据单元PDU

正确答案为D,应该是SDU不是PDU

 
4.计算机是怎么确定哪个应用程序使用该协议(C)

A ip地址

B mac机制

C 端口号

D 协议名

 
5.可以用哪个命令来查看TCP和UDP连接状态?(B)

A ping

B netstat

C ipconfig

D nslookup

正确的答案为B

Netstat: 显示有哪些网络连接正在运作。默认显示 TCP 连接的信息。
ping:检查网络是否连通,可以很好地帮助我们分析和判定网络故障
Ipconfig: 显示 IP 地址、子网掩码和缺省网关值。
Nslookup: 查询 DNS 的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。
 
 
 

简答题

1.TCP连接建立的时候 3 次握手的具体过程,以及其中的每一步是为什么?

三次握手 TCP连接是通过三次握手来连接的。

第一次握手 当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为x,等待服务器确认,这时客户端的状态为SYN_SENT。

第二次握手 当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为x+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这里我们设SYN为y。这时服务器的状态为SYN_RECV。 一句话,服务器端发送SYN和ACK两个包。

第三次握手 客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,这里的ACK为y+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。 在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

 
2.什么是 socket?简述基于 tcp 协议的套接字通信流程。

socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于 Socket 来完成通信的。

tcp协议套接字通信流程

(1)服务器先用 socket 函数来建立一个套接字,用这个套接字完成通信的监听。
(2)用 bind 函数来绑定一个端口号和 IP 地址。因为本地计算机可能有多个网址和 IP,每一个 IP 和端口有多个端口。需要指定一个 IP 和端口进行监听。
(3)服务器调用 listen 函数,使服务器的这个端口和 IP 处于监听状态,等待客户机的连接。
(4)客户机用 socket 函数建立一个套接字,设定远程 IP 和端口。
(5)客户机调用 connect 函数连接远程计算机指定的端口。
(6)服务器用 accept 函数来接受远程计算机的连接,建立起与客户机之间的通信。
(7)建立连接以后,客户机用 write 函数向 socket 中写入数据。也可以用 read 函数读取服务器发送来的数据。
(8)服务器用 read 函数读取客户机发送来的数据,也可以用 write 函数来发送数据。
(9)完成通信以后,用 close 函数关闭 socket 连接。

 
3. connect会阻塞,怎么解决?
connect调用的时候,当发起主动连接的时候,如果服务端关闭,则进程会被connect阻塞,等待较长时间返回。假如直接将connect直接定义为非阻塞的,则无法确定connect是否连接成功。
(1)建立socket
(2)将该socket设置为非阻塞模式
(3)调用connect()
(4)使用select()检查该socket描述符是否可写
(5)根据select()返回的结果判断connect()结果
(6)将socket设置为阻塞模式

以上是关于如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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