首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TCP的KeepAlive探测详解

使用TCP的KeepAlive机制。 使用第一种方式,意味着要在应用层自己实现一个ping-pong逻辑和协议,并支持设置空闲时长,重试次数,重试间隔等。...这里容易搞混的是TCP_KEEPIDLE和TCP_KEEPINTVL,前者是需要进行KeepAlive探测的空闲时间,而后者是在某次KeepAlive探测失败,再次重试的间隔时间。...对于上面的程序来说,当该TCP连接有5秒没有进行数据传输,就会发送KeepAlive探测报文。当探测报文失败,会隔2秒再次发送探测报文,3次探测失败就判断连接失败。...同上,前三个报文完成TCP三次握手,间隔5秒后发送KeepAlive探测报文,但由于没有收到ACK,所以每间隔2秒再次发送KeepAlive重试3次后,判定连接失败,在11秒(应该发送第4个KeepAlive...就此推测,KeepAlive机制判断连接崩溃,其行为应该与正常关闭类似。在测试代码中,分别使用了select和epoll来进行io事件测试,其输出如下: ?

5.2K50

3G上网卡连接报错信息大全

5120=已经成功连接。 5121=正在断开。 5122=连接已经断开或者连接错误。 5123=连接已经断开。 5124=断开失败,请稍候重试。(5124) 5125=正在取消。...(5132) 5133=接收登录认证请求失败(其它原因),请重新尝试登录或者拔出上网卡进行无线宽带(WLAN)连接。(5133) 5134=获取帐号信息出错,请稍候重试。...5200=正在打开端口... 5201=端口已经成功打开... 5202=正在连接设备... 5203=连接设备成功... 5204=设备链上的所有设备已经成功连接... 5205=正在验证用户名和密码...... 5206=验证过程完毕... 5207=客户端使用一个的帐号/密码/域进行请求验证... 5208=RAS服务器请求一个回叫号码... 5209=客户端请求改变本帐号的密码... 5210=开始发送状态...(1110) 1111=LogOff失败, 多次退出请求失败。(1111) 6718=验证用户名远程计算机超时没有响应。(6718) 6678=远程计算机没响应。(6678)

1.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

HTTP请求的ECONNRESET

经了解: 业务的使用分块上传对象,且通过onProgress查看上传文件的进度回调函数; const COS = require('cos-nodejs-sdk-v5'); let cos = new...keep alive的特性; 服务端在60s内保持tcp的连接通路,此阶段没有发送数据,就会reset断掉连接,但是客户端在收到断开的tcp信息前,发起了http的请求,导致服务端拒绝了请求; 3....根据业务量级场景来评估调整: sdk 为了在发请求共用 tcp 链接,减少频繁建立连接的消耗,所以默认 KeepAlive 是 true。...:所以 由于连接问题,发送失败,可以通过重试解决:调整sdk参数的分片重试次数,可以改大一些,比如 new COS({ ChunkRetryTimes: 10 }); ---- 二:原理详解 1、问题产生的源头是哪呢...,浏览器自然也会遇到这个问题,但是我们却很少发现有浏览器会报错408的错误状态码; 由于浏览器为了规避此类问题,直接采用了感官无法感知到的优雅处理方式: 直接进行重试自动重试连接中的其余请求,以便用户完全不知道发生的潜在故障

18.5K41

Linux TCP RST情况

“Connection reset by peer”如下图所示: 前面谈到了导致“Connection reset”的原因,而具体的解决方案有如下几种: 出错重试; 客户端和服务器统一使用TCP长连接...首先是出错重试:这种方案可以简单防止“Connection reset”错误,然后如果服务不是“幂等”的则不能使用该方法;比如提交订单操作就不是幂等的,如果使用重试则可能造成重复提单。...,固定5分钟tcp连接回收,而且发现连接出错,重发之前10s内消息。...[/yiji] 非正常包 连接已经关闭,seq 不正确等 keepalive 超时 公网服务tcp keepalive 最好别打开;移动网络下会增加网络负担,切容易掉线;非移动网络核心ISP设备也不一定都支持...数据错误,不是按照既定序列号发送数据 13.在一个已关闭的socket上接收数据 14.服务器关闭或异常终止了连接由于网络问题 客户端没有收到服务器的关闭请求,这称为TCP半打开连接

5.8K10

有赞TCP网络编程最佳实践

如果没有TIME_WAIT,并且最后一个ACK丢失,那么此时被动关闭端还会处于LAST_ACK一段时间,并等待重传;如果此时主动关闭方又立即创建TCP连接且恰好使用了相同的四元组,连接会创建失败,会被对端重置...,默认值分别为7200s、75s、9,即如果7200s没有收到对端的数据,就开始发送TCP Keepalive报文,如果75s内,没有收到响应,会继续重试,直到重试9次都失败后,返回应用层错误信息。...连接重连需要增加退让与窗口抖动 当网络异常恢复后,大量客户端可能会同时发起TCP重连及进行应用层请求,可能会造成服务端过载、网络带宽耗尽等问题,从而导致客户端连接请求处理失败,进而客户端触发重试。...首先,肯定是无法接收TCP连接了;其次,除了TCP连接占用的FD外,你的应用肯定还有内部场景占用或需要分配的FD,比如日志文件发生轮转创建新日志文件,如果日志文件创建失败,对于依赖本地存储的应用(...客户端发现超时关闭连接,创建连接重试,但此时服务端由于IO阻塞带来的延迟并未能够及时回收连接关闭(CLOSE_WAIT)的socket以及FD,导致FD消耗越来越多,最终导致FD耗尽,新日志文件创建失败

82421

服务器开发中网络数据分析与故障排查经验漫谈

: 1 以上函数如果调用出错后,返回值均为-1;但是返回值是-1,不一定代表出错,这还得根据对应的套接字模式(阻塞与非阻塞模式)。...详情如下: 阻塞模式下,connect函数如果不能立刻连上服务器,会导致执行流阻塞在那里一会儿,直到connect连接成功或失败或网络超时;而非阻塞模式下,无论是否连接成功connect将立即返回,此时如果未连接成功...由于我们使用的开发机器以windows居多,默认情况下,windows系统的telnet命令是没有打开的,我们可以在【控制面板】- 【程序】- 【程序和功能】- 【打开或关闭Windows功能】中打开telnet...连接不上,一共重试了5次,重试的时间间隔是1秒,2秒,4秒,8秒,16秒,最后返回失败。这个重试次数在/proc/sys/net/ipv4/tcp_syn_retries 内核参数中设置,默认为6。...u net.ipv4.tcp_keepalive_time=1200 表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小,这里改为20分钟。

1.4K50

聊聊 TCP 长连接和心跳那些事

2 长连接与短连接 TCP 本身并没有长短连接的区别,长短与否,完全取决于我们怎么用它。 短连接:每次通信,创建 Socket;一次通信结束,调用 socket.close()。...稍微说一下 FD 这个参数,他代表了文件句柄,每新增一条连接都会占用的文件句柄,如果你在使用 TCP 通信的过程中出现了 open too many files 的异常,那就应该检查一下,你是不是创建了太多的连接...,探测失败重试 10(参数 tcp_keepalive_probes)次,每次间隔时间 75s(参数 tcp_keepalive_intvl),所有探测失败后,才认为当前连接已经不可用。...主要体现在两个方面: KeepAlive 的开关是在应用层开启的,但是具体参数(如重试测试,重试间隔时间)的设置却是操作系统级别的,位于操作系统的 /etc/sysctl.conf 配置中,这对于应用来说不够灵活...,如不选择更改,属于误用范畴,造成资源浪费:内核会为每一个连接打开一个保活计时器,N 个连接打开 N 个保活计时器。

2.9K20

微服务治理框架(C++版)详细设计

服务容错 16.1 原理分析 配置服务调用出错后自动重试次数后,可以启用服务容错功能,当调用某个服务端出错后,框架自动尝试切换到提供相同服务的服务端再次发起请求。...调用某个服务端,如果连续5次请求出错,自动切换到提供相同服务的服务端。(5这个数值支持配置) 调用某个服务端,如果连续5次请求出错,如果此时没有其他服务端,增加一个惩罚连接时间(例如60s)。...服务调用出错后支持自动重试 18.1原理分析 当服务调用出错,可通过配置的重试次数进行重试,调用重试次数的配置支持到服务级别以及服务方法级别;重试次数配置优先级如下:方法级别 > 服务级别 > 默认重试配置...]=0 当某一服务在调用出错,框架会进行调用重试重试的次数根据配置来确定。...; • 连接:如果到目标服务器已有连接,则使用已有连接,访问目标服务器;如果没有可用连接,则创建HTTP/2连接; • 编码:对请求消息使用 Protobuf做序列化,通过 HTTP/2 Stream

2.4K20

亿级流量网站架构核心技术【笔记】(一)

一、交易型系统设计的一些原则 1.在设计系统,应该多思考墨菲定律: * 任何事情都没有表面看起来那么简单 * 所有的事都会比你预计的时间长 * 可能出错的事总会出错 * 如果你担心某种情况发生,那么它就更有可能发生...],对某个key进行哈希或者使用一致性哈希算法进行负载均衡,建议考虑使用一致性哈希算法 3.least_conn,将请求均衡到最少活跃连接的上游服务器 C.失败重试 1.主要两部分配置: * upstream...,慢请求累积导致连锁反应,甚至造成应用雪崩 2.读服务天然适合重试,而写服务大多不能重试(如果写服务是幂等的,则重试是允许的),重试次数太多会导致多倍请求流量 3.在进行代码Review,一定记得Review...2.服务调用型:可以简单地使用Futrue来解决问题(Java) H.前端Ajax超时 1.可以在请求带上timeout参数 2.使用setTimeout进行超时重试 七、回滚机制 A.事务回滚...3.制定好预案后,应对预案进行演习,来验证预案的正确性,在制定预案也要设定故障的恢复时间 4.要对关联路径实施监控报警,包括服务器监控(CPU使用率、磁盘使用每户、网络带宽等)、系统监控(系统存活、URL

1.8K20

服务器开发中网络数据分析与故障排查经验谈

: 1 以上函数如果调用出错后,返回值均为-1;但是返回值是-1,不一定代表出错,这还得根据对应的套接字模式(阻塞与非阻塞模式)。...详情如下: 阻塞模式下,connect函数如果不能立刻连上服务器,会导致执行流阻塞在那里一会儿,直到connect连接成功或失败或网络超时;而非阻塞模式下,无论是否连接成功connect将立即返回,此时如果未连接成功...连接不上,一共重试了5次,重试的时间间隔是1秒,2秒,4秒,8秒,16秒,最后返回失败。这个重试次数在/proc/sys/net/ipv4/tcp_syn_retries 内核参数中设置,默认为6。...net.ipv4.tcp_keepalive_time=1200 表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小,这里改为20分钟。...net.ipv4.tcp_keepalive_time=1200表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小

1.1K30

TCP?HTTP? 不同类型探测的引发的坑

,则创建连接 rc = ngx_event_connect_peer(&peer->pc); //如果创建连接失败,计数器清0 if (rc == NGX_ERROR ||...建立新HTTP连接失败,计数器清0 2. check_module keepalive可用长连接中, http send 请求返回的http code不是预期配置中的状态码,计数器清0。...java(tomcat)使用的是http类型探测,由于在upstream中没有显示配置 check_keepalive_requests,则使用该参数的默认值1, 也就是每次建立的连接都需释放,因此,无论在...http探测请求头中是否带keepalive/或者指定HTTP 1.1, http探测都会退化为http短连接方式。...其中net.ipv4.tcp_retries1,net.ipv4.tcp_retries2 是在认定出错并向网络层提交错误报告之前,重试的最大次数(该参数影响的是长连接)。

87520

Linux Linux内核参数调优

关于调优的建议: 1、出错,可以查看操作系统日志,可能会找到一些有用的信息 2、尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“调优”后,性能反而下降,事务出错数反而增加,所以,调优的时候可以考虑逐个参数进行调优...,才能被连接使用,大量并发的情况下,如果已被占用的端口号未被释放,部分新建连接因为无法分配到端口号而失败。...通过配置TCP_TW_REUSE参数,来释放TIME_WAIT状态的端口号给连接使用 net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收....tcp_synack_retries=2 默认5,对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。...当出现SYN等待队列溢出,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; 以下几个参数文件需要打开防火墙才会存在 net.netfilter.nf_conntrack_max=

6.8K31

Python异常及处理方法总结

# 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)引发 +-- ImportError # 导入模块/对象失败 | +-- ModuleNotFoundError...| +-- SSLError # SSL错误 | +-- ConnectTimeout(+-- Timeout) # (双重继承,下同)尝试连接到远程服务器请求超时,产生此错误的请求可以安全地重试...+-- RetryError # 自定义重试逻辑失败 +-- UnrewindableBodyError # 尝试倒回正文请求遇到错误 +-- FileModeWarning...Python还维护着traceback(跟踪)对象,其中含有异常发生函数调用堆栈有关的信息。记住,异常可能在一系列嵌套较深的函数调用中引发。...程序调用每个函数,Python会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python会搜索一个相应的异常处理程序。

2K40

TCP连接的状态详解以及故障排查

从图中可以看出,当客户端调用connect,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送...每一端都发送一个SYN,并传递给对方,且每一端都使用对端所知的端口作为本地端口。例如: 主机a中一应用程序使用7777作为本地端口,并连接到主机b 8888端口做主动打开。...主机b中一应用程序使用8888作为本地端口,并连接到主机a 7777端口做主动打开。 tcp协议在遇到这种情况,只会打开一条连接。...4、如果client关闭连接,server端的select并不出错(不返回-1,使用select对唯一一个socket进行non- blocking检测),但是写该socket就会出错,用的是send....在一个已经失败连接上试图使用setsockopt操作,也会返回这个错误。 _ 101 ENETUNREACH_ Network is unreachable网络不可达。

6.3K42

k8s的 Nginx Ingress 调优

调高 keepalive 连接最大请求keepalive_requests指令用于设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。...当这个数量被突破,最近使用最少的连接将被关闭。 简单解释一下:有一个HTTP服务,作为upstream服务器接收请求,响应时间为100毫秒。...nginx为此建立连接池,然后请求过来时为每个请求分配一个连接请求结束回收连接放入连接池中,连接的状态也就更改为idle。...A、假设请求和响应是均匀而平稳的,那么这1000条连接应该都是一放回连接池就立即被后续请求申请使用,线程池中的idle线程会非常的少,趋近于零,不会造成连接数量反复震荡。...接入层 nginx 一起解决了这个问题:接入层 nginx 必须使用 proxy_next_upstream_tries 严格限制重试次数,ingress nginx 则使用 proxy-next-upstream

3K30

浅谈TCP协议的长连接和短连接

(1)概念不同长连接:HTTP客户端与服务端先建立连接连接建立后不断开,然后再进行不断的数据传输。短连接:HTTP客户端与服务端每进行一次数据传输才进行通讯连接,传输完成后立即断开连接。...(2)传输数据过程不同长连接:TCP三次握手打开连接—> HTTP报文传输—> 保持连接—> HTTP报文传输—> ...—> TCP四次挥手关闭连接连接:TCP三次握手打开连接—> HTTP报文传输...—> TCP四次挥手关闭连接2 长连接原理连接的保活:KeepAlive首先想到的是KeepAlive 机制。...,探测失败重试 10(参数tcp_keepalive_probes)次,每次间隔时间 75s(参数tcp_keepalive_intvl),所有探测失败后,才认为当前连接已经不可用。...但是,默认 TCP 连接并不启用 Keep-alive,若要打开的话要显式地调用 setsockopt(),来设置保活包的发送间隔、等待时间、重试个数等配置。

61920

HTTP在.NET中的一些应用和解析

2.简单快速:客户向服务器请求服务,只需传送请求方法和路径。3.灵活:HTTP允许传输任意类型的数据对象。4.无连接:无连接的含义是限制每次连接只处理一个请求。...在实际项目的开发中,有一些需求需要同地方平台进行数据交互,例如我们经常使用的微信,支付宝,QQ等等平台,这就需要我们在自己的项目中生成对应的HTTP请求和处理相关HTTP请求信息。    ...异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息,系统会自动触发委托的异步过程,从而完成一个完整的流程。  ?      ...>错误重试次数 public string SyncRequest(string url, int tryTimes = 3) {..._urlTryList.TryRemove(toUrl, out tryTimes); Trace.TraceError(string.Concat("请求地址重试失败

78990

NodeJS错误处理最佳实践

连接断开是操作失败(因为这是任何一个正确的程序在系统的网络或者其它模块出问题都会经历的),如果它不被正确处理,那它就是一个失误。...你得考虑任何会导致失败的代码(比如打开文件,连接服务器,Fork子进程等)可能产生的结果。包括为什么出错,错误背后的原因。...一旦你这样做了,你就使用错误处理的代码代替了出错的代码。 有些人赞成从程序员的失误中恢复,也就是让当前的操作失败,但是继续处理请求。这种做法不推荐。...最后只剩下几个可用连接会很坏,将导致请求由并行变成串行被处理。 更糟的是, postgres 连接会被留在打开请求事务里。这会导致 postgres “持有”表中某一行的旧值,因为它对这个事务可见。...连接会停留在已认证的状态,并且被后续的连接使用。结果就是在请求里搞错了用户。 套接字会一直打开着。

1.5K41

RocketMQ和Kafka应用场景与选型

:两者没有区别,根据具体业务定夺 2、性能 kafka单机写入TPS号称在百万条/秒 rocketmq大约在10万条/秒 结论:追求性能方面,kafka单机性能更高 3、可靠性 kafka使用异步刷盘方式...,但是不会乱序 结论:rocketmq胜出 7、消息失败重试机制 kafka消费失败不支持重试 rocketmq消费失败支持定时重试,每次重试间隔时间顺延 8、定时/延时消息 kafka不支持定时消息...模式 push模式:客户端与服务端建立连接后,当服务端有消息,将消息推送到客户端 pull模式:客户端不断的轮询请求服务端,来获取的消息 在具体实现时,push和pull模式都是采用消费端主动拉取的方式...长轮询:rocketmq采用长轮询的方式实现的,指的是在请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器推送的数据,再返回,然后进入循环周期 客户端像传统轮询一样从服务端请求数据...,服务端会阻塞请求不会立刻返回,直到有数据或者超时才返回给客户端,然后关闭连接,客户端处理完响应信息后再向服务器发送请求 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.8K30
领券