TCP的三次握手建立连接和四次挥手释放连接

TCP连接通过三次握手建立,确保双方都能发送和接收数据,防止旧连接请求报文段干扰新连接。而四次挥手释放连接则确保数据传输完成,避免连接状态混乱,客户端在收到服务端关闭请求后等待2MSL以确认所有报文段已从网络中消失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP的三次握手建立连接和四次挥手释放连接

TCP的三次握手

TCP连接的建立采用客户服务器方式。主动发起连接的建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(server)。
为什么不使用两次
(1)不使用两次的原因:假设客户端发送建立连接的请求由于网络原因滞留在了网络中,没有到达服务端,客户端没有收到确认请求就会进行超时重传这个建立连接的请求,假设服务端收到了第二次建立的连接请求,并返回向客户端发送同意建立连接的报文,至此,连接建立,之后发送数据,数据发送完之后关闭连接。
(2)若此时,滞留在网络中的客户端发送的第一次连接请求有到达了服务端,此时服务端并不知道这是之前的连接请求,会以为客户端又要建立连接,然后服务端发送给客户端同意建立连接的报文,至此又建立一次连接。
(3)如果使用三次握手,客户端在收到第(2)步中的同意建立连接的报文之后,就会丢弃,因为客户端自己知道自己没有要建立连接请求。
为什么不使用四次握手建立连接
(1)第一次握手:服务端:知道了客户端发送的情况,服务端接收的情况
(2)第二次握手:客户端:知道了客户端的发送和接收情况,服务端可以发送和接收
(3)第三次握手:服务端:服务端可以知道自己的发送情况,客户端的接收情况
至此:客户端和服务端都知道了对方的发送和接收能力,所以四次握手就会显得多余或者浪费资源。
在这里插入图片描述

TCP的四次挥手释放

客户端在收到服务端的关闭请求之后,为什么要等待2ML?
(1)为了保证客户端发送的最后一个ACK报文段能够到达服务端。这个ACK报文段有可能丢失,因而使处在LAST_ACK状态的B收不到对已发送的FIN+ACK报文段的确认。
此时服务端会超时重传这个FIN+ACK报文段,而客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段。
接着客户端重传一次确认,重新启动2MSL计时器。
最后,客户端和服务端都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到服务端重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。
这样,服务端就无法按照正常步骤进入CLOSED状态。
(2)防止"已失效的连接请求报文段"出现在本连接中。客户端在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
服务端只要收到了客户端发出的确认,就进入CLOSED状态。
同样,服务端在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。我们注意到,服务端结束TCP连接的时间要比客户端早一些。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值