tcp三次握手与四次挥手
三次握手
三次握手
是指tcp建立连接时候需要服务端和客户端发送三个网络包。
三次握手的目的是链接与服务器端口,并建立tcp连接,并同步连接双方的序列号和确认号,并交换tcp窗口大小信息。
在tcp/ip协议中, tcp提供可靠的链接服务,采用三次握手建立一个链接,如上图所示。
- 第一次握手:建立连接时,客户端发送SYN包到服务器,同时进入SYN_SEND状态,等待服务器B确认。
- 第二次握手:服务器B收到SYN包,确认客户端的SYN(ACK+1),同时自己发送一个SYN包,此时服务器进入SYN_RECV状态。
- 第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包(ACK+1),此包发送完毕,客户端和服务端进入RESTABLISHED状态,完成三次握手。
四次挥手
tcp断开连接需要发送四个包,所以称之为四次挥手
,客户端和服务端都可以发起挥手
。
由于TCP是全双工的,所以需要双向关闭。原则是当一方完成数据发送后就只能发送一个FIN来终止这个方向的链接。收到一个FIN只意味着这个一个方向没有数据发送,一个tcp链接收到一个FIN后仍然能发送数据。首先关闭的以防进行主动关闭,另外以防执行被动关闭。
- 主动方发送一个FIN,用来告诉被动方我发送完毕,请求关闭链接。
- 被动方收到主动方的FIN请求,会回发一个ACK(我知道了),但是并没有统一关闭链接。
- 当被动方也发送完数据了,会发送一个FIN包,高速主动方我也发送完了。
- 主动方收到被动方的FIN包,回复ACK(确认收到),此时tcp断开连接。