TCP 连接的“ 三次握手 ”与“ 四次断开 ”
1、了解相关名词
序列号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
常见的标志位:
ACK:确认序号有效。
SYN:发起一个新连接。
FIN:释放一个连接。
2、了解netstat中的网络状态
CLOSED -初始(无连接)状态。
LISTEN -侦听状态,等待远程机器的连接请求。
SYN-SENT -在发送连接请求后等待匹配的连接请求。
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认。
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户。
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认。
FIN-WAIT-2 - 从远程TCP等待连接中断请求。
CLOSE-WAIT - 等待从本地用户发来的连接中断请求。
CLOSING -等待远程TCP对连接中断的确认。
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认。
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认。
3、TCP/IP三次握手
建立TCP连接时,需要客户端和服务器共发送3个包。
• 第一次:客户端发送初始序号x和SYN=1请求标志
• 第二次:服务器发送请求标志SYN,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1
• 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1
4、TCP/IP四次断开
四次断开过程
• 第一次断开:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
• 第二次断开:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
• 第三次断开:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
• 第四次断开:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。