SRE、运维工程师面试过程中,会问哪些问题?特别是TCP网络一直都是面试的高发题目,会被问些啥呢,这里我整理了相关的高发问题。
所有的问题会陆续更新到WX公众号:Linux运维实战派
或扫描关注,获取最新更新
一线大厂面试真题:
大厂面试必问:CPU使用率100%怎么办?运维高手这样回答!
字节面试真题–用户反馈网页访问慢,可能会有哪些原因
字节面试真题–TCP建立连接为什么要三次握手?为什么不是两次或者四次?
面试八股(五) TCP的三次握手与四次挥手过程【是详述可不是简单几句话哦】
面试八股(六) 腾讯面试真题:close_wait状态的原因是什么?该怎么办?
面试八股(七) TCP Keepalive和HTTP Keep-Alive有什么区别?
面试八股(八) Linux服务器拔网线或者断电,已建立的TCP连接会中断吗?
面试八股(九) 关于TCP TIME_WAIT状态的所有面试题都在这里了
面试八股(11) 字节真题,关于TCP半连接与全连接队列的所有面试题
面试八股(12) 大厂真题,你了解synflood攻击吗?该如何应对
问题10:服务端处于TCP TIME_WAIT状态的连接,客户端重用这个连接还能连上吗?
书接上回,在服务端处于TIME_WAIT状态时,如果客户端使用了相同的四元组来尝试建立连接(接收到SYN包),会怎么样?会被reset吗?
下边我会结合kernel 5.10的源码分析结果。
一、问题结论
服务端收到合法的SYN会被接收并正常建立连接
服务端收到非法的SYN包后,会向客户端回复ACK,因为客户端此时连接已经关闭(或SYN_SENT状态),所以这个ACK会被客户端reset
二、合法SYN包
接收到的数据包的时间戳比上一次连接中接收的数据包时间戳大,且数据包的序列号要比上一次连接中接收的数据包最后的序列号要大
三、非法SYN包
收到非法的SYN包的时候
四、服务端TIME_WAIT状态的异常场景
4.1 问题场景
在上边的场景中,就是经过了NAT,或者LVS(LVS的fnat),NAT或者LVS节点的local ip比较少,有的甚至只有一个。目标服务也只有一个实例,或者很少几个
-
第一个client请求过来的时候,经过NAT或者LVS NAT之后,使用的local ip是一个。请求到Server之后,记录下了这个四元组的序号和时间戳。
-
如果Server服务频繁的中断连接,出现大量的TIME_WAIT连接
-
在高并发的场景下,在后续的第二个Client过来请求的时候,如果出现了端口回绕(四元组源IP,目标IP,目标端口是固定的),使用相同的源端口(23456)到达Service(服务上的四元组正处于TIME_WAIT)
-
如果后续Client的时间戳比Service上记录的时间戳小,这个时候就会触发非法SYN包的逻辑,客户端会收到ACK报文。客户端将这个ACK进行RST,最终导致时钟慢的主机,会连接失败。
4.2 出现概率
-
NAT/LVS上的local ip比较少,后端服务Service节点太少的时候,造成四元组只有源端口一个可变因素
-
高并发的短连接(服务端主动关闭)造成大量的TIME_WAIT
4.3 怎么解决
-
NAT/LVS增加local ip,在之前LVS的Fullnat结构中,每个LVS实例都会配置一整个C段作为源IP
-
扩容后端Server的节点数量
-
采用长连接【很重要】
五、源码分析
基于kernel 5.10源码分析,TCP收包的入口函数tcp_v4_rcv
time_wait状态的处理流程:
tcp_v4_rcv