纯IPv6环境App适配的坑

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看237 回复回复4 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 237|回复: 4
收起左侧

纯IPv6环境App适配的坑

[复制链接]
攻城狮 发表于 2016-7-20 12:36:37 | 显示全部楼层 |阅读模式
快来登录
获取最新的苹果动态资讯
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
苹果从2016年6月1号开始,强制所有app必须支持纯IPv6的网络环境。这项举措将对IPv6的普及起到一定的推动作用,也体现了Apple作为国际大厂的担当。

大部分App由于使用的是高层API,并不需要做任何的更改就能自然度过这次IPv6的考核,只是对于少部分手写IPv4地址连server的同学,生活有一点点影响。




1、请好好学习TCP/IP协议

每次苹果对技术的推动,都是一次很好的充电学习机会。这里拜托大家务必好好学习网络协议(深鞠躬)。

之前Apple默认开启ATS,推动HTTPS的使用,ATS可以手动关闭,但据说到2017年所有的HTTP流量都必须带S了,不然无法通过审核。这很make sense,我知道到HTTPS部署已经变得相当简易的今天,还有很多很多的App在侥幸走HTTP。

再后来有Apple将APN悄悄过渡到了HTTP2.0通道,HTTP2.0慢慢地走入寻常百姓家。

这次IPv6的推进,是一次对IP layer的复习机会。大部分人包括我自己对HTTP,TCP相对熟悉一些,IP层由于项目当中接触少,更多还是停留在大学学习的基础概念上。这次趁着Apple的这股东风,好好翻了几篇RFC文档,画了一张下面的图,也同时把公司App的socket迁移方案理顺了。这当中最重要的两个概念是DNS64和NAT64。

纯IPv6环境App适配的坑

纯IPv6环境App适配的坑 - 敏捷大拇指 - 纯IPv6环境App适配的坑

IPv6.001




2、DNS64

DNS64说白了是用来帮助host获取IPv6地址的,传统的DNS服务器可以把域名转换成IPv4地址,但我们的iPhone设备如果处于IPv6环境下,只能去获取IPv6的地址。DNS64就像一个中间代理,把传统服务器返回的IPv4地址通过特殊的映射方式转换成一个看着像IPv6地址的地址(IPv4的核,IPv6的壳),转换其实很简单,用公式可以这样表达:

[Swift] 纯文本查看 复制代码
64:ff9b::IPv4 = IPv6





3、NAT64

DNS64帮助拿到IPv6的地址后,接下来就是NAT64登场,帮助IPv6的Packet顺利接入IPv4的公网当中。IPv4的公网环境路由器只认识IPv4的地址,所有这里当然也需要一个中间设备来做协议转换。NAT64就扮演这个角色。

我在上面的流程图当中已经比较清晰的画出了NAT64的工作方式。其实就是内部同时有IPv4和IPv6的网卡,IPv4的网卡配了一个IPv4的地址池子,再通过端口映射的方式将IPv4地址和IPv6地址对应,同时再做一些协议的转换,毕竟IPv4和IPv6的header完全不同。说白了就是一个内部路由的功能,将奔向IPv4公网的包做了地址和协议的转换。




4、一个深坑

博主公司所做的App就属于Apple重点点名,手写IPv4地址的典型。socket迁移过程当中踩了一个不大不小的坑,在尝试使用DNS64服务器将IPv4地址转换成IPv6地址的过程当中,发现数字端口号会导致奇异bug。

[Objective-C] 纯文本查看 复制代码
getaddrinfo(ipv4_str, @(port).stringValue.UTF8String, &hints, &res0);


我们一般使用getaddrinfo函数来解析host,如果端口号部分的入参是数字类型,会导致返回的结果里端口号被修改,当然socket就没法连成功啦。修改办法是在DNS query结果里手动将端口号再改回。

另一个办法是跳过DNS查询,直接自己将IPv4的地址转化成IPv6的地址。类似这样:

[Objective-C] 纯文本查看 复制代码
const char* ipv4mapped_str ="64:ff9b::121.43.xx.xxx";





5、视频教程

加上之前录制的Xcode视频教程,这是第二篇视频博客,应该也是最后一篇。视频教程确实不太适合做零散的技术博客分享,而更适合系统性的技术教程。

一是因为广告长到令人发指,90s的广告足以磨掉大部分人的耐心,何况等待的是一篇并不怎么有趣的技术教程。

二是因为视频不如文字精炼,容易把话说得又臭又长,我个人看别人技术博客也习惯一目十行的搜索感兴趣要点,视频只能靠拖进度条,远不如文字大纲了然。

至此也是一次有趣的尝试,收获了iMovie,keynote等高端技能,以后说不定哪天能派上更有价值的用场。




作者:MrPeak


都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 收起 理由
Anewczs + 10 推送上首页了~分享到朋友圈微博QQ空间吧~.

查看全部评分

swifter 发表于 2016-7-20 17:01:53 | 显示全部楼层
是Swift开发者都要踩的,想到这,我心里就平衡多了
rightnow 发表于 2016-7-22 17:24:13 | 显示全部楼层
IP真不够用了,尤其是来了一大波智能硬件
大秘小蜜 发表于 2016-9-8 16:51:41 | 显示全部楼层
IPv6是为了更好的支持物联网,

v4让人上网,后来那帮智能硬件 囔囔着也要上网,就有了 v6

我这解释666666吧~
cocoaswift 发表于 2016-10-19 11:46:11 | 显示全部楼层
大秘小蜜 发表于 2016-9-8 16:51
IPv6是为了更好的支持物联网,

v4让人上网,后来那帮智能硬件 囔囔着也要上网,就有了 v6

服你了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表