TCP协议之三次握手四次挥手及TIMEWAIT状态

本文深入解析TCP协议的连接与关闭过程,包括三次握手建立连接及四次挥手关闭连接的细节。阐述了TCP作为面向连接的可靠传输协议,在数据传输中如何确保数据的完整性和顺序性,以及TIME_WAIT状态的作用。

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

1. 简单介绍TCP协议通信连接

        传输层协议主要分为TCP和UDP两个协议。UDP是无连接、不可靠的数据报服务。而TCP是面向连接的、可靠的字节流服务。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的传输。并且通信的双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,交互性的工作只需要一次连接即可满足。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

 

2. TCP的面向连接

  • 两端通讯之前,必须先建立连接
  • 连接一旦建立,两端交互过程都在这一连接上完成,无需重新建立连接,知道连接关闭
  • 通讯完成后需要断开连接,以释放服务器资源
  • 操作系统为我们维护连接,因此内核需要为连接分配相应的资源
  • 对于服务器而言,一个连接只能为一个客户端服务,从而造成服务器性能有待优化

 

3. 连接过程(三次握手)

         TCP报文段1包含SYN(请求建立连接的标志)标志,即ernest-laptop客户端向服务器发送连接请求。并且该同步报文段包含一个ISN值为535734930的序号。报文段2也相当于一个连接报文段,表示服务器同意与客户端建立连接。同时它发送自己的ISN值为2159701207的序号,并对报文段1的请求进行确认ack。确认值为ack535734931,即第一个同步报文段的序号值加1。                                                                     序号值是用来标识TCP数据流中的每一字节的。TCP报文段3即是客户端对第二个报文段的确认。此时,TCP连接就基本建立完成了。这三个步骤被称为TCP三次握手。

如果是两次握手:

  • 如果没有最后一个ACK确认,则服务器会不断超时重传ACK/SYN
  • 会浪费服务器资源

 

4. 关闭过程(四次挥手)

        观察上图,报文段4包含了FIN标志,FIN是关闭连接的标志,因此报文段4是一个结束报文段,即客户端请求关闭连接。结束报文段和同步报文段一样也要占用一个序号值(确认机制)。然后服务器先向客户端发送了报文段5来确认该结束报文段。紧接着服务器发送自己的结束报文段6,客户端再用TCP报文段7给予确认。实际上,仅用于确认的报文段5是可以省略的,因为报文段6也包含了该确认信息。

        报文段5是否需要应取决于TCP的延迟确认特性。

        一般,TCP连接是由客户端发起,然后通过三次握手建立的。TCP连接的关闭过程则相对复杂一些。可能是客户端执行主动关闭;也可能是服务器执行主动关闭,比如服务器挂掉的情况;还有可能的情况就是同时关闭。

 

5. TIME_WAIT状态

        第1个FIN是主动关闭方发送给被动关闭方的结束报文段。第二个是被动关闭方发送给主动关闭方的结束报文段,当主动关闭方收到这个结束报文段后发送ACK确认,此时进入TIME_WAIT状态并一般维持2MSL(报文段最大生存时间)的时间再进入CLOSED状态。

TIME_WAIT的意义:

  • 保证迟来的数据能被识别并丢弃
  • 保证可靠的终止TCP连接

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值