当你写下这样的东西时:
s=socket(AF_INET,SOCK_STREAM)
s.connect((siteIp,80))
s.send(...
当没有提供有关绑定套接字的信息时,linux内核如何知道应该从哪个nic发送数据包。
我如何用我自己的tun / tap界面替换这个默认的nic?
另外,我可以在哪里获得有关此主题的更多深入信息?
答案 0 :(得分:0)
操作系统使用其内部路由表来最好地猜测哪个NIC最有可能到达您要连接的IP。路由与NIC和优先级相关联。如果出站数据包具有与给定路由匹配的目标IP,则使用关联的NIC。否则,使用具有适当优先级的路由(例如网关或VPN),因为分组IP可能位于通过该路由到达的另一网络上。
如果要指定使用哪个NIC,则必须bind()
之前connect()
。