常见问题

TCP 连接管理

时间:2019-12-01 08:59 作者:admin 分享到:
         TCP 是面向连接 的协议,连接的建立 和释放是每一次面向连接的通信中必不可少的过程。TCP 的连接的建立和释放均采用客户服务器方式 ,下面首先介绍 一下 TCP 连接的建立过程。
如图一 所示,设 主机 B 中运行一个服务进程,它首先发出一个被动打开命令,告诉 它的TCP 准备接收客户进程的 连接请求。然后服务器进程就处千"监听 ( Listen)  " 的状态,不断检测是否有客户进程发起连接请求。主机 A  中的客户进程首先向其TCP发出主动打开( Active Open ) 命令 ,然后主机 A 的 TCP 向主机 B 的TCP 发出连接请求报文段。如前所述,该报文段首部中的同步比特 SYN 应置为 1 , 同时选择一个序号x , 表明在后面传送数据时的第一个数据字节的序号是 x+ l 。主机 B 的 TCP 收到连接请求报文段后,如同意,则发回确认。在确认 报文段中 SYN 和 ACK 均置为 1' 而确认号为x+ 1( 表明 x 已正确接收 ,其期望接收的下一个报文段的编号为x+ l ) , 同时也为自己选择一个序号 y。
        主机A 的TCP 收到B 的确认后,要向 B 给出确认,其 ACK 置 1 , 确认号为y+ l , 而自己的序号为 x+ l 。此时运行客户进程的上机 A 的 TCP 通知上层应用进程 ,连接已经建立。需要注意的是 ,当主机 A 向 B 发送第一个数据报文段时,其序号仍为 x+I , 因为前一个确认报文段并不消耗序号。当运行 服务器进程的主机 B 的TCP 收到主机A 的确认后,也通知其上层应用进程,连接已经建立。以上连接过程中客户基于服务器之间有 3 次数据交互过程,因此也被形象的称为 3 次握手( Three— way Handshake ) 。
图 一    TCP 连接建立过程
        有些读者可能会问,服务器已经通过第2 个报文段确认了客户机 A 的连接请求,为什么客户机 A 还要发送第 3 个报文段对这个“确认“再进行“确认” 呢?现假定出现一种极端情况 ,主机 A 发出的连接请求 报文由于某些原因(例如在某个网络节点滞留的时间过长)一直不能到达 B, 于是A  在计时器超时后再次发出连接请求。假定第二次请求顺利到达服务器B  ,   双方建立了连接,并在数据传输完毕后释放了连接。此时被延误的第一个请求到达了服务器,这本来巳经是   一个失效的报文段,但服务器 B 会误认为是主机 A 又发出一次新的连接请求 。千是就向主机 A 发出确认报文段,同意建立连接。由于主机A      并没有要求建立连接,因此不会理睬主机B 的确认,也不会向主机B 发送数据。但主机 B  却以为运输连接就这样建立了,并一直等待主机A 发来数据。主机 B 的许多资源就这样白白 浪费了。采用 3 次握手的办法可以有效防止这种现象的发生。由于主机 A 不会向主机 B  的“确认“发出“确认。"主机B 收不到确认,连接就建立不起来。
        下面讨论连接释放的过程 。在数据传输结束后,通信的 双方都可以发出 释放连接的请求。如图 3. 23 所示,设 客户机 A 的应用进程先向其 TCP 发出连接释放请求,并且不再发送数据。A 的 TCP 随即向 B 发出连接释放请求 报文,通知对方要释放从 A 到 B 这个方向的连接。该报文段首部的终止比特位 FIN 置 1 , 序号 x 等于前面已传送过的数据的最后一个字节的序号加1。主机 B 的 TCP 收到释放连接通知后即发出确认 ,其序号为 y, 确认号为 x+ l , 同时通知高层应用进程。这样, 从 A 到 B 的连接就释放了,连接处于半关闭 ( Half Close ) 状态,相当于主机 A 向主机B 说:" 我已经没有数据要发送了 ,但你如果还发送数据,我仍接收。”
图 二    TCP 连接释放过程
       此后,主机 B 不再接收主机A 发来的数据。但若主机 B 还有一些数据要发往主机 A, 则可 以继续发送(这种情况很少)。主机 A 只 要正确收到数据,仍应向 B 发送确认。若主机 B 不再有向主机A 发送数据的需要,其应用进程就通知TCP 释放连接。同样,主机B 发出的连接释放报文段中的终止比特位FIN 需要设置为 1 , 并使其序号仍为y( 因为前面发送的确认 报文段不消耗序号),还必须重复上次已发送过的 ACK= x+ l 。主机 A 必须对此发出确认 ,将 ACK 位置 l , 确认号 ACK = y+1 , 而自己的序号则是 x+ l 。这是因为根据 TCP 标准,前 面发送过的 FIN 报文段要消耗一个序号。这样才把从B 到 A 的反方向连接也释放掉。最终主机 A 的 TCP 向其应用进程报告:" 整个连接已经全部释放完毕"。
版权所有:融合通信:http://www.alloll.com 转载请注明出处

融合通信行业案例SUCCESS CASE