移植IPv4程序到IPv6修改点

1、什么是IPv6

IPv6即Internet Protocol Version 6,是互联网协议的第六版,是下一代互联网开始的标志。IPv6采用128位地址长度,其地址数量总数可达2的128次方个。可以这样说使用IPv6后,地球上的每一粒沙子都可以拥有一个IP地址。IPv6地址和IPv4地址格式上有所不同,IPv6有8个字段,每个字段用":"分隔,完整的IPv6地址如:2400:A480:aaaa:400:a1:b2:c3:d4。

2、 IPv6相对于IPv4有哪些较为显著的优势

相对于IPv4,IPv6有如下一些显著的优势:
(1)地址容量大大扩展,由原来的32位扩充到128位,彻底解决IPv4地址不足的问题;支持分层地址结构,从而更易于寻址;扩展支持组播和任意播地址,这使得数据包可以发送给任何一个或一组节点;

(2)大容量的地址空间能够真正的实现无状态地址自动配置,使IPv6终端能够快速连接到网络上,无需人工配置,实现了真正的即插即用;

(3)报头格式大大简化,从而有效减少路由器或交换机对报头的处理开销,这对设计硬件报头处理的路由器或交换机十分有利;

(4)加强了对扩展报头和选项部分的支持,这除了让转发更为有效外,还对将来网络加载新的应用提供了充分的支持;

(5)流标签的使用让我们可以为数据包所属类型提供个性化的网络服务,并有效保障相关业务的服务质量;

(6)认证与私密性:IPv6把IPSec作为必备协议,保证了网络层端到端通信的完整性和机密性;

(7)IPv6在移动网络和实时通信方面有很多改进。特别地,不像IPv4,IPv6具备强大的自动配置能力从而简化了移动主机和局域网的系统管理。

3、网关设备支持IPv6的必要性

据工信部网站消息,工信部2019年4月16日印发《关于开展2019年IPv6网络就绪专项行动的通知》(以下简称《通知》)。《通知》内提到,新部署的家庭网关设备应全部支持IPv6,并默认配置支持IPv4/IPv6双栈,能够为网关下挂设备分配IPv6地址;到2019年末,完成70%存量智能家庭网关的IPv6升级。其中涉及到的企业包括TP-LINK、D-LINK、华为、腾达、华硕、网件、小米等,新生产的家庭路由器应支持IPv6,并向存量家庭路由器设备推送支持IPv6的固件版本。

4、移植IPv4程序到IPv6的修改点

  1. 修改那些允许IPV4和IPV6兼容性的结构体和定义。首先,请试着用 getaddrinfo() 来取得 struct sockaddr 的资料,取代手动填写这个数据结构。这样你就可以不用管 IP 的版本,而且能省略之后很多步骤。

  2. 找出全部与 IP 版本相关的任何代码,试着用一个有用的函数将它们包起来(wrap up)。

  3. 将 AF_INET 更改为 AF_INET6。

  4. 将 PF_INET 更改为 PF_INET6。

  5. 将 INADDR_ANY 更改为 in6addr_any,这里有点不太一样:

struct sockaddr_in sa;
struct sockaddr_in6 sa6;
sa.sin_addr.s_addr = INADDR_ANY;   // 使用我的 IPv4 地址
sa6.sin6_addr = in6addr_any;  // 使用我的 IPv6 地址

还有,在宣告 struct in6_addr 时,IN6ADDR_ANY_INIT 的值可以做为初始值,像这样:

struct in6_addr ia6 = IN6ADDR_ANY_INIT;
  1. 使用 struct sockaddr_in6 取代 struct sockaddr_in,确定要将"6"新增到适当的栏位[参考上面的 struct],但没有 sin6_zero 栏位。

  2. 使用 struct in6_addr 取代 struct in_addr,要确定有将"6"新增到适当的栏位[参考上面的struct]。

  3. 将“点分十进制” -> “网络二进制整数”, 使用 inet_pton() 替换 inet_aton() 或 inet_addr()。

  4. 将“网络二进制整数” -> “点分十进制” 使用 inet_ntop() 替换 inet_ntoa()。

  5. 使用功能更强大的 getaddrinfo() 取代 gethostbyname()。

  6. 使用功能更强大的 getnameinfo() 取代 gethostbyaddr()[虽然 gethostbyaddr()在 IPv6 中也能正常运作]。

  7. 不要用 INADDR_BROADCAST 了,请多使用 IPv6 multicast 来替换。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 研究IPv6 socket编程原因: Supporting IPv6 in iOS 9 WWDC2015苹果宣布在...
    li大鹏阅读 7,316评论 7 15
  • 推荐 最近很多人都在关注支持 IPv6 的事情吧?我们公司也是。也有不少同行使用了我们的 YTKNetwork 网...
    笨笨的考拉_2阅读 2,440评论 2 9
  • 由于在应用中使用了网络诊断的组件,大量使用了底层的 socket API,所以对于IPV6支持,这块是个重头戏。如...
    大码猴阅读 7,704评论 1 4
  • 我们的眼睛总是轻易就能看见别人的过错,发现存在于他们身上的弱点,指出应该改变的地方以及包括如何做能变得更好的办法。...
    絮絮记阅读 193评论 0 5
  • 老家,你其实很美的啊。只是居住在这里的人们渐渐的,就会忘却掉你的美。 每当我从外面回来的时候,一进村子里,我便又会...
    许一世沈一辰阅读 209评论 0 1