内核如何将ip地址和nic分配给套接字

时间:2014-05-23 20:27:59

标签: sockets tap nic tun

当你写下这样的东西时:

   s=socket(AF_INET,SOCK_STREAM)
   s.connect((siteIp,80))
   s.send(...

当没有提供有关绑定套接字的信息时,linux内核如何知道应该从哪个nic发送数据包。

我如何用我自己的tun / tap界面替换这个默认的nic?

另外,我可以在哪里获得有关此主题的更多深入信息?

1 个答案:

答案 0 :(得分:0)

操作系统使用其内部路由表来最好地猜测哪个NIC最有可能到达您要连接的IP。路由与NIC和优先级相关联。如果出站数据包具有与给定路由匹配的目标IP,则使用关联的NIC。否则,使用具有适当优先级的路由(例如网关或VPN),因为分组IP可能位于通过该路由到达的另一网络上。

如果要指定使用哪个NIC,则必须bind()之前connect()