在Tcp/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
- 客户端发送SYN(syn=x)包到服务端,客户端此时进入SYN_SEND状态。
- 服务端确认接收客户端的SYN包,必须确认客户的SNY(x+1),同时也发送自己的SNY(syn=k)+ACK包,服务端此时进入SYN_RECV
- 客户端接收服务端发送的SNY+ACK包,向服务器发送确认包ACK(k+1),ACK包发送完毕,客户端和服务器进入established状态
为什么需要三次握手才能建立连接:
- 初始化SequenceNumber的初始值
首次握手的隐患:
- 服务端收到客户端的SYN包回复SYN-ACK的时候未收到ACK确认
- 服务端不断重试直到超时,Linux默认63秒断开连接
- 针对恶意攻击,当SYN队列满了之后,通过tcp_syncookies参数返回SYN Cookie,若为正常连接则客户端会返回SYN Cookie,直接建立连接。
- 若连接后客户端出现故障,服务端会发送保活报文,直到饱和则断开连接
Ps:
- ACK:确定序号标志
- SYN:同步序号,用于建立连接过程
网友评论