客户端向服务器端发起连接 三次握手
客户端发送syn=1 发起连接请求
服务端syn=1 ack=1 告诉客户端 可以连接
客户端发送数据给服务端
客户端向服务器端终止连接 四次挥手
客户端请求和服务端断开连接 Fin=1
服务端Ack=1 表示可以结束连接
服务端Ack=1 Fin=1传输数据给客户端
客户端终止连接 Fin=1
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
对于我们日常的分析有用的就是前面的五个字段:它们的含义是:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
为什么握手是三次,而挥手时需要四次呢?
TCP握手的时候,接收端将SYN包和ACK确认包合并到一个包中发送的,所以减少了一次包的发送。
对于四次挥手,由于TCP是全双工通信,主动关闭方发送FIN请求不代表完全断开连接,只能表示主动关闭方不再发送数据了。
而接收方可能还要发送数据,就不能立即关闭服务器端到客户端的数据通道,所以就不能将服务端的FIN包和对客户端的ACK包合并发送,只能先确认ACK,等服务器无需发送数据时在发送FIN包,所以四次挥手时需要四次数据包的交互