关于套接字的路由有关问题
关于套接字的路由问题
现在我有这样一个问题。
远端服务器的地址假如是A,默认路由是通过eth0发送出去的。这时我创建一个套接字并连接到远端地址上(TCP)。这时发送的数据流都是通过eth0发送出去的。
而这时,刚才的套接字不关,并创建一个tun的设备,并把默认路由改为从tun0发送出去。这时刚才的套接字再次发送数据的时候。是通过eth0设备发出去?还是从tun0发送出去?
我之前有粗略看过Linux内核的一段代码。貌似在路由检查时,会先判断sock对象中是否有对应的路由项。如果有的话。会把数据发送到路由项对应的设备上去。如果没有的话才会去调用路由查找的函数去做查找,从而找到相对应的设备,但是现在有一段时间没看内核的代码了。不确定了。所以想问一下是怎么样的?
还有一个问题就是,如果是UDP的数据。是否有重用先前路由的能力???
求大神指点,在线等。。
------解决方案--------------------
应该还是eth0发送出去的吧! tun0只是一个虚拟网卡而已!
自己可以多测试几遍,
http://blog.****.net/xuxinyl/article/details/6454536
------解决方案--------------------
添加明细路由,比如你的服务器是X.X.X.X
添加一条
ip route add X.X.X.X dev eth0
的接口就可以了
这样子所有的数据包都是从你的默认路由走到了tun设备。然后tun设备加工好后,在通过你的tun接收程序进行二次转发。这样子,由于只有你的tun接收程序知道要发向哪个地方,因此这里将会把加工好的数据通过eth0发送出去。
现在我有这样一个问题。
远端服务器的地址假如是A,默认路由是通过eth0发送出去的。这时我创建一个套接字并连接到远端地址上(TCP)。这时发送的数据流都是通过eth0发送出去的。
而这时,刚才的套接字不关,并创建一个tun的设备,并把默认路由改为从tun0发送出去。这时刚才的套接字再次发送数据的时候。是通过eth0设备发出去?还是从tun0发送出去?
我之前有粗略看过Linux内核的一段代码。貌似在路由检查时,会先判断sock对象中是否有对应的路由项。如果有的话。会把数据发送到路由项对应的设备上去。如果没有的话才会去调用路由查找的函数去做查找,从而找到相对应的设备,但是现在有一段时间没看内核的代码了。不确定了。所以想问一下是怎么样的?
还有一个问题就是,如果是UDP的数据。是否有重用先前路由的能力???
求大神指点,在线等。。
路由
tcp
udp
linux内核
------解决方案--------------------
应该还是eth0发送出去的吧! tun0只是一个虚拟网卡而已!
自己可以多测试几遍,
http://blog.****.net/xuxinyl/article/details/6454536
------解决方案--------------------
添加明细路由,比如你的服务器是X.X.X.X
添加一条
ip route add X.X.X.X dev eth0
的接口就可以了
这样子所有的数据包都是从你的默认路由走到了tun设备。然后tun设备加工好后,在通过你的tun接收程序进行二次转发。这样子,由于只有你的tun接收程序知道要发向哪个地方,因此这里将会把加工好的数据通过eth0发送出去。