当前位置: 代码网 > 服务器>网络>网络协议 > TCP的三次握手和四次挥手

TCP的三次握手和四次挥手

2024年07月26日 网络协议 我要评论
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

三次握手

tcp连接是通过三次握手来连接的。

第一次握手

当客户端向服务器发起连接请求时,客户端会发送同步序列标号syn到服务器,在这里我们设syn为m,等待服务器确认,这时客户端的状态为syn_sent。

第二次握手

当服务器收到客户端发送的syn后,服务器要做的是确认客户端发送过来的syn,在这里服务器发送确认包ack,这里的ack为m+1,意思是说“我收到了你发送的syn了”,同时,服务器也会向客户端发送一个syn包,这里我们设syn为n。这时服务器的状态为syn_recv。

一句话,服务器端发送syn和ack两个包。

第三次握手

客户端收到服务器发送的syn和ack包后,需向服务器发送确认包ack,“我也收到你发送的syn了,我这就给你发个确认过去,然后我们即能合体了”,这里的ack为n+1,发送完毕后,客户端和服务器的状态为establish,即tcp连接成功。

在三次握手中,客户端和服务器端都发送两个包syn和ack,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

三次握手示意图如下(纯手绘,见谅见谅):

 

四次挥手

当a端和b端要断开连接时,需要四次握手,这里称为四次挥手。

断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称a端向b端请求断开连接。

第一次挥手

a端向b端请求断开连接时会向b端发送一个带有fin标记的报文段,这里的fin是finish的意思。

第二次挥手

b端收到a发送的fin后,b段现在可能现在还有数据没有传完,所以b端并不会马上向a端发送fin,而是先发送一个确认序号ack,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下呗”。

第三次挥手

当b端的事情忙完了,那么此时b端就可以断开连接了,此时b端向a端发送fin序号,意思是这次可以断开连接了。

第四次挥手

a端收到b端发送的fin后,会向b端发送确认ack,然后经过两个msl时长后断开连接。

msl是maximum segment lifetime,最大报文段生存时间,2个msl是报文段发送和接收的最长时间。

四次挥手示意图如下(纯手绘,见谅见谅):

 

两次握手可以么?

tcp连接时是三次握手,那么两次握手可行吗?

在《计算机网络》中是这样解释的:已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送ack包。这样就会白白浪费资源。

而经过三次握手,客户端和服务器都有应有答,这样可以确保tcp正确连接。

为什么tcp连接是三次,挥手确是四次?

在tcp连接中,服务器端的syn和ack向客户端发送是一次性发送的,而在断开连接的过程中,b端向a端发送的ack和fin是是分两次发送的。因为在b端接收到a端的fin后,b端可能还有数据要传输,所以先发送ack,等b端处理完自己的事情后就可以发送fin断开连接了。

为什么在第四次挥手后会有2个msl的延时?

前文说到

msl是maximum segment lifetime,最大报文段生存时间,2个msl是报文段发送和接收的最长时间。

假定网络不可靠,那么第四次发送的ack可能丢失,即b端无法收到这个ack,如果b端收不到这个确认ack,b端会定时向a端重复发送fin,直到b端收到a的确认ack。所以这个2msl就是用来处理这个可能丢失的ack的。

经典的三次握手、四次挥手原理,按自己的理解梳理下

以下梳理灵感来源于有次大学同学微信找我,问:在吗?

一、生活化理解三次握手、四次挥手

三次握手
第一次–>同学:在吗?(我想建立连接)
第二次–>我:在的(我大概知道你要干啥了)
第三次–>同学:需要借点钱(建立连接,我要请求点东西了~~~~~)
建立连接成功

四次挥手
第一次–>同学:聊完了,不借钱准备挂视频了,你还有啥要说吗?(准备断开连接)
第二次–>我:不是不想借,是真的没有钱,我还能再解释几句(我也是没办法,兄die)
第三次–>我:说不出来啥了,那我挂了(再见吧~再见吧 再见吧)
第四次–>同学:那我也挂(没啥别的需要请求的了,断开吧,不处了)
断开连接成功

二、正经理解三次握手、四次挥手

只贴两个图吧,一切尽在图里

三次握手
在这里插入图片描述

四次挥手

在这里插入图片描述

到此这篇关于tcp的三次握手和四次挥手的文章就介绍到这了,更多相关三次握手和四次挥手内容请搜索七九推以前的文章或继续浏览下面的相关文章,希望大家以后多多支持七九推!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com