天猫入驻网站建设,vps做自己的网站,平面设计网站导航,seo推广联系方式来源#xff1a;伯乐在线专栏作者 - MrPeak 链接#xff1a;http://ios.jobbole.com/86580/ 苹果从2016年6月1号开始#xff0c;强制所有app必须支持纯IPv6的网络环境。这项举措将对IPv6的普及起到一定的推动作用#xff0c;也体现了Apple作为国际大厂的担当。 大部分App由… 来源伯乐在线专栏作者 - MrPeak 链接http://ios.jobbole.com/86580/ 苹果从2016年6月1号开始强制所有app必须支持纯IPv6的网络环境。这项举措将对IPv6的普及起到一定的推动作用也体现了Apple作为国际大厂的担当。 大部分App由于使用的是高层API并不需要做任何的更改就能自然度过这次IPv6的考核只是对于少部分手写IPv4地址连server的同学生活有一点点影响。 请好好学习TCP/IP协议 每次苹果对技术的推动都是一次很好的充电学习机会。这里Peak君拜托大家务必好好学习网络协议深鞠躬。 之前Apple默认开启ATS推动HTTPS的使用ATS可以手动关闭但据说到2017年所有的HTTP流量都必须带S了不然无法通过审核。这很make sense我知道到HTTPS部署已经变得相当简易的今天还有很多很多的App在侥幸走HTTP。 再后来有Apple将APN悄悄过渡到了HTTP2.0通道HTTP2.0慢慢地走入寻常百姓家。 这次IPv6的推进是一次对IP layer的复习机会。大部分人包括我自己对HTTPTCP相对熟悉一些IP层由于项目当中接触少更多还是停留在大学学习的基础概念上。这次趁着Apple的这股东风好好翻了几篇RFC文档画了一张下面的图也同时把公司App的socket迁移方案理顺了。这当中最重要的两个概念是DNS64和NAT64。 DNS64 DNS64说白了是用来帮助host获取IPv6地址的传统的DNS服务器可以把域名转换成IPv4地址但我们的iPhone设备如果处于IPv6环境下只能去获取IPv6的地址。DNS64就像一个中间代理把传统服务器返回的IPv4地址通过特殊的映射方式转换成一个看着像IPv6地址的地址IPv4的核IPv6的壳转换其实很简单用公式可以这样表达 64:ff9b::IPv4 IPv6 NAT64 DNS64帮助拿到IPv6的地址后接下来就是NAT64登场帮助IPv6的Packet顺利接入IPv4的公网当中。IPv4的公网环境路由器只认识IPv4的地址所有这里当然也需要一个中间设备来做协议转换。NAT64就扮演这个角色。 我在上面的流程图当中已经比较清晰的画出了NAT64的工作方式。其实就是内部同时有IPv4和IPv6的网卡IPv4的网卡配了一个IPv4的地址池子再通过端口映射的方式将IPv4地址和IPv6地址对应同时再做一些协议的转换毕竟IPv4和IPv6的header完全不同。说白了就是一个内部路由的功能将奔向IPv4公网的包做了地址和协议的转换。 一个深坑 博主公司所做的App就属于Apple重点点名手写IPv4地址的典型。socket迁移过程当中踩了一个不大不小的坑在尝试使用DNS64服务器将IPv4地址转换成IPv6地址的过程当中发现数字端口号会导致奇异bug。 getaddrinfo(ipv4_str, (port).stringValue.UTF8String, hints, res0); 我们一般使用getaddrinfo函数来解析host如果端口号部分的入参是数字类型会导致返回的结果里端口号被修改当然socket就没法连成功啦。修改办法是在DNS query结果里手动将端口号再改回。 另一个办法是跳过DNS查询直接自己将IPv4的地址转化成IPv6的地址。类似这样 const char* ipv4mapped_str 64:ff9b::121.43.xx.xxx; 视频教程 加上之前录制的Xcode视频教程这是第二篇视频博客应该也是最后一篇。视频教程确实不太适合做零散的技术博客分享而更适合系统性的技术教程。 一是因为广告长到令人发指90s的广告足以磨掉大部分人的耐心何况等待的是一篇并不怎么有趣的技术教程。 二是因为视频不如文字精炼容易把话说得又臭又长我个人看别人技术博客也习惯一目十行的搜索感兴趣要点视频只能靠拖进度条远不如文字大纲了然。 至此也是一次有趣的尝试收获了iMoviekeynote等高端技能以后说不定哪天能派上更有价值的用场。