面试题答案
一键面试优化TCP连接建立策略
- 减少握手次数:
- 采用类似QUIC协议思路:QUIC基于UDP实现了0-RTT或1-RTT的连接建立。在首次连接时,客户端在ClientHello中携带加密的会话票证(Ticket),服务器若识别出该票证,可直接进入应用数据传输阶段,实现0-RTT;若为新连接或票证不可用,则进行1-RTT连接建立。这种方式避免了传统TCP三次握手的延迟。
- 优化握手参数:
- TCP Fast Open:客户端在首次连接时,通过TCP选项向服务器发送Cookie。服务器验证Cookie后,后续客户端发起连接时,可在SYN包中携带应用数据,服务器验证Cookie合法后,直接进入数据传输,减少一次RTT。
优化TCP连接断开策略
- 减少挥手次数:
- 改进四次挥手机制:在某些场景下,若能确定双方都无数据要发送,可将四次挥手简化为类似两次挥手。例如,服务器端主动关闭连接,在发送FIN包后,若同时确认客户端也无数据发送,可将ACK和FIN合并发送,客户端收到后,直接发送ACK完成连接关闭,减少一次RTT。
- 延迟关闭:
- 设置合适的TIME_WAIT参数:在服务端,可适当延长TIME_WAIT状态的时间,在此期间复用该连接,避免新连接建立的开销。同时,要注意TIME_WAIT状态占用的资源,防止资源耗尽。
平衡性能与可靠性
- 性能方面:
- 连接池技术:在应用层维护TCP连接池,当有请求时,从连接池中获取连接,使用完毕后归还,避免频繁的连接建立与断开。例如,数据库连接池就广泛采用这种方式,提升了高并发场景下的性能。
- 负载均衡:通过负载均衡器将请求均匀分配到多个服务器,减轻单个服务器的连接压力。例如,使用Nginx作为负载均衡器,可基于IP、端口、URL等多种方式进行请求分发。
- 可靠性方面:
- 重传机制:TCP的重传机制保证数据可靠传输。可根据网络状况动态调整重传超时时间(RTO),避免过早或过晚重传。例如,在网络抖动时,适当延长RTO,防止不必要的重传。
- 冗余备份:在服务器端设置冗余服务器,当主服务器出现故障时,备用服务器能及时接管连接,保证服务的可靠性。例如,使用Keepalived实现服务器的主备切换。