网络连接管理除了TCP三次握手,还有TCP四次挥手
TCP三次握手,TCP四次挥手
- 网络连接管理除了TCP三次握手,还有TCP四次挥手
- TCP三次握手
- TCP四次挥手
- 总结
TCP三次握手
网络通信建立连接,TCP会进行三次握手,三次握手主要是两个主机之间建立连接,和其他没有什么关系,那么两个主机之间是如何进行三次握手的呢?他们又会使用什么操作来建立连接呢?
这里我们先了解一下TCP的报文结构:
三次握手主要是理解成客户端与服务器经过三次交互,双方确立完成,建立连接进行网络通信。TCP的报文结构中 tcp flags 中SYN报文起关键作用,客户端在确立连接时会将SYN报文发送至服务器,当服务器识别到SYN报文时,将ACK报文和SYN报文一并发送至客户端,当客户端收到SYN报文,也会返回ACK报文至服务器,以上,就完成了三次交互。
该图就是说明了三次握手基本原理,细节分析:当客户端发送SYN报文时,服务器接收到,就说明客户端的发送数据操作没有问题,然后服务器将ACK+SYN报文进行发送时,此时客户端接收到,客户端就会知道自己的发送性能和接收性能正常,服务器的接收性能和发送性能没有问题,然后再将ACK报文返回给服务器,服务器这才知道自己的发送性能没有问题也知道客户端的接收性能没有问题。
那么三次握手能不能改成2次握手?或者四次握手?
答:不可以,2次握手会有安全隐患,因为第三次是确保服务器把客户端的情况了解,再把自身的情况摸清,如果去除了第三次握手,不能确保连接成功。四次握手按常理是可行的方案,不过在连接管理时应该尽量把步骤进行简化,而不是逆行。
TCP四次挥手
TCP四次挥手是TCP断开连接会进行的操作。根据TCP报文图,可以发现,在SYN后面有一个报文叫FIN,相当于finish(结束),对的该报文就是在客户端对服务器或者服务器对客户端发送的结束报文。(双方可以互相发送)
这里我只列举出一种:(客户端给服务器发送FIN报文)
看到这里,可能有小伙伴会问,为什么不将ACK报文与FIN报文同时发送,连接管理时不是将SYN和ACK一起发送了吗?
对!不过这里因为是断开连接,发送FIN报文需要满足一定的条件,发送FIN报文是需要进程断开连接,而一般断开连接时时机不同,当客户端与服务器断开时,服务器还并没有结束该进程,所以才会造成时机的不同,一般对方主机需要执行关闭(close)方法才会向对方发送FIN报文,所以这里一般是会进行四次挥手。一般情况是这样,不过还有特殊情况,在特殊情况下,ACK和FIN报文有一定概率可以合并,不过是极小概率事件。
ACK和FIN报文有一定概率可以合并,不过是极小概率事件。
总结
综上所述,TCP连接管理中建立连接和断开连接是不同的,报文格式也是不同的。TCP三次握手中ACK和SYN几乎是同一时间发出,是一种内核态的过程。而FIN和ACK是在不同时机触发的,而ACK是内核态,速度快,而FIN是一种应用程序代码,是由人为控制,所以两个数据报很难合并。