0 0

朋友们好,请教tcp/ip中tcp重发的次数和超时时间是多少?5

朋友们好,请教tcp/ip中tcp重发的次数和超时时间是多少?(问题一)

TCP/IP中,发送端在发送消息时,如若对方突然拔网线后,tcp的超时重发是9分钟吗?而这一点我们在socket编程中是没法及时获取send失败的,它由tcp协议来控制重发,重发一定次数超时后才通知我们sokcet有异常,整个过程是否这样呢?我查了资料都没讲清楚。

1,server发送端发送消息时, 突然对方拔掉网线。而发送端此时还认为连接是ok,发送消息到缓冲队列,然后由系统层tcp/ip把消息取走并有序的发送数据,等待tcp段的ack确认。
若接收端突然拔网线后,就没有收到ack确认,就启动tcp重发机制和超时??是这样吗??
现在代码里,希望能及时处理这种消息丢失情况,请问朋友们如何处理较好,谢谢。

2,我查了linux c接口,里面有send timeout选项。而java socket类没有。
并且我怀疑c接口的send timeout选项,可能是指把数据从缓存队列拷到系统层的timeout时间??

我现在使用的是mina框架,项目是长连接的IM系统,我测试了拔网线的场景结果消息丢失,mina没有抛异常。以上有错误的认识,请朋友们指明。感激不尽。

问题补充:
greenmartian 写道
地层的协议也不是太清楚,你可以自己做个定时发送的心跳消息,比如每30秒发一次,如果服务器连续35秒收不到此消息,说明连接坏掉了。



谢谢,心跳现在是60秒。但是即使是30秒之内,也有可能出现发送消息后,不知道此连接是坏掉的,从而造成消息丢失。
特别是在2G手机网络中。

问题补充:
11lingxian 写道
TCP/IP的超时与重传使用的是“指数退避”的方式。分别为1、3、6、12、24、48和多个64秒。首次分组传输与复位信号传输之间的时间差约为9分钟。


谢谢大家的帮忙。这和我查到的资料一样,如若超时时间是9分钟后才知道消息丢失,那么需求上是不能允许的,并由此猜测重传次数是15次左右。

另外,楼下的朋友,SO_TIMEOUT选项是指read时的超时时间。它不是指write超时时间,并且mina的writeTimeout我认为是指应用层将数据复制到内核层的时间,并非指到对端机器的时间。
2012年4月09日 15:18

5个答案 按时间排序 按投票排序

0 0

不好意思,说writeTimeout有点答非反问了。
经过我的多方探究发现,普通的socket编程,因为是阻塞方式,所以是可以设置SO_TIMEOUT的值的。
下面是jdk中的socket的注释:

 /**
     *  Enable/disable SO_TIMEOUT with the specified timeout, in
     *  milliseconds.  With this option set to a non-zero timeout,
     *  a read() call on the InputStream associated with this Socket
     *  will block for only this amount of time.  If the timeout expires,
     *  a <B>java.net.SocketTimeoutException</B> is raised, though the
     *  Socket is still valid. The option <B>must</B> be enabled
     *  prior to entering the blocking operation to have effect. The
     *  timeout must be > 0.
     *  A timeout of zero is interpreted as an infinite timeout.
     * @param timeout the specified timeout, in milliseconds.
     * @exception SocketException if there is an error
     * in the underlying protocol, such as a TCP error. 
     * @since   JDK 1.1
     * @see #getSoTimeout()
     */
 public synchronized void setSoTimeout(int timeout) throws SocketException {


而mina采用异步方式,所以就不能使用这个参数了。

所以你只能通过软实现的方式来实现你的需求了。

一个思路是,发送心跳包和接收响应包,通过判断接收包来判定是否超时。

一般大型网络游戏里都是这样实现的

2012年4月10日 15:00
0 0

最后补充一下mina-core-2.0.0-RC1.jar中默认writeTimeout的时间是60s

2012年4月10日 14:02
0 0

org.apache.mina.transport.socket.SocketSessionConfig继承了下面接口的timeout方法
org.apache.mina.core.session.IoSessionConfig.setWriteTimeout(int)

2012年4月10日 13:57
0 0

TCP/IP的超时与重传使用的是“指数退避”的方式。分别为1、3、6、12、24、48和多个64秒。首次分组传输与复位信号传输之间的时间差约为9分钟。

2012年4月10日 13:49
0 0

地层的协议也不是太清楚,你可以自己做个定时发送的心跳消息,比如每30秒发一次,如果服务器连续35秒收不到此消息,说明连接坏掉了。

2012年4月09日 17:30

相关推荐

    tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议

    tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议...

    Windows环境下TCP/IP协议的配置,TCP/IP诊断

    Windows 环境下 TCP/IP 协议的配置和诊断 本资源摘要信息主要涉及到 Windows 环境下的 TCP/IP 协议配置和诊断。该资源包括了 TCP/IP 协议的配置、 Ping 命令工具的使用、Ipconfig 工具的使用等内容。 知识点一:...

    TCP/IP详解论文

    随着计算机网络技术的发展和Internet的普及,TCP/IP协议将继续扮演着互联网中的核心角色。同时,新的网络协议和技术也将不断涌现,丰富了TCP/IP协议的应用领域。 TCP/IP协议是互联网国际互联网络的基础协议,它定义...

    《TCP/IP详解 卷2:实现》PDF:part2

    《TCP/IP详解 卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机...

    C# TCP/IP通信小例子

    本示例"**C# TCP/IP通信小例子**"是一个基础教程,旨在帮助新手理解如何在C#中实现TCP/IP通信。 TCP(传输控制协议)和IP(因特网协议)是Internet上最基础的通信协议,TCP负责确保数据的可靠传输,而IP则处理...

    microchip TCP/IP协议栈应用笔记V3.6

    《microchip TCP/IP协议栈应用笔记V3.6》是一份深入探讨Microchip公司TCP/IP协议栈实现与应用的重要文档,特别适合嵌入式系统开发者和网络通信工程师参考。Microchip TCP/IP协议栈是该公司为微控制器提供的完整网络...

    TCP/IP调试小助手

    标题“TCP/IP调试小助手”指的是一个专门用于帮助用户调试TCP/IP协议的工具。这个工具可能包含了一系列功能,如捕获网络数据包、分析...同时,用户应熟悉TCP/IP协议的基础知识,以便更好地利用工具进行调试和故障排除。

    TCP/IP常见面试知识点

    TCP/IP 协议簇是计算机网络中最为重要的一部分,理解 TCP/IP 协议的工作机理和每个层的作用对于程序员和网络管理员来说都是必备的基础素养。本文将从 TCP/IP 模型、数据链路层、网络层、传输层和应用层五个方面对 ...

    Linux TCP/IP 架构、设计与实现[TCP/IP Architecture, Design and Implementation in Linux] 1/5

    TCP/IP Architecture, Design and Implementation in Linux 1/5 For All: [Part 1/5] http://download.csdn.net/source/1345609 [Part 2/5] http://download.csdn.net/source/1345649 [Part 3/5] ...

    TCP/IP通信c#例程

    本文将深入探讨C#语言中实现TCP/IP通信的相关知识点,通过实例来阐述如何创建一个简单的服务器端和客户端应用程序。 首先,我们要理解TCP/IP的基本原理。TCP是一种面向连接的、可靠的传输层协议,它确保了数据包的...

    TCP/IP协议分析

    本文对 TCP/IP 协议进行了详细的分析,并对 FTP 协议进行了实验,通过对 FTP 协议的分析和实验,了解了 TCP/IP 协议在文件传输中的应用。 一、TCP/IP 协议简介 TCP/IP 协议是计算机网络的通信协议的基础,包括两种...

    TCP/IP协议配置及Windows网络实用程序的应用 实验报告

    ### TCP/IP协议配置及Windows网络实用程序的应用 #### 实验背景与目的 随着信息技术的不断发展,网络已经成为现代社会不可或缺的一部分。为了确保网络的高效稳定运行,掌握TCP/IP协议配置及网络实用程序的应用至关...

    tcp/ip详解,卷2:实现源码

    在TCP/IP协议族中,TCP(传输控制协议)和IP(网际协议)是最为核心的部分。TCP负责提供可靠的、面向连接的数据传输服务,而IP则负责在网络中进行数据包的路由。这一卷的内容主要集中在这两部分的实现上,通过源代码...

    tcp/ip详解pdf版

    在关于TCP/IP的论著中,最有影响的就是两部著作。一部是Douglas E. Comer的《用TCP/IP进行网际互连》,而另一部就是Stevens写的这3卷书。这两套巨著都很有名,各有其特点。无论是从事计算机网络的教师还是进行科研的...

    TCP/IP源码 完整的TCP/IP代码程序

    本文将深入探讨标题为"TCP/IP源码 完整的TCP/IP代码程序"的资源,通过分析源码,帮助读者理解和掌握TCP/IP协议的工作原理以及如何在实际的VC++环境中进行网络编程。 TCP/IP协议族由多个层次组成,包括应用层、传输...

    三菱FX5UJ和艾莫迅远程模块实现TCP/IP通讯,程序包含多种功能吗的实现

    在本文中,我们将深入探讨如何使用三菱FX5UJ PLC(可编程逻辑控制器)与艾莫迅远程模块通过TCP/IP协议进行通信,并实现多种功能。首先,我们要理解TCP/IP通讯的基础,然后逐步解析源码软件的实现细节。 TCP/IP...

    modbusTCP/IP通信应用详述(原创)

    本文为原创,从实用出发,描述了modbusTCP/IP即 modbusETHERNET通信详细说明使用过程和概念,通俗易懂,同时讨论了modbusTCP/IP通信中,智能表作TCPserver和作TCPclient两种情况。modbus中常用的软件modscan32和...

Global site tag (gtag.js) - Google Analytics