美文网首页
移植IPv4程序到IPv6修改点

移植IPv4程序到IPv6修改点

作者: jernen | 来源:发表于2019-08-19 19:45 被阅读0次

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 来替换。

相关文章

  • 移植IPv4程序到IPv6修改点

    1、什么是IPv6 IPv6即Internet Protocol Version 6,是互联网协议的第六版,是下一...

  • 一文读懂 IPv4 到 IPv6 的过渡技术

    在介绍 IPv4 到 IPv6 过渡技术之前,我们先来简单了解一下 IPv4 和 IPv6。什么是 IPv4?IP...

  • IPv6

    IPv6是搞网络的不可绕过的一个门槛,如今已经处于IPv4到IPv6的过渡时期,IPv6比IPv4更安全,配置更简...

  • 用上下文协议写一个tcp连接

    ipv4 版 ipv6版

  • iOS ipv4和ipv6

    IPv6的网络下,API 中直接使用 IPv4为什么不通?? 首先IPv6网络下只能访问IPv6站点,IPv4下只...

  • Internet地址结构

    IPv4 & IPv6 表示 IP 地址有两种标准:IP版本4 (IPv4) 和 IP版本6 (IPv6)。所有有...

  • IPv4到IPv6的转换技术:IPv6和IPv4对比,IPv6有

    IPv4到IPv6的转换技术主要是解决IPv4地址枯竭但IPv6地址还没有广泛应用的问题。截止2011年2月3日,...

  • IPv6地址

    前言 常用的IP协议版本有IPv4和IPv6,前面介绍了IPv4地址,本文介绍IPv6地址。IPv6是为了解决32...

  • 搭建IPV6测试环境

    搭建环境前先对IPv4 和 IPv6有个大致了解: IPv4 和 IPv6的直观区别就是 IP 地址前者是 .(d...

  • 传输层协议:TCP和UDP

    传输层:TCP和UDP 使用IPv4和IPv6的应用程序 平时我们使用的tcpdump、ping、tracerou...

网友评论

      本文标题:移植IPv4程序到IPv6修改点

      本文链接:https://www.haomeiwen.com/subject/qumesctx.html