免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1937 | 回复: 3
打印 上一主题 下一主题

[网络子系统] 请教,协议栈是如何选择用哪个源IP的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-14 10:24 |只看该作者 |倒序浏览
请教达人:
假设设备有多个接口,设备有多个接口,有些接口还有多IP,可能还有vlan。
connect 一个公网地址时,协议栈是如何选择用哪个源IP的? 应该是在路由之前选择的吧?
如果使用 setsockopt 通过 SO_BINDTODEVICE 套接字选项 绑定了某个接口,这种情况下,又会如何选择?

---------------------------------------------------------------------------------------------
真实场景举例:(这例子可能有点复杂,不需要一定按这问题给出答案,甚至不用看这例子也行)
br0          1.1.1.1/24
br0:1       2.2.2.2/24
br0.100    vlan100子接口,10.1.100.5/24
br1          172.16.5.3/24
eth1        192.168.78.3/24

br0由 eth0和eth2组成, br0接口默认路由(网关)在vlan接口上  0/0 via 10.1.100.1/24  dev br0.100
br1由 eth3和eth4组成, br1接口默认路由(网关)是 0/0 via 172.16.5.1/24 dev br1

main路由表默认路由在eth1上
0/0 via 192.168.78.1/24 dev eth1

假设还有策略路由规则
[hello#] ip rule ls
0:        from all lookup local
30:        from 1.1.1.1 lookup 30   //30号路由表默认路由是  0/0 via 10.1.100.1/24  dev br0.100
31:   from 2.2.2.2 lookup 30
32:   from 172.16.5.3 lookup 31 //31号路由表默认路由是  0/0 via 172.16.5.1/24 dev br1
32766:        from all lookup main
32767:        from all lookup 253

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2013-06-14 14:06 |只看该作者
回复 1# ogmw

这个问题我前段时间也研究过。C 版有个类似的帖子。

结论是如果一个接口有多个 IP 的话,kernel 是选择接口上的主 IP。我也翻过  UNP,上面介绍说是根据路由的结果选择 IP。

   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2013-06-14 17:24 |只看该作者
回复 2# Godbach
结论是如果一个接口有多个 IP 的话,kernel 是选择接口上的主 IP。我也翻过  UNP,上面介绍说是根据路由的结果选择 IP。


ip_route_output_slow-->inet_select_addr,查看代码可以看出。

如果存在路由符合的IP地址,返回该地址;否则返回该interface的第一个primary地址





   

论坛徽章:
0
4 [报告]
发表于 2013-06-14 18:22 |只看该作者
多谢版主。其实代码我之前也google到了,但偷懒还没看,直接伸手要答案了,不好意思,马上用功。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP