连接缓慢解决方法

Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo=0x168d9430 {NSErrorFailingURLStringKey=, NSErrorFailingURLKey=, NSLocalizedDescription=A server with the specified hostname could not be found., NSUnderlyingError=0x16840e10 "A server with the specified hostname could not be found.}

 ssh 连接缓慢解决方法

DNS的几个概念:

当iPhone将wifi的DNS设置为114.114.114.114时, 每过1~2小时,在请求服务器时就会出现以上错误, 由于这个错误, 苹果连续拒绝了我们的App两次,这个问题是DNS的域名解析错误, 安卓访问都没问题, 但是iPhone总会报这个错误,我用的AFNetworking3.1(这个问题和什么网络请求是没关系的), 和服务端也没什么关系, 以我目前的了解,和前端的关系也不大, 只是前端可以做一些补救措施.目前, 我做了以下的处理,App本周已成功上线了. 当你遇到-1003错误时,改用ip再访问一下服务器
 AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; session.requestSerializer = [AFJSONRequestSerializer serializer]; session.responseSerializer = [AFHTTPResponseSerializer serializer]; // 域名请求 NSString *urlStr = @"https://github.com/user/12345678"; [session GET:urlStr parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) { // nil } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // 域名请求成功, 处理数据 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // 域名请求失败 if (error.code == -1003) { // 找不到指定域名的主机, 通常为域名解析错误, 改为ip访问 NSString *ipUrl = @"https://192.23.59.136/user/12345678"; AFHTTPSessionManager *ipSession = [AFHTTPSessionManager manager]; ipSession.requestSerializer = [AFJSONRequestSerializer serializer]; ipSession.responseSerializer = [AFHTTPResponseSerializer serializer]; [ipSession GET:ipUrl parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { //nil } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // ip请求成功, 处理数据 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // ip请求失败 }]; } }];

总结: 遇到这个DNS的域名解析错误的问题时, 可以使用该方式绕过DNS的域名解析, 而直接使用ip访问,期待以后能有更加完善的解决方案, 能和大家多讨论,分享.

 

一、根域

“.”,即域名最后的“.”,浏览器输入一般都会省略。
根域服务器具有13个IP地址,但是机器数量却不是13台,这些IP地址借助了任播技术,我们可以在全球设立这些IP的镜像。

重新安装机器的情况下我们经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概

二、域的划分

根域下来就是顶级域或者一级域,如com.、net.、cn.、jp.等。
每个域都会有域名服务器,也叫权威域名服务器。权威域名服务器不做递归。

要等半分钟甚至更久。ping的速度也非常好,让人误以为是ssh连接不上。

三、域名服务器

域名服务器即能够提供域名解析的服务器,上面的记录类型可以是A(address)记录、NS(name server)记录、MX(mail)、CNAME等。

 

四、DNS查询模式

递归:A查询B,如果B找不到,那么就会B向C发起请求,直到找到请求,后将结果发送給A.
迭代:A查询B,如果B找不到,但是知道C有,那么告诉B的C服务器地址,让B去向C服务器发起请求。
递归查询:在该模式下,服务器接收到客户端DNS查询请求,必须响应一个准备的查询结果。如果DNS服务器本地没有存储查询DNS信息,会询问其他服务器,并将返回查询结果响应给客户端。
迭代查询:DNS服务器会向客户端响应本地能否解析的DNS服务器地址。如果DNS服务器本地没有存储查询DNS信息,会响应客户端另一个DNS服务器地址,客户端再向新的DNS服务器提交请求,依次循环直到返回查询结果。

  下面说下如何解决这样的问题,最为常见的原因是因为server的sshd会去DNS查找访问

五、DNS解析常用命令

client IP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。

host

host语法:
Host [option] [domain] [server]
选项支持:

  • -a:即-v -t Any
  • -c,指定查询class。
  • -d,即-v
  • -l,列出域名对应所有hosts,使用AXFR
  • -r,关闭递归
  • -t,指定查询记录类型
  • -T,TCP/IP模式
  • -v,打开verbose输出
  • -4,只使用IPv4传输
  • -6,只使用IPv6传输
  • -V,打印版本号

 

nslookup

nslookup [-option] [name] [server]
如果在nslookup后面没有加上任何主机或者ip,那将进入nslookup查询功能,可以设置其他参数,如
set type=any :查询所有类型记录。
set type=mx :查询mx记录

  1、在server上/etc/hosts文件中把你本机的ip和hostname加入

dig

dig(domain information groper):用于探测DNS,会打印出DNS name server的回应。
dig语法:dig [@server] domain [type]
域名解析:dig [@server] domain
反向解析:dig -x IP @server
查找域的授权dns服务器:dig domain nssearch
从根服务器追踪一个域名解析过程:dig domain trace

 

六、附录

  2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no,另外在authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no.

其他关键信息

DNS请求端口号默认53
/etc/hosts :记录hostname对应的ip地址(配置IP不符合规范则不生效)
/etc/resolv.conf :设置DNS服务器的ip地址
/etc/host.conf :指定域名解析的顺序(是从本地的hosts文件解析还是从DNS解析)

 

A记录与CNAME记录

A记录是把一个域名解析到一个IP地址,而CNAME记录是把域名解析到另外一个域名,而这个域名最终指向一个A记录,在功能实现上A记录与CNAME记录没有区别。
CNAME记录在做IP地址变更时比A记录方便。

3、修改server上/etc/nsswitch.conf中hosts为hosts: files

DNS域名解析中的域名记录

A记录:指向IPv4地址的记录。
CNAME记录:也叫别名记录,可以将多个记录映射到同一台计算机上。
MX记录:MX记录的权重对Mail服务很重要,发送邮件的时候,Mail服务器先对域名进行解析,查询mx记录,优先查找权重数最小的服务器。
TXT记录:一般是某条记录的设置说明,还可以用于验证域名的所有者。
AAAA记录:指向IPv6地址的记录。
NS记录:是域名服务器记录,用来指定域名由哪台服务器解析。
SRV记录:记录了哪台计算机提供了哪个服务,格式为:服务的名字.协议的类型。
SOA记录:起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中哪一台是主服务器。
TTL(time to live)值:表示记录在DNS服务器中的缓存时间,TTL的单位是秒,一般为3600秒。

 

  4、reboot server使配置生效

 

 /etc/init.d/sshd restart重启sshd进程使配置生效。

 

  

项目组的服务器,通过SSH服务远程访问Linux服务器,总是等待很久才能登陆。

 

试过下面的方法,再通过SSH服务远程访问Linux服务器,瞬间登陆。。。甚是开心。。。

 

vi /etc/ssh/sshd_config

 

关闭 SSH 的 DNS 反解析,添加下面一行:

 

UseDNS no

 

※虽然配置文件中[UseDNS yes]被注释点,

 

但默认开关就是yes...(SSH服务默认启用了DNS反向解析的功能)

 

#############################################################

 

 

上网查了相关的资料:↓

 

在目标服务器上有一个文件/etc/nsswitch.conf ,里面有如下一行

hosts: files dns

这行的含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。那如果将这一行屏蔽掉是不是也可以达到同样的效果呢?应该是可以的,但是如果本机要通过域名访问其他服务器,则肯定无法访问,因此这行应该需要保留。这个问题也提示我们,dns如果不可用,会带来的一些副作用的。

 

相信很多朋友在使用Linux系统的时候因为安全性的原因摒弃了telnet rlogin 或者X-window,而把openssh作为自己默认的远程登录方式。然而经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概要等半分钟甚至更久。ping的速度也非常好,让人误以为是ssh连接不上。下面说下如何解决这样的问题,最为常见的原因是因为server的sshd会去DNS查找访问clientIP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。

 

1, 在server上/etc/hosts文件中把你本机的ip和hostname加入

2, 在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no(这个方法试过了,好用)

3, 注释掉server上/etc/resolv.conf中所有行(关于这个方法:另一台服务器虽然没有按照方法2修改配置文件sshd_config,但是在这台服务器resolv.conf为空,也就是说这个方法也好用) 

4, 修改server上/etc/nsswitch.conf中hosts为hosts: files

5, reboot server使配置生效

 

本文由星彩网app下载发布于计算机编程,转载请注明出处:连接缓慢解决方法

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。