面试题答案
一键面试- TCP协议三次握手建立连接的过程:
- 第一次握手:客户端向服务器发送一个SYN(同步)包,该包中包含客户端的初始序列号(Sequence Number,记为seq=x)。此时客户端进入SYN_SENT状态,等待服务器确认。
- 第二次握手:服务器收到客户端的SYN包后,向客户端发送一个SYN + ACK包。其中SYN部分包含服务器的初始序列号(seq=y),ACK部分是对客户端SYN包的确认,确认号(Acknowledgment Number)为客户端的序列号加1,即ack=x + 1。此时服务器进入SYN_RCVD状态。
- 第三次握手:客户端收到服务器的SYN + ACK包后,向服务器发送一个ACK包。该ACK包的确认号为服务器的序列号加1,即ack=y + 1,序列号为客户端最初发送的序列号加1,即seq=x + 1。服务器收到这个ACK包后,双方进入ESTABLISHED状态,连接建立成功。
- 三次握手过程中出现丢包等异常情况的处理:
- 第一次握手丢包:
- 客户端处理:客户端在发送SYN包后会启动一个定时器,如果在规定时间内没有收到服务器的SYN + ACK包,定时器超时,客户端会重新发送SYN包,这个过程会重复多次,一般重试次数由系统参数决定。如果多次重试后仍无法收到服务器响应,客户端会放弃连接尝试,并返回相应错误。
- 第二次握手丢包:
- 客户端处理:客户端等待SYN + ACK包的定时器超时后,会重新发送SYN包,和第一次握手丢包时客户端的处理类似。
- 服务器处理:服务器在发送SYN + ACK包后,也会启动一个定时器,如果在规定时间内没有收到客户端的ACK包,定时器超时,服务器会重新发送SYN + ACK包,重复多次,若多次重试后仍未收到客户端ACK,服务器也会放弃连接。
- 第三次握手丢包:
- 服务器处理:服务器没有收到客户端的ACK包,定时器超时后,会重新发送SYN + ACK包。客户端收到重发的SYN + ACK包后,会再次发送ACK包,确保连接成功建立。
- 第一次握手丢包: