通常,SYN包只用于TCP三次握手协议中。常见的tcp三次握手协议过程(当然还有同时连接、半连接等其它一些情况),如下:
1、client SYN包---> server
2、client <---SYN包/ACK包 server
3、client ACK包---> server
根据tcp状态图,对应下述4个状态的变化
a、client发送完毕,状态变成SYN_SEND;
b、server收到SYN报并发送ack确认包和SYN包,状态变为SYN_RECV
c、client发送ack包完毕,状态变成ESTABLISHED
d、server发送ack包完毕,状态变成ESTABLISHED 在linux内核中,上述几个状态对应为TCP_SYN_SEND、TCP_SYN_RECV、TCP_ESTABLISHED.
RFC793中关于SYN_RECV状态的描述如下:
SYN-RECEIVED - represents waiting for a confirming connection
request acknowledgment after having both received and sent a
connection request.