1--IPv6编程基础篇《为何输入对方…
来源:互联网 发布:php当中的 k 编辑:程序博客网 时间:2024/05/22 08:13
***************************************************
作者:flash胜龙
***************************************************
IPv6地址举个例子,通常长成这样:fe80::4e0f:6eff:fed8:489a
但是大家会很好奇,在linux下用ifconfig查看地址的时候,为什么长成这样的:
=====================================================
wlan0 Linkencap:以太网 硬件地址4c:0f:6e:d8:48:9a
inet 地址:192.168.179.6广播:192.168.179.255掩码:255.255.255.0
inet6 地址:fe80::4e0f:6eff:fed8:489a/64Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500 跃点数:1
接收数据包:222528 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:202408 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:35912798 (35.9 MB)发送字节:21738075 (21.7MB)
=====================================================
那个奇怪的/64到底是什么东西呢?实验互联的时候会发现,有时候链接要加/64,有时候又不用。输入回环地址::1的时候通常是不用加的。由于在IPv4时候,我们习惯使用三点数字式的地址了,会条件反射地认为只要对方给个地址自己的机子就能正常使用了。其实这时候恰恰会出现问题。
比如一般我们自己测试自己机子的链接,IPv4时代会用: 127.0.0.1
到了IPv6时代我们如何使用回环地址呢?其实是这样的:::1
测试的时候没有问题。回到上面ifconfig出来的地址:
如果我们用192.168.179.6来链接自己,是没有问题的。
然而我们用 fe80::4e0f:6eff:fed8:489a和fe80::4e0f:6eff:fed8:489a/64来链接自己都出现了问题,无法顺利链接
自己编写ipv6程序的时候,链接同路由或者局域网的机子,用的地址叫Link-Local。
由于Link-Local地址的形式都是:fe80::a:b:c:d格式,不带任何子网信息等指示路由。因此如果有多个网卡的机器上就有多个Link-Local地址,就必须指定从哪个接口出去,否则系统不知道是哪条链路上的地址。
由于自己编写的程序可能存在各种bug,所以拿自己的程序来测试链接地址是不明智的。很难分辨到底是地址写错了,还是程序写错了。这时候最好的解决方法就是用ping命令尝试链接。ping命令在IPv6时代会有少许不同,在windows下依然是ping,而在Linux下就变成了ping6。
回到Link-Local的问题,解决办法是在地址后指定接口。这个接口可不是port,而是网卡或者输出端的设备标识符。我们看到ifconfig出来的一大堆信息前有个Wlan0,这个就是信息出口。使用ping6命令的时候,要在末尾加上%和Wlan0,表示从这个出口发送信息。
例:ping6 fe80::4e0f:6eff:fed8:489a%wlan0
这样就能成功ping到信息。同样,这个地址拿到自己编写的程序来用就是可行的,如果不行就得检查port是否写错,其他程序是否编对了。
在windows端下,同样要输入接口,不过windows下用的是设备号来解决:
===========================================
Ethernet adapterTest:
===========================================
地址fe80::21a:a5ff:fec1:1060%6后面跟的百分号6就是设备号。若是想用windows链接linux端的机器,那么ping的时候,就得首先加上linux端的IPv6地址,然后再加上自己windows端的设备号。例如:
linux机器ipv6地址: fe80::4e0f:6eff:fed8:489a/64
windows机器ipv6地址:fe80::21a:a5ff:fec1:1060%6
在linux运行下程序打开的端口号:1234
拼合后的链接地址: fe80::4e0f:6eff:fed8:489a%6
ping的时候所用命令:pingfe80::4e0f:6eff:fed8:489a%6
加到自己的client程序上就是:clientfe80::4e0f:6eff:fed8:489a%6 1234
就可以成功链接了。
参考资料:
http://blog.csdn.net/hansel/article/details/5304103
http://lesca.me/archives/how-to-ping-ipv6-address.html
http://www.cyberciti.biz/faq/windows-vista-server-xp-pingexe-ipv6-command/
http://lesca.me/archives/the-percent-sign-following-link-local-address.html
http://superuser.com/questions/248392/why-cant-i-ping-local-ipv6-windows-machines-from-ubuntu
IPv6地址格式及类型
http://blog.sina.com.cn/s/blog_72a2ef140100pddx.html
IPv4地址和IPv6地址的区别
清华大学IPv6 /首页
IPv4地址
IPv6地址
组播地址(224.0.0.0/4)
IPv6组播地址(FF00::/8)
广播地址
无,只有任播( anycast)地址
未指定地址为 0.0.0 .0
未指定地址为 ::
回路地址为 127.0.0.1
回路地址为 ::1
公用 IP地址
可汇聚全球单播地址
私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)
本地站点地址( FEC0::/48)
Microsoft自动专用IP寻址自动配置的地址(169.254.0.0/16)
本地链路地址( FE80::/64)
表达方式:点分间隔十进制
表达方式:冒号间隔十六进制式
子网掩码表示:以点阵十进制表示法或前缀长度表示法(CIDR)
子网掩码表示:仅使用前缀长度表示法(CIDR)
- 1--IPv6编程基础篇《为何输入对方…
- 为何要支持IPV6
- 2—IPv6编程Linux篇,‘long un…
- 4—IPv6编程*.dll、*.a篇,动态和静…
- IPV6编程
- 3—IPv6编程,windows篇
- 为何编程
- [Java]Swing基础编程【2】事件模型 持有对方的引用
- 为何Suse 的IPv6地址ping不通?
- IOS - 上APPSTORE为何因IPv6被拒?
- CCIE 学习 基础篇 (二) IPv6 基础
- IPv6寻址基础
- IPv6协议相关基础
- 怎样使用IPV6编程
- IPv6 Socket 编程
- ipv6 socket编程实践
- IPV6 Socket 编程
- IPV6 Socket编程
- 对于书籍《Maven实战》学习过程所使用到的命令总结(一)
- Linux下多线程编程学习【2】——同代…
- 对于书籍《Maven实战》学习过程所使用到的命令总结(二)
- Apache2网页客户端学习——图片无法…
- Maven坐标——《Maven》实战学习总结
- 1--IPv6编程基础篇《为何输入对方…
- Eclipse项目发布后,Tomcat目录下找不到项目解决方法
- 点击选中cell后改变cell的样式
- 2—IPv6编程Linux篇,‘long un…
- macOS Sierra安装Apache2.4+PHP7.0+MySQL5.7.16
- vmware安装ubuntu后,窗口居中不适应屏幕解决方法
- 3—IPv6编程,windows篇
- ubuntu下学习hadoop记录
- 4—IPv6编程windows篇,client篇