TCP连接与释放解析

来源:互联网 发布:淘宝店卖家要什么软件 编辑:程序博客网 时间:2024/06/07 14:56

我们知道TCP是面向连接的可靠的传输层协议,TCP协议中用了很多的方法来保证他的可靠性,比如相应应答机制、丢失重传机制、滑动窗口等,这里简单讲解一下,连接与释放和TIME_WAIT状态。

连接时的三次握手

先看一个简单的示意图:
这里写图片描述
建立连接的过程:

  1. Client向Server发送一个SYN位为1的请求建立连接报文,并且这个报文的序号为1000,这个序号用作临时地址,因为接收端要对接收到的报文进行确认,ACK的时候序号便会写为1001,表示序号在1001以前的报文都接收到,

  2. Server向Client回复一个报文,其中SYN=1,表示想向Client建立连接,ACK确认的序号为1001。

  3. Client给Server发送回复序号为1002的报文,表示收到1001号以前的报文,也就是双方连接建立完成。

    需要第三次握手的原因:

现在考虑这样一种情况,假设没有第三次的回复确认报文,也就是说链接建立只有两次时,如果第二次的回复报文在传送过程中堵塞甚至丢失,那么,在Client端没有接收到第二次的报文,会认为链接没有建立,会给Server再次发送请求连接报文,即重新开始三次握手的过程,而在Server端因为已经发送出第二次的链接报文,Server认为连接建立,就会对Client发送过来的请求连接的报文不予处理,然后Client会一直向Server发送请求建立连接报文,而Server会一直忽略这个报文,显然这是不行的。

释放时的四次挥手

这里写图片描述

释放连接过程:

  1. 客户端发送FIN=1位的请求关闭连接报文,表示关闭连接的请求。
  2. 服务器发出ACK回复报文,应答客户端的关闭连接请求。
  3. 服务器发出一个也包含FIN=1的报文,向客户端发送关闭连接请求。
  4. 客户端发出ACK回复报文,应答服务器的关闭连接请求。

TIME_WAIT状态解析:

发起断开连接请求的一方会进入TIME_WAIT状态。

TIME_WAIT状态存在的时长: 2倍的MSL

MSL:就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。

TIME_WAIT状态存在的原因:

1 . 保证四次挥手能成功的完成,即保证TCP全双工的可靠终止

同三次握手一样,假设最后一次的确认报文发生了拥塞,没有在正常时间内发送到客户端,那么Client就会单方面关闭连接, 而Server端为关闭连接,就会一直为当前的这个连接保存相关的数据和信息,这无疑是一种浪费。

所以无论四次传输的哪一个报文丢失,都应该有处理这种情况的方法,保持TIME_WAIT状态就是处理方法。

2 . 处理因拥塞而迟到的失效的断开连接报文

像上面所说的,某报文可能会因为拥塞而超时,然后Client会再发一个,这样,网络中就有两个作用相同的报文,其到达的先后顺序是不一样的,有可能已经响应了先到的那个报文,而后到达的报文可能会作用到新建立的连接上,这就影响了别的连接,而TIME_WAIT状态就保证了这种报文会消逝在网络中(TTL=0时被某个路由器直接丢弃),就避免了这种情况。

原创粉丝点击