TCP连接中的异常断开情况处理

合集下载

解决电脑网络连接中断问题五个常见原因

解决电脑网络连接中断问题五个常见原因

解决电脑网络连接中断问题五个常见原因在如今高度信息化和互联网普及的时代,电脑网络连接中断已经成为了我们日常生活中的一个常见问题。

当我们遇到这个问题时,往往会感到困惑和烦恼。

而要解决这个问题,首先需要了解其中的原因。

本文将介绍五个常见的导致电脑网络连接中断的原因,并提出相应的解决方案。

第一,网络信号弱。

网络信号弱是导致电脑网络连接中断的常见原因之一。

当网络信号弱时,电脑就无法正常与网络通信,导致连接中断。

解决这个问题的方法是,靠近路由器或无线接入点,以获得更好的信号强度。

此外,还可以通过增加无线中继器或改进无线路由器的位置来增强信号。

第二,物理连接问题。

物理连接问题也是导致电脑网络连接中断的常见原因之一。

当电脑与路由器或其他网络设备之间的物理连接出现问题时,就可能导致网络连接中断。

解决这个问题的方法是,检查物理连接是否松动或断开,然后重新连接或更换连接线缆。

第三,设备故障。

设备故障是导致电脑网络连接中断的另一个常见原因。

当路由器、网卡或其他网络设备出现故障时,就会导致网络连接中断。

解决这个问题的方法是,重新启动路由器和电脑,如果问题仍然存在,可能需要更换故障设备。

第四,网络设置错误。

网络设置错误也是导致电脑网络连接中断的一个重要原因。

当我们在设置网络时不小心配置错误,就会导致网络连接中断。

解决这个问题的方法是,检查并重新配置网络设置,确保所有设置正确无误。

第五,网络供应商问题。

有时候,电脑网络连接中断是由于网络供应商的问题所致。

当供应商的网络服务中断或出现故障时,我们的电脑就无法连接到网络。

解决这个问题的方法是,联系网络供应商,了解是否存在网络问题,并等待供应商修复。

除了上述五个常见原因外,还有其他一些可能导致电脑网络连接中断的原因,如病毒感染、操作系统问题等。

在遇到连接中断问题时,我们应该耐心排查,找出问题的根本原因,并根据具体情况采取相应的解决方案。

总之,电脑网络连接中断是我们日常生活中常见的问题之一。

如何解决网络连接异常断开的问题

如何解决网络连接异常断开的问题

如何解决网络连接异常断开的问题网络连接异常断开是许多人在使用互联网时常遇到的问题。

长时间的连接异常不仅会影响正常上网体验,还可能导致重要数据丢失。

本文将介绍一些简单有效的方法来解决网络连接异常断开的问题。

一、检查网络设备网络无法连接通常有以下几个原因:路由器故障、网线连接问题、无线信号弱等。

首先,我们需要检查路由器的工作状态。

确认路由器电源、WAN口、LAN口的连线是否正常。

确认路由器的指示灯是否正常亮起,如有异常情况,可尝试重启路由器。

其次,检查电脑或其他设备与路由器的连接方式。

若是使用有线连接,检查网线插口是否松动,利用替换或重新插拔网线的方式,检查是否解决问题。

若是无线连接,检查与路由器之间的距离和障碍物,尝试靠近路由器或通过增加信号衰减器等方式增强信号。

二、检查网络设置网络连接异常可能是由于配置错误导致的。

我们可以检查以下几个设置项:IP地址、子网掩码、默认网关和DNS服务器。

首先,打开网络和共享中心,点击网络连接图标,选择“属性”。

在弹出的窗口中,双击“Internet协议版本4(TCP/IPv4)”,确保配置正确或选择自动获取IP 地址。

其次,检查路由器的设置。

登录到路由器管理界面,查看路由器的IP地址、子网掩码、默认网关和DNS服务器是否配置正确。

如果不知道正确的配置信息,可以尝试恢复路由器出厂设置。

三、更新驱动程序网络适配器的驱动程序可能会因为过时而导致连接异常。

我们可以通过以下步骤来更新驱动程序:1. 按下Win + X键,选择“设备管理器”;2. 展开“网络适配器”选项,找到你的网络适配器;3. 右键点击该适配器,选择“更新驱动程序软件”;4. 选择自动搜索更新的驱动程序。

更新完成后,重启设备,检查网络连接是否恢复正常。

四、修改电源管理设置某些电脑在省电模式下会自动关闭网络适配器,导致网络连接断开。

我们可以尝试修改电源管理设置,禁止电脑自动关闭网络适配器。

1. 按下Win + X键,选择“电源选项”;2. 在电源选项窗口中,点击“更改高级电源设置”;3. 展开“无线适配器设置”,选择“电源保存模式”;4. 将“在此模式下,无线适配器关闭以节省电源”设置为“最小电源消耗”或“最大性能”。

网络链路中断应急处置方案

网络链路中断应急处置方案

网络链路中断应急处置方案背景在现代企业中,网络已经成为业务运作和交流的重要基础设施。

如果网络出现故障,可能会导致企业业务受阻,从而影响企业的生产和运营。

网络链路中断是指网络中的某个链路突然断开或者不正常工作,导致相关设备之间无法通信。

网络链路中断的出现可能会造成许多问题,比如丢失企业关键数据、无法访问重要应用等等。

因此,对于企业来说,建立一套完善的网络链路中断应急处置方案至关重要。

应急处置方案针对网络链路中断的应急处置方案应该包括以下几个方面:1.检查并确认链路中断首先,当发现链路中断问题时,应该先判定问题出现在哪个设备上,比如路由器或者交换机。

一般情况下,链路中断首先应该与线路相关的设备或者线路胶头仔细排查。

2.尝试修复链路如果网络链路中断的问题比较简单,可以通过一些简单的手段尝试解决,比如重新插拔相关设备或更换有问题的线缆或器材。

但是,如果链路中断的问题比较严重,需要耗费大量的时间和人力去尝试修复,企业应该考虑立即启动隔离措施。

3.启动隔离措施如果在检查和修复的过程中,你发现无法解决链路中断的问题,否则会造成企业的业务运营出现大的损失,那么建议启动隔离措施。

在这个过程中,首先要考虑重要的业务影响,通过设置合适的路由以将受影响的业务系统进行划分。

同时,还需尽快搭建临时网络链路,保证业务系统的可用性。

4.尝试故障恢复隔离阶段完成后,进一步尝试故障恢复,尽可能的将原有链路的功能恢复正常。

在这个阶段中,确认链路中断具体的原因,通过替换或维修有问题的设备,重新恢复链路。

同时,应该多测试恢复后的网络链路,保持强大的监控,尽量避免链路中断再次发生。

5.结束应急处置阶段一旦完成链路故障的恢复工作,并确保链路正常,应该将应急处置阶段告一段落,并进行相关的记录。

除此之外,还应该及时将经验和教训总结起来,对应急处置方案的完善进行不断优化。

总结网络链路中断的问题是现代企业运营中的常见问题之一。

一旦出现这样的情况,企业应该建立一套符合自身特点的应急处置方案,以保证业务的可用性,并及时进行相关的监控和记录。

如何进行TCP协议的错误排查与故障处理?(一)

如何进行TCP协议的错误排查与故障处理?(一)

TCP协议是互联网中最常用的传输协议之一,在网络通信中扮演着至关重要的角色。

然而,由于网络环境的复杂性和多变性,TCP协议可能会出现各种故障和错误。

本文将探讨如何进行TCP协议的错误排查与故障处理,以提升网络通信的稳定性和可靠性。

一、故障现象分析当TCP协议出现故障时,首先需要进行故障现象的分析,以快速定位问题。

故障现象可能包括连接失败、数据传输中断、延迟增加等情况。

通过观察故障现象的频率、发生时机和影响范围等因素,可以初步推断可能的故障原因。

二、网络基础设施检查在进行TCP协议的错误排查与故障处理之前,需要先检查网络基础设施的运行状况。

包括检查网络链路是否正常,交换机或路由器是否配置正确,以及网络带宽是否足够等。

若发现基础设施存在故障或异常,应及时修复或升级,以确保网络通信的稳定性。

三、TCP参数调优TCP协议中有许多可调优的参数,根据网络环境和需求的不同,合理地调整这些参数可以提升TCP协议的性能和稳定性。

例如,通过调整拥塞控制算法、拥塞窗口大小、重传超时时间等参数,可以减少丢包和延迟,提高数据传输效率。

这些参数的调优需要根据具体情况进行实验和调整,以获得最佳的性能优化效果。

四、网络抓包分析当TCP协议出现问题时,利用抓包工具进行网络数据包的捕获和分析,可以深入了解协议的运行机制和问题所在。

通过分析抓包数据中的报文头部、标志位、数据长度等信息,可以发现连接建立失败、连接断开、数据传输异常等问题的原因。

抓包工具常用的有Wireshark、tcpdump等,它们可以帮助我们快速定位和解决网络故障。

五、排查应用程序问题除了TCP协议本身的问题,应用程序的错误也可能导致TCP协议的故障。

在进行故障排查时,要判断故障是由网络通信问题还是应用程序问题引起的,可以通过日志分析、代码调试等方法来进行排查。

例如,应用程序在处理TCP连接时可能存在资源泄漏、缓冲区溢出等问题,这些都可能导致TCP协议的异常。

六、网络安全检查网络安全问题也可能导致TCP协议的故障,例如DDoS攻击、防火墙配置错误等。

wincc 走modbus tcp 通讯中断解决方案

wincc 走modbus tcp 通讯中断解决方案

wincc 走modbus tcp 通讯中断解决方案在使用WinCC进行Modbus TCP通讯时,有时候会遇到通讯中断的问题。

这可能是由于各种原因引起的,例如网络连接问题、设备故障、配置错误等。

在本文中,将介绍一些常见的解决方案,以帮助您排除WinCC与Modbus TCP通讯中断的问题。

首先,需要确认网络连接是否正常。

检查网络连接是否稳定,并确保网络适配器正常运作,以便WinCC能够顺利与设备进行通讯。

确保网络线缆连接没有松动或断开,并检查网络设备(如交换机、路由器)是否正常工作。

其次,需要检查设备配置是否正确。

在WinCC中,打开设备配置管理器,确保使用正确的IP地址和端口号来连接Modbus TCP设备。

确保与设备通讯的参数设置正确,例如数据格式、传输速率等。

还要检查设备的Modbus地址是否正确,以确保WinCC能够正确读取和写入数据。

在进行配置时,还需要注意设备的权限设置。

某些设备可能需要进行用户验证才能进行通讯。

确保在WinCC中输入正确的用户名和密码,以便设备能够接受WinCC的请求。

另外,需要注意设备的Modbus ID设置。

每个Modbus设备都有一个唯一的ID,用于区分其他设备。

在WinCC中,确保正确设置了设备的Modbus ID,以便WinCC能够与指定设备进行通讯。

如果仍然存在通讯中断问题,可以尝试使用诊断工具来检测错误。

WinCC提供了一些诊断工具,如网络监视器和通讯诊断器,用于检测网络连接和通讯问题。

通过这些工具,您可以查看网络传输的数据包、检测通讯错误并进行故障排除。

除了上述方法,还可以尝试更新WinCC的版本。

某些旧版本的WinCC可能存在与Modbus TCP通讯兼容性问题。

通过更新到最新的WinCC版本,可以修复一些已知的通讯中断问题并改善通讯稳定性。

最后,如果以上方法均未解决问题,可能需要进一步检查硬件设备是否正常。

检查Modbus TCP设备的状态指示灯,确保设备正常工作。

如何进行TCP协议的错误排查与故障处理?(二)

如何进行TCP协议的错误排查与故障处理?(二)

TCP协议是互联网中最常用的传输层协议之一。

它提供了可靠的数据传输、流量控制和拥塞控制机制,确保了网络传输的稳定性和可靠性。

然而,在网络传输过程中,由于各种原因,TCP协议可能会出现错误和故障。

本文将从排查错误和故障处理的角度,探讨如何有效解决TCP协议的问题。

一、错误排查1. 监控与日志在排查TCP协议错误时,首先要建立有效的监控系统和日志记录机制。

通过监控网络流量、连接状态、传输速率等指标,可以及时发现TCP协议可能存在的问题。

同时,详细记录日志进行分析,可以帮助快速定位错误原因。

2. 连接问题TCP协议的首要任务是建立连接。

在连接建立过程中,可能会出现各种问题。

首先,检查网络连接是否正常,包括物理连接是否完好、无线信号质量是否良好等。

其次,查看防火墙、路由器等网络设备的设置,确保没有阻塞TCP协议的端口。

此外,还要检查客户端和服务器端的配置是否一致,包括IP地址、子网掩码等。

3. 传输问题TCP协议的可靠性主要体现在数据的传输过程中。

如果发现传输中出现了错误,需要定位并解决问题。

在排查过程中,可以利用网络抓包工具,如Wireshark,来分析TCP报文,查找传输中的异常情况。

特别关注重传次数、拥塞窗口、丢包情况等指标,以便找到问题的症结所在。

另外,检查网络设备的缓冲区设置,避免数据丢失或拥塞。

4. 拥塞控制问题TCP协议有强大的拥塞控制机制,用于调整传输速率以适应网络条件。

如果发现网络传输速率低于预期,可能存在拥塞控制问题。

此时,可以通过测量传输时延、丢包率等指标,判断是否发生了拥塞。

若确定存在拥塞,可调整拥塞窗口大小、改变拥塞避免算法等,以提高传输效率。

二、故障处理1. 断连问题TCP协议在连接断开时,需要进行相关处理。

如果发现连接频繁断开,首先检查网络设备是否正常工作。

同时,查看日志,寻找异常断连的原因。

可能是服务器端故障、网络拥堵或者客户端异常等引起的。

根据具体情况采取相应的措施,如重启设备、增加带宽、修复软件等。

如何进行TCP协议的错误排查与故障处理?(三)

如何进行TCP协议的错误排查与故障处理?(三)

TCP(Transmission Control Protocol)作为一种重要的网络传输协议,在互联网通信中扮演着重要的角色。

然而,在使用TCP协议过程中,难免会出现一些错误和故障。

本文将从四个方面探讨如何进行TCP协议的错误排查与故障处理。

一、连接问题排查在TCP通信中,连接问题是最常见的错误之一。

当连接失败时,可以采取以下步骤进行排查。

1. 确认网络连接:首先,检查计算机是否正常连接到网络,可以通过使用其他网络应用程序或者ping命令来确认。

2. 确认端口号:确认通信双方使用的端口号是否正确配置,在客户端和服务器端分别检查。

3. 检查防火墙设置:防火墙设置可能会阻止TCP连接,确保防火墙允许TCP流量通过。

4. 检查IP地址和域名:确认服务器的IP地址或域名是否正确输入,如果使用域名,还需要确认DNS解析是否成功。

二、传输问题排查除了连接问题,TCP协议中的传输问题也可能导致错误和故障。

以下是排查传输问题的步骤。

1. 检查带宽限制:网络中的带宽限制可能导致数据传输缓慢,使用网络性能工具检测网络带宽是否正常。

2. 排除网络拥堵:网络拥堵也会导致TCP连接问题,可以使用网络分析工具检测网络流量和拥堵情况。

3. 检查MTU设置:MTU(Maximum Transmission Unit)表示在单个数据包中可以携带的最大数据量,确保在网络路径上的每个设备都设置正确的MTU值。

4. 排查传输错误:TCP协议中的传输错误可能包括丢包、重传和乱序等问题,可以使用网络抓包工具来分析传输过程中的错误。

三、性能问题排查在TCP通信中,性能问题可能导致连接慢或数据传输速度低下。

以下是排查性能问题的步骤。

1. 检查网络延迟:网络延迟可能导致连接时延增加,可以使用ping命令或者网络性能工具来检测延迟情况。

2. 确认带宽利用率:带宽利用率过高可能导致传输速度下降,使用网络性能监测工具来确认带宽利用率是否正常。

3. 检查硬件性能:服务器或客户端的硬件性能问题也会导致TCP 通信性能下降,检查服务器负载情况以及客户端设备的性能状态。

如何进行TCP协议的错误排查与故障处理?(四)

如何进行TCP协议的错误排查与故障处理?(四)

TCP协议是在互联网中实现可靠数据传输的重要协议之一,保证了信息的准确性和完整性。

然而,由于网络环境的复杂性和各种设备的不稳定性,TCP协议在使用过程中仍然可能产生错误和故障。

本文将从几个方面探讨如何进行TCP协议的错误排查与故障处理。

一、检查网络连接1. 检查网络硬件设备:首先,需要检查网络硬件设备是否正常工作,如路由器、交换机、防火墙等。

确认设备的电源、电缆和接口是否正常连接。

如果发现硬件设备故障,应及时更换或修复。

2. 检查网络连通性:在排查TCP协议错误时,我们需要确保网络的连通性。

可以通过使用ping命令检查设备之间的连通性。

如果ping 命令返回失败,说明网络中存在问题,可能是由于网络连接不稳定或某个设备的配置错误。

二、分析网络流量1. 抓包分析:使用网络分析工具,如Wireshark等,进行抓包分析。

通过抓包可以查看网络中的数据包和相应的TCP协议信息。

根据抓包结果,可以判断TCP连接是否被正确建立,数据包是否按序到达,是否有数据包重传等问题。

2. 检查TCP连接状态:通过抓包可以查看TCP连接的状态。

常见的TCP连接状态包括SYN_SENT、ESTABLISHED、FIN_WAIT等。

根据连接状态可以初步判断是否存在TCP连接错误或关闭异常的情况。

三、排查网络延时1. 检查网络拥堵:在网络中存在大量数据传输时,可能会导致网络拥堵,从而导致TCP连接延时。

可以通过查看抓包结果中的RTT (Round-Trip Time)和丢包情况来判断网络延时的原因。

2. 检查应用程序问题:有时候,TCP连接的延时可能是由于应用程序的问题引起的。

可以通过排查应用程序的日志或错误信息,检查是否存在应用程序的性能问题或错误导致TCP连接延时。

四、处理TCP连接重置1. 检查防火墙配置:防火墙可能会阻止某些TCP连接,导致连接重置。

可以检查防火墙的配置,确认是否对TCP协议有相应的限制。

2. 检查网络设备:某些网络设备,如IPS(Intrusion Prevention System)或IDS(Intrusion Detection System),可能会对TCP连接进行检查并重置连接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. TCP连接中可能出现的异常断开情况假设存在这样一种情况:在两个不同的主机Machine1、Machine2系统上分别运行两个应用程序Application1、Application2,在Application1与Application2的进程中存在一个TCP链接TCPLink。

它们的实际传输取决于物理链路的沟通PhysiLink。

图一:TCP通信情况模拟图1.1程序/进程异常如果TCPLink异常而Application1正常,TCPLink会被关掉并且告诉Application2,Application2也就关闭了该异常的TCPLink。

这种情况会在TCPLink异常后的一次Socket调用中通过返回值(C/C++)或者异常代码(C#)得知。

因此在做程序开发的时候比较容易处理。

1.2物理链路异常如果出现Machine1或者Machine2任何一个系统死机:假设Machine1系统异常,此时Machine2无法知道此TCP连接的失效,并一直认为连接正常。

如果网络硬件故障(如网线拔掉、交换机断电):Machine1与Machine2都无法知道此TCP连接的失效,并一直认为连接正常。

以上这两种情况在编程时会变的非常糟糕,因为TCP连接将一直被认为有效,所有对此TCP Socket的调用都会正确返回,这显然是错误的。

并且这种错误情况通常会持续很久。

2.异常断开情况影响分析对于程序/进程异常,由于Socket调用中可以得到返回值。

因此在做程序开发的时候比较容易处理。

对于物理链路异常,如果Machine1系统异常,如果Application2是FTP之类的服务器程序倒也无妨(一个连接存在时间比较长对它没有多大影响),如果是需要实时知道连接用户状态的即时通讯类服务器或者Application2是客户端则就会产生一系列的问题了。

如果Machine1与Machine2都异常,Application1和Application2都会一直等下去,两端需要进行相似的处理。

3.异常断开情况的判断与处理对于这种情况在MSDN里面是这样处理的,原文如下:如果您需要确定连接的当前状态,请进行非阻止、零字节的 Send 调用。

如果该调用成功返回或引发WAEWOULDBLOCK 错误代码(10035),则该套接字仍然处于连接状态;否则,该套接字不再处于连接状态。

但是,在试验中发现,这种处理方法在很多时候根本无效,尤其对发生在物理链路层上的问题,很多情况下无法检测出网络已经异常断开了。

下面探讨一下能够使用的判断与处理方式以及优缺点。

3.1定时发送简单约定帧一般是服务器程序和客户端程序达成某种协议,客户端定时向服务器发送很小的数据包,即约定的简单帧,来告诉自己的状态,而服务器端程序则需要在每次收到用户的后更新用户超时的时间计数,当用户的时间计数超过指定时间,就可以认为这个用户已经系统异常终止,而终止之间的连接,并转告其他用户。

客户端也可以通过接收服务器端返回的小数据包来判断服务器端的状态。

3.2Ping + Send/Receive用Ping命令来判断网络本身状态,即确定物理链路层的状态。

同时,用应用程序层的Send和Receive来进行程序/进程异常的判断。

通过这两种方式的组合,一般能够正确得到网络的状态。

当网络发生故障时,能够准确的定位其状态。

但是,当网络正常、应用程序正常时,对端的操作系统的设置可能会影响上述判断。

即,当对端禁止向其发送Ping命令时,我们Ping的结果将始终为不通。

考虑这种情况下,该方法存在一定的缺陷。

3.3KeepAlive-Timer由于在应用层进行判断存在各种困难,那么是否可以考虑使用TCP底层的一些特性呢?通过思考,我想到可以利用TCP底层协议的KeepAlive-Timer进行网络状态的判断。

但是需要改造。

通过改造后,这将是一个比较可靠的判断方式。

这将在下面作为重点单独介绍。

4. KeepAlive-Timer4.1 TCP/IP协议结构以及底层定时器网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。

一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。

TCP/IP通常被认为是一个四层协议系统。

图二:TCP/IP协议族的四个层次以及不同层次的协议上面的每一层分别负责不同的功能。

链路层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。

它们一起处理传输媒介(如网线)的物理接口细节。

网络层,处理分组在网络中的活动。

运输层主,要为两台主机上的应用程序提供端到端的通信。

在TCP/IP协议族中,有两个互不相同的传输协议:TCP和UDP。

TCP为两台主机提供高可靠性的数据通信。

它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。

由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

应用层,负责处理特定的应用程序细节。

关键点:应用程序位于应用层,TCP协议在运输层,在数据流从运输层传递到链路层的过程中,TCP协议本身的底层实现正是我们要利用的所在。

TCP协议在实现的时候为每条连接建立了七个定时器。

按照它们在一条连接生存期内出现的次序,分别为:connection establishment timer(连接建立定时器)、retransmission timer(重传定时器)、delayed ACK timer(延迟ACK定时器)、persist timer (持续定时器)、keepalive timer(保活定时器)、FIN_WAIT _ 2 timer、TIME_WAIT timer。

4.2KeepAlive-Timer (保活定时器)在《TCP/IP协议详解卷2:实现》中,这样描述KeepAlive-Tmer:KeepAlive-Tmer在应用进程选取了Socket的SO_KEEPALIVE选项时生效。

如果连接的连续空闲时间超过2小时,保活定时器超时,向对端发送连接探测报文段,强迫对端响应。

如果收到了期待的响应,TCP可确定对端主机工作正常,在该连接再次空闲超过2小时之前,TCP不会再进行保活测试。

如果收到的是其他响应,TCP可确定对端主机已重启。

如果连续若干次保活测试都未收到响应,TCP就假定对端主机已崩溃,尽管它无法区分是主机故障(例如,系统崩溃而尚未重启),还是连接故障(例如,中间的路由器发生故障或电话线断了)。

4.3KeepAlive-Timer工作机理分析5.3.1 保活定时器在2小时空闲后超时收到一个报文段后,将复位连接的保活定时器,重设为2小时,并清零连接的空闲计数器。

如果保活定时器超时(收到最后一个报文段2小时后),并且置位了Socket的保活选项,则TCP将向对端发送连接探测报文段。

如果定时器超时,且未置位Socket的保活选项,则TCP将只复位定时器,重设为2小时,不向对端发送连接探测报文段。

当然,如果应用进程调用了close,即使连接已空闲了2小时,TCP也不会发送连接探测报文段。

5.3.2 进行保活测试当保活定时器发送连接探测报文后,如果对端无响应,TCP最多以75秒的间隔发送9个连接探测报文段。

TCP在确认连接已死亡之前必须发送多个连接探测报文段的一个原因是,对端的响应很可能是不带数据的纯ACK报文段,TCP无法保证此类报文段的可靠传输,因此,连接探测报文段的响应有可能丢失。

如果连接总的空闲时间大于或等于2小时加10分钟,连接将被丢弃。

从0秒起,每隔75秒连续9次发送连接探测报文段,直至600秒。

675秒时(定时器2小时超时后的11.25分钟)连接被丢弃。

图三:保活定时器判断对端是否可达4.4利用KeepAlive-Timer通过上面的分析知道,如果在2个小时没有数据传送,TCP协议会给对端发送一个Keep-Alive数据报,使用的序列号是曾经发出的最后一个报文的最后一个字节的序列号,对端如果收到这个数据,回送一个TCP的ACK,确认这个字节已经收到,这样就知道此连接没有被断开。

如果一段时间没有收到对方的响应,会进行重试,每隔75秒探测一次,重试9次后,没有收到回应的话,就会断开这个连接。

但2个小时对于我们的项目来说显然太长了。

我们必须缩短这个时间。

我们要做的就是,在TCP认为的空闲2小时到达之前,模拟keepAlive-Timer 的数据结构,使其按照我们的要求空闲时间、探测间隔来判断TCP的连接状态。

通过利用Socket类的IOControl()函数可以达到上述的目的:在C#中,其语法为:public int IOControl ( IOControlCode ioControlCode, byte[] optionInValue, byte[] optionOutValue )其中主要参数的意义如下:ioControlCode :一个IOControlCode 值,它指定要执行的低级操作模式的控制代码。

optionInValue :Byte 类型的数组,包含操作要求的输入数据。

将IOControlCode的值设置为KeepAlive就可以得到对该操作的控制。

对于inOptionValues的定义,可以通过查找Wsocket2的文档找到答案:它是一个如下的结构体:Struct tcp_keepalive{u_long onoff; //是否启用Keep-Aliveu_long keepalivetime; //多长时间后开始第一次探测(单位:毫秒)u_long keepaliveinterval; //探测时间间隔(单位:毫秒)}在C#中,将一个tcp_keepalive结构的内容按照顺序写入Byte数组中,然后传递给IOControl函数,我们就可以使用该函数来对网络状态进行准确的判断了。

可以这样使用:在发送数据前,使用IOControl来确保物理层的状态正确,如果不正确,则通过异常捕获来得到断开的信息,然后进行必要的信息显示,主备切换等工作。

相关文档
最新文档