已经建立了TCP连接,并可能互通信息。但是如果长时间不进行信息的传递。这个TCP连接会自动断开吗?
如果能自动断开的话,这个时间大约是多少呢?

解决方案 »

  1.   

    TCP的保活定时器能够保证TCP连接一直保持,但是TCP的保活定时器不是每个TCP/IP协议栈就实现了,因为RFC并不要求TCP保活定时器一定要实现。摘自《TCP/IP详解》卷1第23章:保活并不是T C P规范中的一部分。Host Requirements RFC提供了3个不使用保活定
    时器的理由: (1) 在出现短暂差错的情况下,这可能会使一个非常好的连接释放掉;
    (2)它们耗费不必要的带宽;(3)在按分组计费的情况下会在互联网上花掉更多的钱。
    然而,许多实现提供了保活定时器。
    更具体的资料,请参阅RFC。
      

  2.   

    补充一点,TCP保活定时器的功能是每隔一个时间t (可能t=2小时,依赖具体的实现。)发送保活分组。
      

  3.   

    但是如果长时间不进行信息的传递。这个TCP连接会自动断开吗?
    下个结论吧, 不一定
      

  4.   

    它自己是不会断开
    但是很多防火墙都会把长时间不进行通信的TCP关掉
    所以最好有心跳机制类维护
    或者设置keepalive属性,可以把时间弄短点
    记得好多防火墙一般40秒关链接
      

  5.   

    感觉TCP连接名义上是提供了一个可靠的连接,但在实际中往往是不可靠的。还不如使用UDP来的方便,然后自己来控制重发、超时什么的。
      

  6.   

    只能说明你使用的问题,估计你的问题就是粘包没有处理好,难道你比写tcp协议栈的人还牛?
      

  7.   


    不要想当然!
    TCP是提供了有连接的可靠的字节流服务。
    UDP才是无连接的不可靠的数据报服务。
      

  8.   

    你可以使用抓包工具,去看看的,
    有助于你理解TCP。
      

  9.   

    看什么应用场景了,tcp可靠也只是相对的。另外keeplive一般不建议使用,有bug。
      

  10.   

    有什么bug,可不可以说具体一些?
      

  11.   

    有些网络设备会切断长时间无数据传输的连接,SOCKET有个KEEPALIVE参数就是保活功能可以防止这个
      

  12.   

    keeplive一般不建议使用,有bug。请问有人知道吗 ?