上篇聊完Java基础,这篇进入滴滴网络编程专项。滴滴出行高度依赖网络——叫车请求、实时定位上报、行程同步。网络编程面试考TCP原理、HTTPS加密、DNS优化、网络状态监听。
今天8道题覆盖滴滴网络编程面试核心考点。
Q1:TCP三次握手的过程和原因?
过程:客户端发送SYN(seq=x)→ 服务端收到SYN,回复SYN+ACK(seq=y, ack=x+1)→ 客户端收到SYN+ACK,回复ACK(ack=y+1)。三次握手完成后连接建立。
为什么三次不是两次:两次握手无法防止历史连接。如果客户端之前发送的一个SYN在网络中延迟到达服务端,服务端认为是新连接发送SYN+ACK,客户端没有第三次确认——服务端白白分配资源。三次握手中客户端可以发送RST拒绝这个历史连接。
为什么不是四次:三次已经足够确认双方的收发能力(第一次确认客户端能发,第二次确认服务端能收能发,第三次确认客户端能收)。
追问:TCP四次挥手?主动关闭方发送FIN → 被动方回复ACK(此时被动方可能还有数据要发送)→ 被动方发送FIN → 主动方回复ACK → 等待2MSL(Maximum Segment Lifetime)后关闭。为什么等2MSL?确保末个ACK到达对方,以及让网络中残留的报文过期。
Q2:HTTPS的加密流程是什么?
TLS握手(TLS 1.2):客户端发ClientHello(加密套件+Client Random)→ 服务端回ServerHello(选定套件+Server R