面试冲刺:10---accept发生在三次握手的哪个阶段?

时间:2024-04-09 20:02:25

一、TCP的三次握手

二、accept分别发生在三次握手的哪个阶段?

面试冲刺:10---accept发生在三次握手的哪个阶段?

  • 通过上图来分析一下TCP三次握手的具体细节
    • 第1步:服务端处于LISTEN状态,客户端处于CLOSED状态
    • 第2步:客户端打开,并进行SYN的发送,处于SYN_SENT状态
    • 第3步:服务端收到此条消息后,转为SYN_RCVD状态,并对客户端进行消息回复
    • 第4步:客户端收到此条消息后,转为ESTABLISHED状态,并发送一个ACK的确认消息
    • 第5步:服务端收到此条消息后,转为ESTABLISHED状态
    • 至此,三次握手完成
  • 此时你或许可能会认为accept是会发生在上面的第3步,但是这是错误的
  • 实际的accept是发生在三次握手之后,原因如下:
    • 服务端的accept()函数会为客户端分配资源
    • 但是设想一下,如果成千上万的客户端连接服务端,之后就不再回应服务端了,但是服务端仍然需要保持这些资源信息,这就白白浪费了服务端的资源(这就是DDOS攻击的原理)
    • 因此accept()函数是被放到了TCP三次握手完成之后的,