连接终止一个连接要经过4次握手。这由T C P的半关闭(h a l f -c l o s e)造成的。因为一个T C P连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个F I N来终止这个方向连接。当一端收到一个F I N,它必须通知应用层另一端几经终止了那个方向的数据传送。
   如果不通过代理,连接的双方如果不主动释放,是不会断掉的;但是通过代理就不同了,现在的代理都有这种机制,如果发现某链路长期没有使用,会自动将链路断开,这样是为了节省资源。不用一个小时,好像是10分钟左右吧。

解决方案 »

  1.   

    建议你看看RFC文档。
    1.某个应用进程首先调用close,我们称为主动关闭(active close)。这一端的Tcp于是发送一个FIN分节,表示数据发送完毕。
    2.接受到FIN的另一端执行passive close 。这个FIN由TCP确认。他的接受也作为文件结束符传送给接受方应用进程,因为FIN意味着应用进程在此连接上再也接受不到额外数据。
    3.一段时间后,接受到文件结束符的应用进程将调用close,关闭他的套接口。这导致他的TCP也发送一个FIN。
    4.接收到这个FIN的原发送方TCP对他进行确认。    因为每个方向都需要有一个FIN和ACK,所以一般需要四个分节。有时候,步骤1的FIN随数据一起发送。执行被动关闭的方在步骤2,3时的FIN和ACK也可以合并为一个分节。 当进程终止时,所有打开的描述字都将关闭,此时仍然打开的TCP连接上也会发出一个FIN。通常是由客户执行主动关闭,但HTTP是服务器执行主动关闭