三次握手、四次挥手
三次握手目的是为了能够确认对方能够收到自己发出的包,从而建立稳定的连接。
交换双方的控制信息(用来控制数据收发操作所需要的信息:IP 端口号等等)
三次握手:
- 客户端先发一个 SYN 比特为 1 的包,想要和服务端建立连接。假如序号为 x,表示这是第 x 个链接。
- 服务端接收到客户端的包后,如果同意连接,则返回带有 SYN(x) 的包后,表示同意建立链接,并返回 ACK(控制位设置为1) 和 SYN(y)。
ACK表示收到网络包。 SYN(y)表示服务端同意客户端的连接。
- 客户端收到服务端的网络包后,再返回 ACK(控制位设置为1) 表示收到服务端的网络包。
第一步,服务器收到客户端的连接请求。第二步,服务器告知客户端,同意连接,并且刚才的数据包已收到。第三步,客户端告知服务器刚才的数据包已收到。
四次挥手:
- 客户端首先向服务器端发送要断开的请求: FIN(seq = x)
- 服务器同意,并向客户端发送: ACK(seq=x+1)
- 服务器再次向客户端发送: FIN(seq=y)
- 客户端向服务端发送: ACK(seq=y+1)
为什么 四次挥手中的2、3步骤不合并?
因为 2 之后服务端此时没有数据需要发送了,但是还可以接收客户端的数据,此时客户端可能还有数据需要向服务端发送。