您现在的位置是:POS机优选 > 宜收宝POS机
pos机交易超时,Go 验证 TCP SYN 超时重传机制
POS机优选2025-04-25 03:23:49【宜收宝POS机】5人已围观
简介网上有很多关于pos机交易超时,Go 验证 TCP SYN 超时重传机制的知识,也有很多人为大家解答关于pos机交易超时的问题,今天乐刷官方代理商(b06.cn)为大家整理了关于这方面
【温馨提示】如果您有办理pos机的需求或者疑问,可以联系官方微信 18127011016

网上有很多关于pos机交易超时,Go 验证 TCP SYN 超时重传机制的机交易机制知识,也有很多人为大家解答关于pos机交易超时的超时超问题,今天乐刷官方代理商(www.zypos.cn)为大家整理了关于这方面的验证知识,让我们一起来看下吧!
本文目录一览:
1、重传pos机交易超时
pos机交易超时
背景最近写了一个压测代码,机交易机制测试一个 http 接口,超时超代码大概是验证这个样子,代码跑在 Linux 机器上,重传内核版本:3.10.107。机交易机制
pac卡ge mainimport ( "context" "fmt" "io/ioutil" "net/http" "time")func main() { for { time.Sleep(time.Millisecond * 10) cli := http.Client{ Timeout: 5 * time.Second, } req, err := http.NewRequestWithContext(context.Background(), "GET", "http://xxx.com", nil) if err != nil { fmt.Println(err) continue } now := time.Now() rsp, err := cli.Do(req) if err != nil { fmt.Printf("%v, cost:%v\", err, time.Since(now)) continue } body, err := ioutil.ReadAll(rsp.Body) defer rsp.Body.Close() if err != nil { fmt.Println(err) continue } fmt.Printf("len of body:%v", len(body)) }}预期 error
提供 http 服务的超时超 server,在这样的验证压测条件下会来不及处理这么多的请求,因此会存在 5s 超时的重传情况。5s 超时的机交易机制时候,cli.Do(req) 会返回下面的超时超错误信息。原因是验证 http.Client 经历 5s 没有收到结果,context 到达了 Deadline。
context deadline exceeded (Client.Timeout exceeded while awaiting headers), cost:5.00031874s其他 error
在压测过程中,还出现了其他的 error,并且数量要多于预期的 context deadline exceeded 错误。这是错误信息,错误信息里隐去了 ip、port。
dial TCP ($ip):($port): connect: connection timed out, cost:3.017266219s
出现这个错误的调用耗时只有 3s,但是在代码中初始化 cli 的时候设置了 5s 的超时,这是为什么呢?
分析上面的 dial tcp 错误显示是发起 tcp 调用时出的错,那就需要从 tcp 的方面进行分析。
祖传三次握手镇楼。
client 向 server 发起第一次握手的时候,会发送 SYN 信号。如果 client 等待了一个超时时间之后没有收到 server 的 ACK,client 则会重试。如果重试之后还是等待超时了,就再重试。
在 Linux 中,client 重传 SYN 的次数由内核参数 net.ipv4.tcp_syn_retries 控制,默认为 6。
通过以下指令在压测机器上查看 SYN 重传次数,可以看到压测机器上发 tcp 请求时只会超时重传一次 SYN。
$: sysctl -a | grep tcp_syn_retriesnet.ipv4.tcp_syn_retries = 1
重传间隔是怎么规定的呢?
SYN 重传间隔存在过一个 bug: kernel/git/torvalds/linux.git - Linux kernel source tree
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4d22f7d372f5769c6c0149e427ed6353e2dcfe61
在 bug 修复前,超时时间是由TCP_RTO_MIN这个参数计算的,该参数在内核代码/include/net/tcp.h中定义。
#define TCP_RTO_MIN ((unsigned(HZ/5))
bug 修复之后,超时时间由TCP_TIMEOUT_INIT计算,代码地址:
https://elixir.bootlin.com/linux/v3.10.107/source/include/net/tcp.h#L136
#define TCP_TIMEOUT_INIT((unsigned(1*HZ)
这个值在RFC 6298中,定义为1秒。在RFC 1122中为3秒。这是最开始的超时等待时间,如果在这段时间内没有收到 ACK,超时等待时间按 2 的指数倍增长。如果重试次数为 6 次,那么 RFC 6298 的超时重传间隔就是 1, 2, 4, 8, 16, 32;RFC 1122 中就是 3, 6, 9, 18, 36, 72。
通过压测机器的内核版本号,查证源码得到该机器的初始超时重传时间为 1s。
那么这就解释的通了,压测机器 SYN 重传次数为 1,所以 tcp 握手的时候第一次发 SYN,等待了 1s 没有收到 ACK,又重传一次,等待 2s 也没有收到 ACK,这样总共耗时了 3s,就报了 dial tcp: connection timeout。
复现接下来复现一下这种情况。
找一台服务器,将 net.ipv4.tcp_syn_retries 设置为 1。通过编辑 /etc/sysctl.conf 文件实现:
vim /etc/sysctl.confnet.ipv4.tcp_syn_retries = 1
在终端中:
$: iptables -A INPUT --protocol tcp --dport 5000 --syn -j DROP$: tcpdump -i lo -Ss0 -n src 127.0.0.1 and dst 127.0.0.1 and port 5000
开一个新终端:
$: date '+ %F %T'; telnet 127.0.0.1 5000; date '+ %F %T';
可以看到 tcpdump 中,只收到了两次 SYN(16:50:20 和 16:50:21),并且两次间隔为 1s。
而在新终端中,看到整个调用的耗时为 3s(16:50:20 - 16:50:23)。
总结http 或 tcp 调用时的 dial tcp (ip):(port): connect: connection timed out 错误是 SYN 的超时重传机制引起的。如果遇到这种错误,一方面需要考虑 server 可以处理请求的 QPS,另一方面也要检查 client 端重传相关参数的设置。
参考文献[1] 理解 timeout,这一篇就够了 - poslua | ms2008 Blog
https://ms2008.github.io/2017/04/14/tcp-timeout/
[2] net.ipv4.tcp_syn_retries参数的含义_来自万古的忧伤的博客-CSDN博客
https://blog.csdn.net/weixin_45413603/article/details/113891804
[3] [TCP] tcp连接SYN超时重传次数和超时时间_陶士涵的菜地的技术博客_51CTO博客
https://blog.51cto.com/u_15274085/2919125
[4] 《关于TCP SYN包的超时与重传》——那些你应该知道的知识(四)_BBIE的博客-CSDN博客_syn重传
https://blog.csdn.net/sinat_17736151/article/details/82804404
[5] SYN retransmits: Add new parameter to retransmits_timed_out()
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4d22f7d372f5769c6c0149e427ed6353e2dcfe61
[6] tcp.h - include/net/tcp.h - Linux source code (v3.10.107) - Bootlin
https://elixir.bootlin.com/linux/v3.10.107/source/include/net/tcp.h#L136
以上就是关于pos机交易超时,Go 验证 TCP SYN 超时重传机制的知识,后面我们会继续为大家整理关于pos机交易超时的知识,希望能够帮助到大家!
关键词:腾讯乐刷pos机 押金
很赞哦!(5331)
相关文章
- 如何在官网免费申请POS机?个人申请乐刷收银通POS机怎么办理 - 深圳POS机办理中心
- 工行收款码申请费率高吗,如何降低费用?-深圳市万财网络有限公司
- 个人营销收款码申请流程及注意事项-深圳市万财网络有限公司
- 怎么申请开通微信收款码教程及步骤-深圳市万财网络有限公司
- 乐刷收银通POS机推销员刷一万提成几块,揭秘高额提成背后的秘密 - 深圳POS机办理中心
- 微信收款码怎么申请并使用播报器功能?-深圳市万财网络有限公司
- 如何在微信上快速办理收款码-深圳市万财网络有限公司
- 怎样领取微信收款码并开始收款?-深圳市万财网络有限公司
- 深圳POS机办理中心联系方式全面解析 - 深圳POS机办理中心
- 微信收款码申请和打印有什么区别?-深圳市万财网络有限公司
热门文章
- 盛付通乐刷收银通个人POS机无法链接网络问题解析 - 深圳POS机办理中心
- 支付宝里的收款码怎么申请和使用?-深圳市万财网络有限公司
- 申请微信对公收款二维码需要哪些步骤?-深圳市万财网络有限公司
- 微信扫码枪收款怎么操作?-深圳市万财网络有限公司
- 银联正规POS机免费领取官网及申请办理乐刷收银通POS机官网入口 - 深圳POS机办理中心
- 电脑如何查看并扫描微信收款码?-深圳市万财网络有限公司
- 如何自制专属微信收款码图片,让收款更简单易懂-深圳市万财网络有限公司
- 怎样领取微信收款码并开始收款?-深圳市万财网络有限公司
- 个人免费乐刷收银通pos机推荐品牌? - 深圳POS机办理中心
- 如何在微信上申请收款二维码,轻松实现收款-深圳市万财网络有限公司
热门视频
- http://www.yypos.cn/pos/74753.html
- https://www.tcpos.cn/banpos/8221.html
- https://www.ggpos.cn/5541.html
- https://www.zypos.cn/63819.html
- http://www.yypos.cn/pos/2684.html
- https://www.zypos.cn/638.html
- https://www.vbz.cc/4878.html
- https://www.zypos.cn/2796.html
- https://www.ggpos.cn/248.html
- https://www.vbz.cc/65217.html
站长推荐
全国POS机办理网点
最新标签
- 乐清pos机办理需要什么资料
- 海原县pos机办理需要注意什么
- 罗田县pos机办理需要什么资料
- 泊头pos机办理需要注意什么
- 米林县pos机正规办理方法
- 阿图什pos机办理需要多少钱
- 曲阳县pos机办理需要多少钱
- 丰镇pos机办理需要注意什么
- 金口河区pos机办理需要什么资料
- 乌达区pos机办理需要什么资料
- 崂山区pos机正规办理方法
- 芜湖县pos机代理
- 东营pos机办理需要注意什么
- 罗田县pos机办理需要什么资料
- 宿州pos机代理
- 广饶县pos机办理需要注意什么
- 原州区pos机办理需要注意什么
- 左贡县pos机办理需要注意什么
- 容城县pos机代理
- 巴塘县pos机办理需要什么资料
- 长安县pos机正规办理方法
- 崇义县pos机办理需要什么资料
- 凤冈县pos机代理
- 掇刀区pos机办理需要什么资料
- 龙口pos机办理需要注意什么
- 五华县pos机办理需要多少钱
- 宿州pos机代理
- 济南pos机正规办理方法
- 怀安县pos机正规办理方法
- 桦川县pos机办理需要什么资料