iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >IPv6的NAT原理是什么
  • 383
分享到

IPv6的NAT原理是什么

2023-06-03 18:06:31 383人浏览 独家记忆
摘要

IPv6的NAT原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在亿万互联网用户享受着Internet带来便利的同时,IPv4地址即将耗尽的问题却早在20年前就被网

IPv6的NAT原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在亿万互联网用户享受着Internet带来便利的同时,IPv4地址即将耗尽的问题却早在20年前就被网络专家们意识到了,并采取了措施延缓IPv4的消耗,这项措施就是NAT(网络地址转换)技术。NAT主要作用在于节约IP地址,而非所谓的增加IP的方向性以及隐藏私有IP,且IPv4的NAT打破了互联网本身的“互联”特性,使得一部分IP地址不再双向可达,NAT为无方向的IP协议增加了一个方向,特别是stateful的NAT类型。此时,IPv6时代已逐渐到来。

而IPv6的标准中不建议使用NAT,这是何缘由呢?我们已知IPv6地址数量巨大,只要在地球上,都可为蚂蚁配置IP设备,因此IPv4的一些修补手段将不再需要,为了保持协议本身以及相关标准的纯洁性,在IPv6中几乎不再建议使用NAT。虽然不再建议使用,但在某些必要情况下,还是可能需要实现IPv6的NAT。在RFC6296的标题是IPv6-to-IPv6 Network Prefix Translation中,描述了IPv6下的NAT的实现要点,给出了一个合理的建议,既保持了IP的无方向性,又可以满足NAT的语义,这就是IPv6之NAT stateless的缘由。

IPv6地址有将近128个可随意调配的位,其庞大的地址空间,一般的单位都会被分配到一个拥有很大量地址的网段,此网段拥有足够多的地址来和内网主机进行映射,即可用于映射的IP地址池容量巨大,且既然不想再使用非IP层的信息来保持信息,又要保持映射,那就要用纯IP层的信息,这样对上层影响最小。对于IPv6而言,NAT利用checksum算法来保持流标识信息,丝毫不管这个checksum是谁的checksum,因为它根本就不改变数据包的checksum...

接下来给大家讲解一下checksum无关性和自动转换,就是考虑a+b+c+d=X。其中X就是checksum,我们把a,b当成源IP地址的两部分,c,d当成目的IP地址的两部分,我们作源地址转换,将a和b都改变,比如a改变成了A,那么将b改成多少才能保持checksum的值X不变,求解即可。IPv6的建议NAT实现亦是上文这个原理,只是将其换为计算机布尔数域求解。既然可以不触动第四层的checksum值,那么NAT对第四层协议的影响也就减小了,虽然它还是解决不了诸如ESP/AH等穿越NAT的问题。基于以上算法,IPv6在做NAT的时候,在给定的子网网段内,可以自动生成一个新的IP地址供映射之用,从算法本身来看,冲突的可能性非常之小致于0。

既然IPv6的NAT机制“自动”为一个连接选择了一个IP地址,那么当返回包到来的时候,如何把地址转换为原地址呢?IPv6的NAT把地址“转换回去”这件事完全靠算法本身,而算法本身就能将转换后的地址再转回原来的,具有解的唯一性,在IPv6的NAT实现中,算法只针对IP地址中16位的地址信息进行自动生成,而其它的则需要手工显式配置,由于内网IPv6地址可以使用Mac地址映射成唯一的地址,且转换后的地址是唯一的,将这一切反过来,最后还是能映射回原始的IP地址的。

如果抛开地址转换这一说,仅仅考虑算法本身,那还是可以给出一个实际可以运行的代码的,该代码使用了计算checksum的算法:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//以下2个函数就是计算校验码的,具体的原理请参RFC1071/RFC1624/RFC1141。

static inline u_int16_t add16(

    u_int16_t a,

    u_int16_t b)

{

    a += b;

    return a + (a < b);

}

static inline u_int16_t csum16(const u_int16_t *buf, int len)

{

    u_int16_t csum = 0;

    while(len--) csum = add16(csum, *buf++);

    return csum;

}

int main(int arGC, char **argv)

{

    u_int16_t buf[18] = {0};

    int i = 0;

    memcpy(buf, "efghhijk", 8);

    memcpy(buf+4, "12345678", 8);

    memcpy(buf+8, "xxyywert", 8);

    memcpy(buf+12, "zxcvkljh", 8);

    //正确做法是打印16进制数据,此处为了简单,打印了字符串

    printf("原始数据:%s  长度:%d\n", (char*)buf, strlen((char*)buf));    

    printf("原始数据的校验码:%X\n", csum16(buf, 16));    

    u_int16_t tip[3] = {0};

    memcpy(tip, "#$!%", 4);

    u_int16_t tip_sum = csum16(tip, 2);

    printf("\nNAT规则: efghhijk1234/12 -〉efghhijk#$!%/12\n\n");

    printf("固定从第9个字节开始修改4个字节为:%s 其校验码为:%X\n", (char*)tip, tip_sum);

    //定位固定修改后的动态修改的初始地址,注意,我们仅仅修改16位信息

    u_int16_t* pcsum = buf + 4+2;  

    //计算动态修改的值

    *pcsum = ~add16(

        add16(

            ~(*pcsum),

            ~csum16(buf+4, 2)

        ),

        tip_sum

    );

    printf("动态修改的值为:%X\n", *pcsum);

    memcpy(buf+4, tip, 4); //完成修改

    printf("当前数据:%s  长度:%d\n", buf, strlen((char*)buf));    

    printf("当前校验码:%X\n", csum16(buf, 16));    

    printf("-------------以下是还原操作-------------\n");

    printf("\n反向NAT规则: efghhijk#$!%/12 -〉efghhijk1234/12\n\n");

    u_int16_t tip2[3] = {0};

        memcpy(tip2, "1234", 4);

    printf("我们只需要记住原始数据被固定修改前的:%s\n", tip2);

    u_int16_t tip_sum2 = csum16(tip2, 2);

    u_int16_t* pcsum2 = buf+6;

    *pcsum2 = ~add16(

        add16(

            ~(*pcsum2),

            ~csum16(buf+4, 2)

        ),

        tip_sum2

    );

    //还原

    memcpy(buf+4, tip2, 4);

    printf("原始数据:%s\n", (char *)buf);

    printf("原始校验码:%X\n", csum16(buf, 16));    

}

运行结果如下:

IPv6的NAT原理是什么

把以上的原理套用在IPv6的NAT上,就是一种实现。

关于IPv6的NAT原理是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: IPv6的NAT原理是什么

本文链接: https://www.lsjlt.com/news/235392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • IPv6的NAT原理是什么
    IPv6的NAT原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在亿万互联网用户享受着Internet带来便利的同时,IPv4地址即将耗尽的问题却早在20年前就被网...
    99+
    2023-06-03
  • NAT的原理与类型,静态NAT、动态NAT
    目录 NAT产生背景 NAT概述 NAT工作原理 NAT类型 静态NAT配置 动态NAT  端口NAT(PAT) EasyIP-最简单的PAT NAT Server 外网访问内网WEB服务 外网访问内网FTP服务  外部远程管理交换机SW1...
    99+
    2023-08-31
    网络 服务器
  • 什么是NAT?
    NAT技术是用来解决当今IP地址资源枯竭的一种技术。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。当在专用网内部的一些主机本来已经分配到了本地IP地址,但现在又想和因特网上的主机通信时,即可使用NAT技术。...
    99+
    2024-04-02
  • ipv6是什么
    今天小编给大家分享一下ipv6是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ipv6是什么意思答:ipv6是互联网协议...
    99+
    2023-07-02
  • 如何理解IPv6过渡技术中的NAT-PT技术
    这篇文章将为大家详细讲解有关如何理解IPv6过渡技术中的NAT-PT技术,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。       IPv6的应用是一...
    99+
    2023-06-03
  • ShutdownHook的原理是什么
    这篇文章主要讲解了“ShutdownHook的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ShutdownHook的原理是什么”吧!ShutdownHook介绍在java程序中,...
    99+
    2023-06-15
  • Elasticsearch的原理是什么
    本篇内容主要讲解“Elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!Lucene 和 ESLuceneLucene ...
    99+
    2023-06-16
  • java.util.Random的原理是什么
    这篇文章给大家介绍java.util.Random的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java.util.Random可以产生int、long、float、double以及Goussian等类型的...
    99+
    2023-05-31
    java.util.random ava %util
  • webservice的原理是什么
    Web服务的原理是通过使用HTTP协议进行通信,提供一组标准化的接口和方法,使不同的应用程序能够相互交互和通信。以下是Web服务的基...
    99+
    2024-02-29
    webservice
  • AOP的原理是什么
    这篇文章主要讲解了“AOP的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AOP的原理是什么”吧!AOP的原理对哪些对象在什么位置拦截做什么 <=> <aop:b...
    99+
    2023-06-03
  • JSONP的原理是什么
    JSONP的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是JSONP首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中...
    99+
    2023-06-14
  • CAS的原理是什么
    本篇内容介绍了“CAS的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在并发编程中我们都知道i++操作是非线程安全的,这是因为 i...
    99+
    2023-06-15
  • Drupal的原理是什么
    小编今天带大家了解Drupal的原理是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Drupal的原理是什么”的知识吧。Drup...
    99+
    2023-06-04
  • redis的原理是什么
    redis 是一款内存数据库,使用单线程架构和复杂的数据结构,实现了高性能和可扩展性。它支持数据持久化和复制,以确保数据安全性和可用性。 Redis 的原理 Redis 是一款开源的高...
    99+
    2024-04-20
    redis 数据丢失 键值对
  • JavaScript原型链的原理是什么
    这篇文章主要讲解了“JavaScript原型链的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型链的原理是什么”吧!解析原型...
    99+
    2024-04-02
  • HTTP代理的原理是什么
    这篇文章主要讲解了“HTTP代理的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP代理的原理是什么”吧!这种情况在爬行动物的制作过程中经常发生。一开始,爬行动物正常工作,数据...
    99+
    2023-06-20
  • Golang原生rpc的原理是什么
    这篇文章主要讲解了“Golang原生rpc的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang原生rpc的原理是什么”吧!创建rpc接口,需要几个条件方法的类型是可输出的方...
    99+
    2023-06-29
  • React Props的原理是什么
    本篇文章为大家展示了React Props的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。props理解props 是 React 组件通信最重要的手段props:对于在 Rea...
    99+
    2023-06-26
  • Vue.$nextTick的原理是什么
    这篇文章主要介绍了Vue.$nextTick的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue.$nextTick的原理是什么文章都会有所收获,下面我们一起来看看吧。Vue中DOM更新机制当你气势...
    99+
    2023-07-05
  • python gevent的原理是什么
    这篇“python gevent的原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python gevent的原理是...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作