IPv6应用

国家要求2018年底一部分地区可以用上IPv6,到2020年,基本普及IPv6,到2025年,全面支持IPv6。
一、IPv6与IPv4的区别主要有以下几点:
1.IPv6的地址空间更大。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说就是,如果IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。
2.IPv6的路由表更小。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
3.IPv6的组播支持以及对流的支持增强。这使得网络上的多媒体应用有了长足发展的机会,为服务质量控制提供了良好的网络平台。
4.IPv6加入了对自动配置的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
5.IPv6具有更高的安全性。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全。

二、IPv6的不足:
1、IPv6的报文头部固定长度是40字节,是IPv4报文头部长度的两倍,如果有扩展头,最多可达120字节,这意味着在IPv6网络中,每转发一个IPv6报文,都需要携带一个IPv6报文头。单位长度内可传递的数据就少了。所以在相同的网络环境中,IPv6的数据传输效率是下降的,要为IPv6多做一些预留才行,最好在IPv6部署的时候增加一定网络带宽。
2、兼容性问题。IPv6开发人员承认,IPv6的最大失误在于没有提供对IPv4的向后兼容性,IPv6与IPv4是完全不同的两张网络。虽然后来设计了IPv4和IPv6两网融合技术如采用双栈和隧道机制,但这样不仅部署起来网络变得异常复杂,还带来了更多安全隐患。
3、安全性问题。IPv4的网络安全问题就较多,但IPv6在被设计为标准时,安全问题还不那么突出,所以IPv6虽然增加了安全方面的考虑设计,但并不完善。同时,因为IPv6全新的网络协议设计又带来了新的安全问题,这些在设计之初并没有充分考虑到,这使得IPv6面临的安全威胁比IPv4时代还要严重。
IPv6在实际应用中还有“天窗”的问题,就是当网页包含其它网站内容的链接,即使采取双栈技术路线,但被引用的其它网站未升级,IPv6用户访问该网站时会出现响应缓慢,部分内容无法显示,部分功能无法使用等情况。IPv6地址过长,不好记忆,实际是根本无法很好地记忆。IPv6的地址是海量的,实际分配给我国的并不多,中国拥有占世界20%的人口,却只分到IPv6地址的2%,比IPv4时好些,但依然不充裕。
三、IPv6表示方法
之前讲了,IPv6地址长度为128位,分成8段,每段4个字符,即X:X:X:X:X:X:X:X。直白的说,就是需要写32个
字母,这个长度,在表示方法上,就需要好好的研究一下了:
1、冒分十六进制表示法
例如,一个IPV6的的IP为:0021:0D11:0000:0023:0008:0800:200C:417A,这种表示法中,每个X的前导0是可
以省略的,即21:D11:0:23:8:800:200C:417A,这样无论在记忆IP地址录入IP都非常简便。
2、0位压缩表示法
有时候一个IPv6地址中问可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的
唯一性,地址中”::”只能出现一次,例如:FF01:0:0:0:0:0:0:1101 → FF01::1101、0:0:0:0:0:0:0:1 → ::1、
0:0:0:0:0:0:0:0 → ::
3、内嵌IPv4地址表示法
为了实现IPv4-IPv6互通,IPv4地址可以嵌入IPv6地址中,可以表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒
分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.200.2与::FFFF:192.168.200.2
就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。
注意:双冒号只能出现一次

四、IPv6常用命令
1、使用ifconfig指令,查看系统是否开启IPV6功能,如下:
 [root@PTZJ217 shell]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:13:0B:DA
          inet addr:10.120.152.217  Bcast:10.120.152.255  Mask:255.255.255.0
         
inet6 addr: fe80::20c:29ff:fe13:bda/64 Scope:Link
2、如未开启,则需修改/etc/sysctl.conf文件,在文件中将如下内容修改或者增加为“0”,然后执行sysctl -p命令
启用IPv6,之后再ifcofig查看,即可开启IPV6。
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
3、找到/etc/modprobe.d/disable_ipv6.conf配置文件,将如下信息改成“0”。
options ipv6 disable=0
4、找到/etc/sysconfig/network文件,将如下信息改成“yes”,然后重启service network restart。
NETWORKING_IPV6=YES
至此,设备就开启了IPV6功能。
5、配置IPV6地址,如图。
 

6、linux下添加默认路由。
ip -6 route add / via
ip -6 route add default via 2001:0db8:0:f101::1
route -A inet6 add / gw
route -A inet6 add default gw 2001:0db8:0:f101::1
7、查看路由
ip -6 route show
route -A 'inet6'
8、测试ipv6网络
 ping6  fe80::215:5dff:fe01:203%eth0
9、配置ipv6,无需重启
ip -6 addr add 2001:0db8:0:f101::5/64 dev eth0 或者 ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
10、移除IPv6地址:(不要用这个命令移除不存在的地址,较老的内核会因为不支持而挂掉)
ip -6 addr del fec0::6:55/112 dev eth1 或者 ifconfig eth1 inet6 del feco::6:55/112

五、支持IPv6应用改造
1、判断ip地址是ipv4还是ipv6方法
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IpUtil {
    private static String ipv4Regex = "^((25[0-5]|2[0-4]\\d|[0-1]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[0-1]?\\d\\d?)$";
    private static String ipv6Regex = "^([\\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^::([\\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:):([\\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){2}:([\\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){3}:([\\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){7}[\\da-fA-F]{1,4}$|^:((:[\\da-fA-F]{1,4}){1,6}|:)$|^[\\da-fA-F]{1,4}:((:[\\da-fA-F]{1,4}){1,5}|:)$|^([\\da-fA-F]{1,4}:){2}((:[\\da-fA-F]{1,4}){1,4}|:)$|^([\\da-fA-F]{1,4}:){3}((:[\\da-fA-F]{1,4}){1,3}|:)$|^([\\da-fA-F]{1,4}:){4}((:[\\da-fA-F]{1,4}){1,2}|:)$|^([\\da-fA-F]{1,4}:){5}:([\\da-fA-F]{1,4})?$|^([\\da-fA-F]{1,4}:){6}:$";
    public static Boolean isIPv4Address(String ip){
        Pattern pattern = Pattern.compile(ipv4Regex);
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    }
    
    public static Boolean isIPv6Address(String ip){
        Pattern pattern = Pattern.compile(ipv6Regex);
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    }
}

2、rest接口、activemq均是在原来的ip地址基础上加上[],如
String localIp = "[0:0:0:0:0:0:0:1]";
String ipAddress = InetAddress.getLocalHost().getHostAddress();
             
InetAddress inetAddress =InetAddress.getByName(ipAddress);            
if(inetAddress instanceof Inet4Address){
    localIp = "127.0.0.1";
}

3、jdbc支持ipv6的驱动
Mysql:
ipv4 Driver URL:  jdbc:mysql://127.0.0.1:3306/database 
ipv6 Driver URL:  jdbc:mysql://address=(protocol=tcp)(host=fe80::a00:27ff:fec3:87c7)(port=3306)/database 
连接localhost 的 URL:jdbc:mysql://address=(protocol=tcp)(host=::!)(port=3306)/database
驱动要求:jdbc连接驱动需要大于5.1.31以上,之前我没注意到这个问题,一直使用项目上统一的5.1.6,所以配置正确的情况下,tomcat启动后台会抛错,提示连接不到数据库端口,后来改为5.1.44解决报错问题。
Oracle:
ipv4 Driver URL: jdbc:oracle:thin:@//127.0.0.1:3306/orcl  
ipv6 Driver URL: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=[fe80::5cf:72])(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fnstdb1))) 
驱动要求:ojdbc14+
DB2:
ipv4 Driver URL:jdbc:db2://192.168.10.10:50000/sample 
ipv6 Driver URL:jdbc:db2://[fec0:ffff:ffff:8000:20e:cff:fe50:39c8]:50000/sample 
驱动要求:db2jcc4

SQLserver or sysbase:
ipv4 Driver URL: jdbc:jtds:sqlserver://127.0.0.1:1433/master 
ipv6 Driver URL: jdbc:jtds:sqlserver://
驱动要求:jtds1.2.4

PostgreSQL:
ipv4 Driver URL:jdbc:postgresql://192.168.10.10:50000/sample 
ipv6 Driver URL:jdbc:postgresql://[fec0:ffff:ffff:8000:20e:cff:fe50:39c8]:50000/sample 

赋予mysql支持ipv6
create user 'ipv6test'@'2001:0db8:0:f101::5' IDENTIFIED BY '123456';
赋权所有的GRANT ALL PRIVILEGES ON *.* TO 'ipv6test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
 

猜你喜欢

转载自blog.csdn.net/lanyue1/article/details/86128916