前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP协议为什么是3次握手,4次挥手

TCP协议为什么是3次握手,4次挥手

原创
作者头像
NeilNiu
发布2023-03-01 23:18:21
2160
发布2023-03-01 23:18:21
举报
文章被收录于专栏:NeilNiu专栏

TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。

TCP/IP五层模型

应用层

传输层

网络层

数据链路层

物理层

TCP是在传输层的协议,主要实现主机到主机通信,前提是需要知道主机们的网络地址(IP地址),但是TCP不负责实际地址到地址的传输,因此TCP协议把IP地址给底层的网络层处理。

网络层,提供地址到地址的通信,IP协议就是在这一层工作。互联网层解决地址到地址的通信,但是不负责信号在具体两个设备间传递,因此,网络层会调用下方的链路层,在两个相邻设备间传递信息。当信号在两个设备间传递的时候,物理层封装最底层的物理设备,传输介质,由最下方的物理层提供最底层的传输能力。

会话是应用层的概念,连接是传输层的概念。

TCP是一个双工协议,数据任何时候都可以双向传输。这就意味客户端和服务端可以平等地发送接收信息。

TCP是一个连接向导的协议,设计有建立连接(握手)和断开连接(挥手)的过程。TCP没有设计会话(Session),因为会话是应用层的行为。

TCP协议基本操作如下:

1、一个Host主动向另一个Host发起连接,成为SYN(Synchroniation),请求同步;

2、一个Host主动断开请求,称为FIN(Finsh),请求完成

3、一个Host给另一个Host发送数据,称为PSH(Push),数据推送

以上3种情况,接收方接到数据后,需要给发送方一个响应ACK(Acknowledgement)。如果一个请求没有响应,发送方会重新发送这个请求。

建立连接的过程(三次握手)

因为要保证连接和可靠性约束,TCP协议要保证每一条发出的数据必须给返回,返回的数据叫ACK(也就是响应)

1、客户端发消息给服务端(SYN)

2、服务端准备好进行连接。

3、服务端针对客户端的SYN给一个ACK

如果到这结束了,服务端还没有确定客户端是否准备好,这个时候如果服务端马上会再给客户端发送数据,客户端可能还没准备好接受数据。所以还要增加一个过程。

4、服务端发送一个SYN给客户端

5、客户端准备就绪

6、客户端给服务端发送一个ACK。

步骤1是一次握手

步骤3和步骤4,是同时发生的,合并为一个SYN-ACK响应,作为一条数据传递给客户端,所以属于第二次握手。

步骤6是第三次握手。

在这里插入图片描述
在这里插入图片描述

TCP协议为什么是3次握手,4次挥手

断开连接的过程(4次挥手)

可以类比建立连接的过程

1、客户端要求断开连接,会发送一个断开的请求,FIN。

2、服务端收到这个请求后,会给客户端回一个ACK,作为FIN的响应。

3、然后这块就是与建立连接的时候有区别了。

断快连接这,服务端不会马上又发一个FIN,给客户端。因为断开连接的处理问题比较多,比如说服务端可能还有发送出去的消息没有得到ACK;也有可能服务端自己有资源需要释放。因此断开连接不能像建立连接那样,将两条信息合并。所以服务端需要等待一段时间,确定可以关闭连接了,再发一条FIN给客户端。

4、客户端收到服务端的FIN后,会给服务端一个响应ACK。

所以这个断开连接过程就是4次挥手。

在这里插入图片描述
在这里插入图片描述

TCP协议为什么是3次握手,4次挥手

总结,来说为什建立连接的时候是3次握手,断开连接的时候是4次挥手,说白了就是在握手的时候双方没有过多的事情,所以在服务端接收到客户端的请求后,立马又发送了一个建立连接的请求,也就是SYN和ACK合到了一起,发送给的客户端。而断开连接的时候,由于客服务端在给客户端回复确认的ACK后,还需要等待一会,等待客户端的所有响应都收到了。然后再发送一条断开的请求FIN,然后客户端在回信给服务端ACK,这样就出现了四次挥手。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档