|
实际上和程序本身没有什么关系
我出现的问题应该是IPV6环境设置的问题
目前用的FC6,内核2.6.18
ifconfig:
eth0 Link encap:Ethernet HWaddr 00:0C:29:EF:AA:51
inet addr:192.168.3.217 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: fd00::20c:29ff:feef:aa51/64 Scope:Global
inet6 addr: fec0::20c:29ff:feef:aa51/64 Scope:Site
inet6 addr: fe80::20c:29ff:feef:aa51/64 Scope ink
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16784 errors:0 dropped:0 overruns:0 frame:0
TX packets:1406 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1278276 (1.2 MiB) TX bytes:181592 (177.3 KiB)
Interrupt:177 Base address:0x1080
lo Link encap ocal Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:840 (840.0 b) TX bytes:840 (840.0 b)
红色部分是我后来手动添加的IPV6地址
默认的是红字之外的部分
目前没有支持IPV6路由的设备,所以一直在本机上自己与自己通信测试
1。用系统自带的PING6命令,PING6 eth0 的IPV6地址,没问题
2。(1)自己写的PING测试程序,PING eth0 的IPV6地址,没问题
(2)分别写了TCP和UDP测试程序,发现TCP和UDP客户端只能向内嵌的IPV4地址发送数据成功(::ffff:192.168.3.217,也就是把已有的IPV4地址192.168.3.217 嵌入IPV6地址格式),如果发向纯IPV6地址(即本来就有的 fe80::20c:29ff:feef:aa51)则发送失败
其中TCP客户端提示错误信息是“传入非法参数”,是在connect()这一步产生的错误
而UDP客户端提示是“unreachable”
3。于是加上红色标注的两个地址,一个是site local一个是unique local地址
4。(1)再用自己的PING测试程序,也可以PING到我手动加的IPV6地址,PING这部分完全没问题
(2)UDP测试程序可以成功地把数据发送到我手动加的SITE-LOCAL地址fec0::20c:29ff:feef:aa51
(3)TCP测试程序依然不能成功发送到我手动加的SITE-LOCAL地址,这次错误是“connection refused”,那个unique local地址也不行。
于是目前就剩下TCP部分有问题了
我的理解是
似乎IPV6环境下不能向本机的LINK-LOCAL地址传输数据(没有支持IPV6的交换机所以只能本机测试)
而UDP传输可以向本机的SITE-LOCAL地址传输数据
TCP则两种都不行
问:这是不是意味着,TCP模式下必然调用的connect()函数,是不能与 缺少路由的 本机 IPV6地址 建立连接的??
是否: 适当设置路由后,TCP模式将可以向本机SITE-LOCAL地址传信?如果是,请告知配置路由方法。。。谢谢! |
|