TCP连接的三次握手概述:
- 客户端发送一个SYN=n标志的数据包给服务器,请求进行连接并进入SYN_SEND状态,这是第一次握手;
- 服务器收到请求会向客户端发送一个确认数据包ACK=n+1,同时发送一个SYN=m标志的数据包给客户端并进入SYN_RECV状态,这是第二次握手;
-
最后,客户端收到SYN+ACK包后,发送一个ACK = m + 1的数据包给服务器,告诉它连接已被确认;此包发送完毕,客户端和服务器进入ESTABLISHED状态,开始通讯,这就是第三次握手
TCP关闭连接的四次挥手概述:
- 客户端发送一个FIN的断开链接数据包给服务器,请求断开链接(哥么我看你心烦,断交);
- 服务器收到客户端的FIN(断交函)以后,会先发送一个ACK的响应确认包,哥么有可能还有数据需要搞(没空搭理你mmp),等着吧;
- 哥么好不容易忙完了,还有你这茬儿,断交就断交,向客户端发送一个FIN(断交函),好吧断交;
- 客户端收到服务器的FIN后,会向服务器发送一个ACK的确认包(彻底断交),然后经过两个MSL时长后断开连接。
MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。
专业术语概述
*SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
*ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
*RST:复位标志
复位标志有效。用于复位相应的TCP连接。
*URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位。
*PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
*FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据