计算机网络-----TCP四次挥手相关面试题扩展

TCP四次挥手相关面试题扩展

1. TCP四次挥手

直接上图 TCP四次挥手

计算机网络-----TCP四次挥手相关面试题扩展

专业名称解释

解释
TCP 传输控制协议(TCP,Transmission Control Protocol)
SYN 同步序列编号
SYN_SENT Client请求连接
ESTABLISHED 含义TCP:连接成功
ACK (Acknowledge character)即是确认字符,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
SYN_RCVD SYN_RCVD是TCP三次握手的中间状态,是服务端口(监听端口,如应用服务器的80端口)收到SYN包并发送[SYN,ACK]包后所处的状态
RST TCP首部中的6个标志比特之一,表示重置连接、复位连接。复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
ISN 初始序列号(Initial Sequence Number)
FIN 来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;
FIN_WAIT_1 FIN_WAIT_1状态是在baiserver端主动要求关闭tcp连接,并且主du动发zhi送fin以后,等待client端回复daoack时候的状态。zhuan
LAST_ACK LAST_ACK是TCP建立链接过程中的等待原来的发向远程TCP的连接中断请求的确认状态;

第一次挥手

  • 客户端Client将FIN置为1,发送一个序列号seq给服务端Server。进入FIN_WAIT_1状态。

第二次挥手

  • 服务端收到FIN之后,发送一个ACK-1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。

第三次挥手

  • 服务端Server将FIN置为1,发送一个序列号给Client;进入LAST_ACK状态;

第四次挥手

  • Client收到服务器的FIN后,进入TIME_WAIT状态;接着将ACK置1,发送一个acknowledge number=序列号+1给服务器;服务器收到后,确认acknowledge number后,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。

2. 为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手?

  • 因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。

3. 如果第二次挥手时服务器的ACK没有送达客户端,会怎样?

  • 客户端没有收到ACK确认,客户端会重新发送FIN请求。

4. 客户端TIME_WAIT状态的意义是什么?

  • 第四次挥手时,客户端发送给服务器的ACK有可能丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Server服务端没有收到ACK,就会重发FIN,如果Client在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断重发FIN。

  • MSL(Maximum Segment Lifetime),指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

上一篇:http三次握手四次挥手


下一篇:Python面试5