TCP三次握手和四次挥手

TCP三次握手和四次挥手

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

客户端向服务端发送请求链接,请求链接包含请求链接标志SYN=1和序号=X(序号是为了保证发送数据的有序性),服务端收到客户端的请求后会回复,回复中包含回复标志ACK=1和确认序号=X+1还包含请求链接标志SYN=1和序号=Y,当客户端收到服务器端发送的回复和请求代表可和服务器通信,客户端给服务器发送回复包含回复标志ACK=1和确认序号=Y+1,当服务器收到回复标志也可开始通信。
为什么在第3步中客户端还要再进行一次确认呢?

这主要是为了防止已经失效的连接请求报文段突然又传回到服务端而产生错误的场景:所谓"已失效的连接请求报文段"是这样产生的。正常来说,客户端发出连接请求,但因为连接请求报文丢失而未收到确认。于是客户端再次发出一次连接请求,后来收到了确认,建立了连接。数据传输完毕后,释放了连接,客户端一共发送了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,没有"已失效的连接请求报文段"。

现在假定一种异常情况,即客户端发出的第一个连接请求报文段并没有丢失,只是在某些网络节点长时间滞留了,以至于延误到连接释放以后的某个时间点才到达服务端。本来这个连接请求已经失效了,但是服务端收到此失效的连接请求报文段后,就误认为这是客户端又发出了一次新的连接请求。于是服务端又向客户端发出请求报文段,同意建立连接。假定不采用三次握手,那么只要服务端发出确认,连接就建立了。

由于现在客户端并没有发出连接建立的请求,因此不会理会服务端的确认,也不会向服务端发送数据,但是服务端却以为新的传输连接已经建立了,并一直等待客户端发来数据,这样服务端的许多资源就这样白白浪费了。

采用三次握手的办法可以防止上述现象的发生。比如在上述的场景下,客户端不向服务端的发出确认请求,服务端由于收不到确认,就知道客户端并没有要求建立连接。

TCP四次挥手
在这里插入图片描述

  1. 理解:

TCP是双向通讯协议,客户端发送FIN到服务端,告诉服务端,客户端不会再发送数据了,但是服务端还有消息未发送完毕,为防止客户端消息等待,服务端会首先发送ACK确认字符到客户端,并关闭消息接收服务。但是服务端会将剩余消息发送完毕,然后发送FIN到客户端,告诉客户端不会再发送消息,然后客户端会回复ACK表示收到,并关闭服务,当服务端收到ACK后,验证正常则会关闭所有的服务,TCP连接中断完毕。

  1. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到客户端发送的断开连接的FIN报文后,可能会有数据未发送完成,需要继续发送,因此不能将确认消息和请求关闭消息同时发送,而是会先关闭接收服务回复确认消息,然后继续发送未完消息到客户端,直到发送结束,再发送请求关闭消息.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值