![](https://img.haomeiwen.com/i843495/3e20aff17093c012.png)
![](https://img.haomeiwen.com/i843495/4a4df8778631875b.png)
- SYN: 代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接
- FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向
- ACK:代表确认接受,从上面可以发现,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后的发送数据时,都需加上ACK=1,来表示数据接收成功
- seq:序列号,什么意思呢?当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接
创建连接
- 客户端要先发送消息,创建连接
- 服务端收到后要表示我收到,回复给客户端
- 连接创建完成,但是防止意外,客户端要再次发送消息给服务端
⚠️为什么要三次
如果发送两次就可以建立连接话,那么只要客户端发送一个连接请求,服务端接收到并发送了确认,就会建立一个连接。
可能出现的问题:如果一个连接请求在网络中跑的慢,超时了,这时客户端会从发请求,但是这个跑的慢的请求最后还是跑到了,然后服务端就接收了两个连接请求,然后全部回应就会创建两个连接,浪费资源!
如果加了第三次客户端确认,客户端在接受到一个服务端连接确认请求后,后面再接收到的连接确认请求就可以抛弃不管了。
四次分手
- 客户端请求关闭客户端和服务端方向的连接
- 服务端收到这个请求确认一下然后关闭
- 服务端也向客户端发送一个请求关闭服务端和客户端方向的连接
- 客户端收到确认然后关闭
网友评论