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

一、选择题

1、在OSI参考模型的物理层、数据链路层、网络层传送的数据单位分别为 (A) 

A、比特、帧、分组      B、比特、分组、帧  

C、帧、分组、比特      D、分组、比特、帧

2、ARP 协议的功能是__A___ 。 (2012考研408试题)

A.根据 IP 地址查询 MAC 地址 

B.根据 MAC 地址查询 IP 地址

C.根据域名查询 IP 地址 

D.根据 IP 地址查询域名

解析:A

考查 ARP 协议的功能。

在实际网络的数据链路层上传送数据时,最终必须使用硬件地址,ARP 协议是将网络层的 IP 地址解析为数据链路层的 MAC 地址。

3、下列所述的哪一个是无连接的传输层协议?(B)

A. TCP

B. UDP

C. IP

D. SPX  

4、(2011年 408)TCP/IP参考模型的网络层提供的是(A)。

A. 无连接不可靠的数据报服务  B. 无连接可靠的数据报服务

C. 有连接不可靠的虚电路服务  D. 有连接可靠的虚电路服务

解答:A。TCP/IP的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。此外考察IP首部,如果是面向连接的,则应有用于建立连接的字段,但是没有;如果提供可靠的服务,则至少应有序号和校验和两个字段,但是IP分组头中也没有(IP首部中只是首部校验和)。因此网络层提供的无连接不可靠的数据服务。有连接可靠的服务由传输层的TCP提供。

5、下列选项中,不属于网络体系结构所描述的内容是__C____。

A.网络的层次
B.每一层使用的协议
C.协议的内部实现细节
D.每一层必须完成的功能
解析:考查计算机网络体系结构的基本概念。
我们把计算机网络的各层及其协议的集合称为体系结构。因此 A、B、D 正确,而体系结构是抽象的,它不包括各层协议及功能的具体实现细节
 
6、在实现基于TCP的网络应用程序时,服务器端正确的处理流程是 (C)

A、socket() -> bind() -> listen() -> connect() -> read()/write() -> close()

B、socket() -> bind() -> listen() -> read()/write() -> close()

C、socket() -> bind() -> listen() -> accept() -> read()/write() -> close() 

D、socket() -> connect() -> read()/write() -> close() 

7、在TCP/IP的进程之间进行通信经常使用客户/服务器方式,下面关于客户和服务器的描述错误的是(C)。

A、客户和服务器是指通信中所涉及的两个应用进程。

B、客户/服务器方式描述的是进程之间服务与被服务的关系。

C、服务器是服务请求方,客户是服务提供方。

D、一个客户程序可与多个服务器进行通信。

8、若主机甲主动发起一个与主机乙的TCP连接,甲、乙选择的初始序列号分别为 2018 和 2046,则第三次握手 TCP 段的确认序列号是(D)
A.  2018
B.  2019
C.  2046
D.  2047

选D,第三次握手为甲对乙的序号的确认,会占用一个序号,故为2046+1=2047

二、简答题

1、简述三次握手流程和缺陷

解析:三次握手的具体流程

所谓三次握手,即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:



(1)第一次握手:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号seq=J(连接请求报文不携带数据,但要消耗一个序号)。

(2)第二次握手:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为J+1,并且服务器随机产生起始序号seq=K(确认报文不携带数据,但也要消耗一个序号)。

(3)第三次握手:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位被置1,确认字段为K+1,该报文段可以携带数据,若不携带数据则不消耗序号。
成功进行以上三步后,就建立了TCP连接。

SYN泛洪攻击利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,使得被攻击方资源耗尽,从而不能够为正常用户提供服务。SYN 泛洪攻击通过发送大量的伪造 TCP 连接报文而造成大量的 TCP 半连接,服务器端将为了维护这样一个庞大的半连接列表而消耗非常多的资源。这样服务器端将忙于处理攻击者伪造的TCP连接请求而无法处理正常连接请求。

2、为什么不采用两次握手建立连接

解析:这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端而产生错误。考虑下面这种情况,客户A向服务器B发出TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达服务端B,而B认为A又发来连接请求,此时若使用三次握手,则B向A返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。若采用的是两次握手,则这种情况下B认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费。

 

posted @ 2020-01-10 13:39  wangp19  阅读(223)  评论(0编辑  收藏  举报