iOS总结-网络DNS

参考: https://github.com/ChenYilong/iOSBlog/blob/master/Tips/基于Websocket的IM即时通讯技术/防%20DNS%20污染方案.md
https://www.jianshu.com/p/cd4c1bf1fd5f

有关DNS劫持和DNS污染区分

DNS解析:计算机会向我们的运营商(电信、移动、联通)发出网络请求,运营商收到请求后会到自己的DNS服务器中找域名对应的服务器的IP地址。
DNS劫持:是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网站不能访问或访问的假网址。
症状:在某些地区的用户在成功连接宽带后,首次打开任何页面都指向垃圾广告的内容页面,这属于DNS劫持
DNS污染:是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存攻击。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器。
DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。
症状:目前一些被禁止访问的网站如Facebook等都是通过DNS污染来实现的
有关iOS网络请求优化之DNS映射

降低DNS请求带来的延迟
  客户端app请求第一步都是DNS解析,解析请求根据当时网络情况不同,各平台的DNS缓存策略差异等因素,对移动端app整体网络性能会产生影响。由于cache存在使得大部分的解析请求并不会产生任何延迟。但iOS系统一般是24之后会过期,还有进入飞行模式再切回来,开关机,重置网络设置等也会导致DNS cache的清除。所有一般情况下用户在第二天打开你的app都会经历一次完整的DNS解析请求。如果能直接跳过DNS解析这一步,当然能提升网络性能。
预防DNS劫持
 客户端自己做DNS与ip地址的映射来跨过解析,让劫持在无从下手。
服务器动态部署
DNS映射实际是模拟了DNS请求的解析行为。如果客户端将自己的位置信息如ip地址,国家码等加入映射文件的请求参数中,服务器就可以根据客户端所处的位置不同,下发距离其物理位置最近的server ip地址,从而减少整体网络请求的延迟,实现一定程度的服务器动态部署。
DNS解析请求简单来说,输入一个域名,输出一个ip地址。做自己的映射机制也就是客户端本地维护一个映射文件,需要从服务器更新,需满足以下条件:
     一个打包到app包里面的默认映射文件,这样可以避免第一次去服务器取配置文件带来的延迟
     有一个定时器每隔一段时间从服务器获取最新的映射(或者通过socket长连接通道在需要更新时push),覆盖本地
     每次取得最新的,把上一次的映射文件保存作为替补,一旦出现线上配置失误不至于导致请求无法处理
     映射文件不能处理域名,能回滚
     如果一个映射过后的ip持续导致请求失败,需要一个无效映射淘汰机制
     无效ip地址及时上报服务器,及时发现问题更新映射文件

     HTTPS与DNS劫持

     HTTPS也会存在DNS劫持问题,HTTPS从身份认证、内容加密、防止篡改三个方面来保证网络安全,但是DNS解析是网络请求的第一个步骤,完整步骤是DNS解析->TCP解析->TLS握手->Request->Response,所以HTTPS对DNS劫持无能为力,但是可以通过客户端身份认证来避免被塞广告等状况发生,被劫持后直接访问失败。
IP直连
 HTTPS网络下我们会对服务器的身份进行认证,就拿AF来说,三种身份认证的可选方案:
         AFSSLPinningModeNone(Default)/ AFSSLPinningModePublicKey/ AFSSLPinningModeCertificate
  AFSSLPinningModePublicKey代表客户端会将服务器返回的证书和本地保存的证书中的publicKey部分进行自主校验
  AFSSLPinningModeCertificate代表客户端会将服务器端返回的证书和本地保存的证书的所有内容,包括PublicKey和证书部分全部进行自主校验,如果校验成功,才继续进行系统验证等后续行为.
  

发布了36 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_28551705/article/details/85716051