面试题答案
一键面试- 第一次握手:
- 客户端:客户端处于
CLOSED
状态,它主动向服务器发送一个SYN
(同步序列号)报文段,此时客户端进入SYN_SENT
状态。这个SYN
报文段包含客户端随机生成的初始序列号(seq=x
),SYN
标志位被置为1。 - 服务器端:服务器处于
LISTEN
状态,等待客户端的连接请求。当服务器接收到客户端的SYN
报文段后,进入SYN_RCVD
状态。
- 客户端:客户端处于
- 第二次握手:
- 服务器端:服务器收到客户端的
SYN
报文段后,向客户端发送一个SYN + ACK
报文段。其中SYN
标志位为1,表示这也是一个同步报文,同时ACK
标志位也为1,表示确认收到了客户端的SYN
。该报文段的序列号为服务器随机生成的初始序列号(seq = y
),确认号为客户端的序列号加1(ack = x + 1
)。发送完这个报文段后,服务器进入ESTABLISHED
状态。 - 客户端:客户端接收到服务器的
SYN + ACK
报文段后,从SYN_SENT
状态进入ESTABLISHED
状态。
- 服务器端:服务器收到客户端的
- 第三次握手:
- 客户端:客户端收到服务器的
SYN + ACK
报文段后,向服务器发送一个ACK
确认报文段。ACK
标志位为1,确认号为服务器的序列号加1(ack = y + 1
),序列号为客户端在第一次握手中的序列号加1(seq = x + 1
)。发送完这个ACK
报文段后,客户端就已经建立起与服务器的可靠连接,可以开始传输数据。 - 服务器端:服务器接收到客户端的
ACK
报文段后,确认连接建立成功,服务器也处于ESTABLISHED
状态,双方可以开始进行数据传输。
- 客户端:客户端收到服务器的