2024年4月23日发(作者:)

【干货】Linux运维常见网络部分面试题库合集

一、三次握手四次挥手

1.1 为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送

SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但

是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭

SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文

我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报

文,因此不能一起发送。故需要四步握手。

1.2 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回

到CLOSE状态?

MSL(MaximumSegment Lifetime),TCP允许不同的实现可以设置不同的

MSL值。第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为

这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报

文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有

收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收

到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。第二,防

止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连

接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本

连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会

出现旧连接的请求报文。

1.3 为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文

后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收

到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自

己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些

数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方

ACK和FIN一般都会分开发送,从而导致多了一次。

1.4 为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都

知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手

过程中被发送和确认。现在把三次握手改成仅需要两次握手,死锁是可能发生

的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求

分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S

认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分

组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样

的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认

为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分

组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

1.5 如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等

下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计

时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服

务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个

探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

1.6 为什么要三次握手?

保证可靠的核心就是双方都需要确认自己发送和接受信息的功能正常,但因为网

络环境的不稳定性,这一秒能收发下一秒可能网络核心就发生严重拥塞,所以世界

上不存在完全可靠的通信协议.两次握手会怎样?若建立连接只需两次握手,客

户端并没有太大的变化,在获得服务端的应答后进入ESTABLISHED状态,即

确认自己的发送和接受信息的功能正常.但如果服务端在收到连接请求后就进入

ESTABLISHED状态,不能保证客户端能收到自己的信息,此时如果网络拥塞,客

户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端

正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那

个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进

入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已

进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

1.7 为什么要四次挥手?

TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双

向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于

断开另一方向的连接。第一次挥手:若A认为数据发送完成,则它需要向B发送

连接释放请求.该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u.此时,A

将进入FIN-WAIT-1状态。1,FIN=1表示该报文段是一个连接释放请求.

2,seq=u,u-1是A向B发送的最后一个字节的序号.

第二次挥手:

B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接

已经释放.此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文

头包含:ACK=1,seq=v,ack=u+1.

ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为

1,表示应答.

1,seq=v,v-1是B向A发送的最后一个字节的序号.

2,ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收

了前u个字节.A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求.

第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不

会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。

第三次挥手:

当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:

FIN=1,ACK=1,seq=w,ack=u+1.随后B进入LAST-ACK状态.

第四次挥手:

A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会

持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤

销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB。

1.8 为什么TCP客户端最后还要发送一次确认呢?

一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生

错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了

第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由

于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服

务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,

然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,

这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建

立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算

是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确

认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户

端并没有请求连接。

1.9 简述TCP三次握手的过程?

答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一

个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进

入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必

须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即

SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服

务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完

毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握

手,客户端与服务器开始传送数据简版:首先A向B发SYN(同步请求),然

后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的

一次连接(三次握手)的过程就建立了。三次握手我们先明确两个定义:

1,client为数据发送方

2,server为数据接收方

好,下面进行三次握手的总结:

1,client想要向server发送数据,请求连接。这时client想服务器发送一个

数据包,其中同步位(SYN)被置为1,表明client申请TCP连接,序号为

j。

2,当server接收到了来自client的数据包时,解析发现同步位为1,便知道

client是想要简历TCP连接,于是将当前client的IP、端口之类的加入未连接

队列中,并向client回复接受连接请求,想client发送数据包,其中同步位为

1,并附带确认位ACK=j+1,表明server已经准备好分配资源了,并向client

发起连接请求,请求client为建立TCP连接而分配资源。

3,client向server回复一个ACK,并分配资源建立连接。server收到这个确

认时也分配资源进行连接的建立。

那么问题来了为什么需要第三次握手?第三次握手失败了怎么办?三次握手有

什么缺陷可以被黑客利用,用来对服务器进行攻击?

怎么防范这种攻击?

接下来进行一一解答。

1.9.1 为什么需要第三次握手?

答:如果没有第三次握手,可能会出现如下情况:如果只有两次握手,那么

server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向

client发送一个确认位ACK回复数据包。那么,如果在client与server建立

连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,

即client向server发送的请求建立连接的数据包由于数据链路的拥塞或者质量

不佳导致该连接请求数据包仍然在网络的链路中,这些残留数据包会造成如下

危害危害:当client与server建立连接,数据发送完毕并且关闭TCP连接之

后,如果链路中的残留数据包才到达server,那么server就会认为client重

新发送了一次连接申请,便会回复ACK包并且分配资源。并且一直等待client

发送数据,这就会造成server的资源浪费。

1.9.2 第三次握手失败了怎么办?

答:当client与server的第三次握手失败了之后,即client发送至server的

确认建立连接报文段未能到达server,server在等待client回复ACK的过程

中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,

即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是

为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将

server的未连接队列塞满,浪费server的资源。

1.9.3 三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?

答:黑客仿造IP大量的向server发送TCP连接请求报文包,从而将server的

半连接队列(上文所说的未连接队列,即server收到连接请求SYN之后将

client加入半连接队列中)占满,从而使得server拒绝其他正常的连接请求。

即拒绝服务攻击

1.9.4 怎么防范这种攻击?

1,缩短服务器接收客户端SYN报文之后的等待连接时间,即SYNtimeout时

间,也就是server接收到SYN报文段,到最后放弃此连接请求的超时时间,

将SYNtimeout设置的更低,便可以成倍的减少server的负荷,但是过低的

SYNtimeout可能会影响正常的TCP连接的建立,一旦网络不通畅便可能导致

client连接请求失败2,SYNcookie + SYN proxy 无缝集成(较好的解决方

案)SYNcookie:当server接收到client的SYN之后,不立即分配资源,而

是根据client发送过来的SYN包计算出一个cookie值,这个cookie值用来

存储server返回给client的SYN+ACK数据包中的初始序列号,当client返

回第三次握手的ACK包之后进行校验,如果校验成功则server分配资源,建

立连接。SYNproxy代理,作为server与client连接的代理,代替server与

client建立三次握手的连接,同时SYNproxy与client建立好了三次握手连接

之后,确保是正常的TCP连接,而不是TCP泛洪攻击,那么SYNproxy就与

server建立三次握手连接,作为代理(网关?)来连通client与server。(类

似VPN了解一下。)

二、路由

2.1 填空题。

1. 静态 路由设定后,若 网络 拓扑结构发生变化,需由系统 管理员 修改路由

的 设置 。

2.网络管理的重要任务是: 控制 和 监控 。

3.在安装Linux系统中,使用 netconfig 程序对网络进行配置,该安装程序会

一步步提示用户输入 主机名 、 域名 、 域名服务器 、 IP地址 、 网关地

址 和 子网掩码 等必要信息。

4. RIP 协议是最为普遍的一种内部协议,一般称为动态路由信息协议。

5. DHCP 可以实现动态IP地址分配。

6.网络管理通常由 监测 、 传输 和 管理 三部分组成,其中 管理部分 是整个网

络管理的中心。

7. Ping 命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用

于 测试网络的连通性 。

8.进行远程登录的命令是 telnet 。

是动态主机配置协议的简称,其作用是: 为网络中的主机分配IP 地

址。

10.路由选择协议(RIP)的跳数表示到达目的地之前必须通过的网关数,RIP

接受的最长距离是 15 跳。

命令用于测试网络的连通性,ping命令通过 ICMP 协议(internet控

制信息协议)来实现。

2.2 选择题。

12.下面的网络协议中,面向连接的的协议是: A 。

A 传输控制协议

B 用户数据报协议

C 网际协议

D 网际控制报文协议

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

A 配置域名服务器

B 定义一条本机指向所在网络的路由

C 定义一条本机指向所在网络网关的路由

D 定义一条本机指向目标网络网关的路由

14.局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是

192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置

正确的是 B 。

A route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0

metric1

B route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255

metric1

C route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0met

ric 1

D route add default 192.168.1.0 netmask 172.168.1.1 metric 1

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

A 配置本地回环地址

B 配置网卡的IP地址

C 激活网络适配器

D 加载网卡到内核中

16.在局域网络内的某台主机用ping 命令测试网络连接时发现网络内部的主机

都可以连同,而不能与公网连通,问题可能是 C 。

A 主机IP设置有误

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

C 局域网的网关或主机的网关设置有误

D 局域网DNS服务器设置有误

17.下列文件中,包含了主机名到IP 地址的映射关系的文件是: B 。

A /etc/HOSTNAME

B /etc/hosts

C /etc/

D /etc/networks

18.在TCP/IP 模型中,应用层包含了所有的高层协议,在下列的一些应用协议

中, B 是能够实现本地与远程主机之间的文件传输工作。

A telnet

B FTP