tcp01

一、TCP常见Flags说明

(1)SYN: Synchronous 建立联机
(2)ACK: Acknowledgement 确认
(3)FSH: Fush推送
(4)FIN: Finish 接收
(5)RST: Reset 重置
(6)URG: Urgent 紧急

二、三次握手

(1)客户端向服务端发送SYN包,SYN seq=x,此时客户端处于SYN_SENT状态。
(2)服务端接收到SYN包之后,服务端处于SYN_RCVD状态,并向客户端发送ACK+SYN包。
(3)客户端接收到服务端的ACK+SYN包之后处于ESTABLISHED状态,并向服务端发送ACK包,服务端接收到ACK包之后也处于ESTABLISHED状态。

至此,三次握手完成!

三、四次挥手

(1)客户端向服务端发送FIN包,此时客户端处于FIN_WAIT_1状态。
(2)服务端接收到FIN包之后处于CLOSE_WAIT状态,并向客户端发送ACK包。
(3)客户端接收到ACK包之后处于FIN_WAIT_2状态,并等待服务端的FIN包请求。
(4)服务端在处理完自身事情之后向客户端发送FIN包,此时服务端处于LAST_ACK状态。
(5)客户端接收到FIN包之后处于TIME_WAIT,并向服务端响应ACK包。

至此,四次挥手完成!

四、什么握手需要三次,而挥手需要四次?

因为TCP是全双工模式,也就是客户端可以向服务端发送数据,服务端也可以向客户端发送数据,因此当客户端发送完数据向断开连接时向服务端发送FIN请求,此时服务端可能还在向客户端发送数据呢,因此服务端只能先响应ACK包给客户端,表示知道了,但服务端不能立马断开连接,因为服务端数据可能还没发完,等服务端处理好自身事情之后才向客户端发送FIN包,表示可以断开了。
因此四次挥手服务端将ACK和FIN分开,其实从交互来看,握手也是需要四次的,只是服务端把ACK和SYN合并了,节省了一次请求(Piggybacking)。

打赏
支付宝 微信
上一篇 下一篇