TCP核心机制之连接管理详解(三次握手,四次挥手)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
前言
TCP是如何建立对端连接如何断开连接这篇文章会详细介绍。
建立连接
首先明确连接的概念Socket明确对方Socket对象互相明确建立认同关系建立连接。断开连接就是删除内核中对于对端数据存储的空间。
TCP建立连接的过程称为 “三次握手”断开连接的过程称为 “四次挥手”。每一次通信称为一次握手或者挥手。
注意建立连接发起的报文称为同步报文段TCP报头中标志位用SYN表示。
注意
所谓三次握手本质上是四次通信双方互相发送建立连接的请求SYN互相都回应一个ACK。
这里将中间两次通信的过程合并为了一次。是因为当接收方接收到SYN需要返回应答报文ACK和连接请求SYN。由于这两步都是在内核中完成的发送的时机一致因此就将它们合并为一个报文发送了。也就是三次握手。
三次握手另外一个重要作用
验证通信双方各自的发送能力和接收能力是否正常。因为三次握手已经实现了通信双方的请求和响应。
注意
三次握手也一定程度上保证了TCP的可靠性但只是辅助作用核心是确认应答超时重传。
三次握手的意义
1让通信双方各自建立对对方的“认同”。
2验证通信双方各自的发送能力和接收能力是否正常。
3在握手的过程中双方协商一些重要参数。
建立连接主要两个TCP状态
1LISTEN服务器状态
表示服务器已经准备就绪随时可以进行连接。
2ESTABLISHED客户端服务器都有
连接建立完成接下来可以通信了。
断开连接
通过四次挥手断开连接。
注意FIN为结束标志意味着这个报文为断开报文。TCP报头标志位也有体现。
注意
很清楚看到四次挥手的中间两次通信没有合并。由于发送断开连接其实就是Socket的close方法或者进程结束就会触发Socket发送FIN报文段。当客户端发送断开连接的请求服务端返回ACK这个过程是操作系统内核实现的。两者的执行时机不同就不能合并。
断开连接的两个重要状态
1CLOSE_WAIT出现在被动断开的一方
等待关闭等待Socket执行close方法
2TIME_WAIT主动发送断开连接的一方
如果一切顺利客户端进入TIME_WAIT状态。四次挥手已经挥完了。
存在一个问题
最后一次挥手ack如果丢包了超时重传就会重新发送。如果已经断开了就会无法接收FIN返回ACK。因此设置一个断开等待时间2MSL就算丢包了也会顺利的进行超时重传。
MSL为互联网上最长两个节点数据传输消耗的最大时间。通常为60s。这里设置2MSL的等待时间就是由于发送一个ACK且接收一个FIN最大时间也就2MSL。因此重传的时间一定小于2MSL。
小结
三次握手和四次挥手形象的体现了TCP连接和断开的过程让我们仔细的去思考和理解。