首页 > 编程知识 正文

tcp的四次挥手,tcp三次握手解决了什么问题

时间:2023-05-05 04:51:10 阅读:33459 作者:1002

建立TCP需要三次握手,切断需要四次握手。 整个过程如下图所示。

首先,让我们看看如何建立连接。

【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!

错误配图如下:

首先,客户端发送连接请求消息,服务器段接受连接并回复ACK消息,并将资源分配给此次连接。 客户端在接收到ACK消息后,还向服务器段发送ACK消息并分配资源,由此建立TCP连接。

怎么切断? 简单的过程如下

【注意】中断连接端可以是Client端,也可以是Server端。

假设客户端开始了断开连接请求。 也就是说,发送FIN消息。 服务器端收到FIN消息后,表示“我的客户端没有要发送给你的数据”,但如果有数据尚未发送完成,则不需要紧急关闭套接字,可以继续发送数据。 所以请先发确认,告诉'客户端'。 我收到了你的请求,但是还没有准备好。 请继续我的信息'。 此时,客户端变为FIN_WAIT状态,继续等待服务器端的FIN消息。 在服务器端确认数据发送完成后,向客户端发送FIN消息。 “告诉客户端,是的,我们的数据发送完成了。 已准备好关闭连接”。 客户端收到FIN消息后,'知道可以关闭连接,但他还不相信网络,怕服务器端不知道关闭,所以发送ACK后进入TIME_WAIT状态,进入sswait “,服务器端收到ACK后,发现'可以断开连接'。 如果客户端等待2MSL后仍未收到回复,则证明服务器端已成功关闭。 那客户端也可以关闭连接。 Ok,TCP连接就这样关闭了!

整个进程客户端经历的状态如下。

服务器端经历的流程如下。 请注明:blog.csdn.net/whuslei

如果在33558www.Sina.com/time_wait状态下,TCP客户端上上次发送的ACK丢失,它将被重新发送。 TIME_WAIT状态所需的时间取决于实现方法。 典型值为30秒、1分钟和2分钟。 然后,等待连接正式关闭并释放所有资源,包括端口号。

【注意】

a )因为服务器端收到客户端的SYN连接请求消息后,可以直接发送SYN ACK消息。 其中ACK消息用于响应,SYN消息用于同步。 但是,在关闭连接时,服务器端收到FIN消息时,很可能不会立即关闭套接字,因此首先向客户端回复ACK消息,告知“您发送的FIN消息已经收到” 在我服务器端的所有消息都发送之前,我不能发送FIN消息,所以不能一起发送。 所以需要握手四步。

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

a )怪不得发送了四条消息,我们可以直接进入关闭状态,但我们必须幻想网络不可靠。 最后一次确认可能会丢失。 因此,TIME_WAIT状态用于重发可能丢失的ACK消息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。