问题排查
- 遇到这个问题的时候首先想到排查网络是不是通的,对方SFTP是个域名,通过telnet该域名发现对方22端口是能连通的。
- 于是就陷入沉思了,是网络环境不是很好,导致当时连接不成功,于是找到系统工程师写了脚本,平均每30秒telnet一次,经过一晚上下来都是成功的,但是这个refused的问题依旧存在,并且时好时坏。
- 发现我们应用的VB项目是个报表项目,某些情况下会不停的开启数据库,我认为会不会是频繁开启关闭数据库,导致大量的TIME_WAIT状态的连接不能及时释放,于是又去监控了一晚上的TIME_WAIT状态,得到的结果是并没有大量该状态的连接,后来查了VB.NET里面默认是开启了数据库连接池的。
- 最后想到由于对方是域名的SFTP,并且这个问题时好时外,由于域名可以解析到多个IP,会不会是多个IP中某些IP网络被墙。于是通过nslookup查看,最后发现的确是这样。
问题解决
- 找到SFTP提供方,要求他们给出所有该域名下的IP地址,并添加白名单,对端回复这个IP列表有时会在他们的IP池里变动,所以我们加入了所有IP白名单后问题解决。