LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1927|回复: 0

【LINUX下的IPV6 SOCKET编程问题】

[复制链接]
发表于 2007-1-12 16:23:32 | 显示全部楼层 |阅读模式
实际上和程序本身没有什么关系
我出现的问题应该是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 Scopeink
          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 encapocal 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地址传信?如果是,请告知配置路由方法。。。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表