两台 aws 服务器,一个发起连接,一个接收连接。双方之间至少保持一个 tcp 连接。
出故障时 发起新连接端报 “ the network location cannot be reached ”错误。现存的连接报“ the specified network name is no longer available ”。整个网络完全中断,故障时任务管理器网络流量变成 0 。等进一分钟后网络连接恢复。
https://ww2.sinaimg.cn/large/413e37cagw1f41lvlb5pgj20ig02r750.jpg
接收方现存的连接报“ wsarecv: an existing connection was forcibly closed bu the remote host.”
由于故障出现随机,目前没有抓到包,只有日志。
软件是自己写的,建立连接用的
net.DialTimeout("tcp", RAddr, NEW_CONN_TIMEOUT * time.Second)
接收方是标准的新协程循环 c, e := ln.Accept() + go handlerConn(c) 。
很普通的 tcp 代码。
对了,还有一个奇怪的地方, tcp 发起端建立的连接经常读到“ the specified network name is no longer available ”错误,既不是读超时,也不是 EOF 。 正常情况下连接应该是长时间无数据读超时关闭或者是远端关闭,不应该碰到“ the specified network name is no longer available ”。 golang http 实现被人报告过这个问题, golang 解决办法是直接把他当作 EOF 来处理的... 复现 “ the specified network name is no longer available ” 的方法是直接强制关闭对端的程序,本端就会报“ the specified network name is no longer available ”。
从网络上搜索找不到答案,大家可以帮忙分析下断网是什么原因造成的吗? 个人感觉像是路由表出现了问题,才会出现“ the network location cannot be reached ”错误。应该是系统或网络出现了故障。但是无法确认,也无法解决...
1
zealic 2016-05-20 10:21:59 +08:00 1
两个实例是在一个 VPC 还是跨区域了
正常下同区域不会出现这个问题 目测你的系统是 Windows 检查下网络配置有没有问题或者是不是装了什么奇怪的软件。 |
2
gamexg OP @zealic 感谢。跨区域了,系统的确是 windows ,我提供的软件,已经建议对方换 aws 空白系统测试及联系 aws 。
|
3
SharkIng 2016-05-20 13:01:17 +08:00
我也遇到过这个问题 同 VPC Linux 系统,但是不是很常见,一个月一次甚至两个月一次吧。断网随机有时候半分钟就好了
|