免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1724 | 回复: 4

[网络子系统] [已解决]ip_queue_xmit调用时机的问题 [复制链接]

论坛徽章:
0
发表于 2017-02-02 12:31 |显示全部楼层
本帖最后由 NewCore 于 2017-02-15 01:28 编辑

各位,现在我基于andriod终端上开发一个功能,需要虚拟一个网卡rndis0,并通过rndis0来访问外网。
问题的现象是:
1. 在终端上通过ping命令ping任意外网IP(比如baidu.com, qq.com),都能够ping通过,并且确认reply的数据包是外网IP返回的;
2. 在终端上通过浏览器或其他上网的APP来访问外网,无法正常访问。以浏览器为例,同时输入www.baidu.com,或者baidu.com对应的ip地址,均无法打开baidu首页。同时,查看到rndis0上的tx数据包计数,并没有变化。于是推测是通过终端上的浏览器或ip访问,数据包被丢弃了,并没有到达rndis网卡,从而数据包计数没有变化。

针对以上现象,考虑在通过浏览器访问域名或ip的时候,跟踪kernel的网络数据包发送流程。
现在的问题是:
1. 我的测试步骤是,在终端浏览器中输入域名或ip地址,点击浏览器的“转到”,发现某些时候数据包发送流程会打印出来,比如会看到
tcp_write_xmit->ip_queue_xmit的调用(我在这两个函数中均添加了打印),但是某些时候,同样的操作步骤,却发现有的时候不会打印出来tcp_write_xmit及ip_queue_xmit的调用。
所以,我的第一个问题是:ip_queue_xmit的调用时机是什么?按照我的操作步骤,每次都应该有http的数据包发送,那么不应该每次点击浏览器中的“转到”,就应该有这个调用流程打印出来吗?

2. 针对我上面描述的问题(即除了ping命令,rndis的tx数据包没有变化),是否可以认为是数据包在某个地方被丢弃了?我这种验证试验的思路是否可行?(如上所述,从打印log来看,实际上在某些时候,ip_queue_xmit也是有调用到的,这是否说明实际上数据包也是到了IP层的,说明路由这些都是OK的吧,那么还会在哪里可能把数据包丢掉呢?)

谢谢各位回答,顺祝新年快乐~

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2017-02-06 09:47 |显示全部楼层
先排除一下浏览器的影响,在终端里使用curl命令试一下。

虚拟网卡rndis0的xmit逻辑是什么?

论坛徽章:
0
发表于 2017-02-08 00:46 |显示全部楼层
nswcfd 发表于 2017-02-06 09:47
先排除一下浏览器的影响,在终端里使用curl命令试一下。

虚拟网卡rndis0的xmit逻辑是什么?

浏览器本身是没有问题的,现在我已定位到是路由策略的问题。
通过浏览器访问时,fib_lookup查询路由策略失败,导致返回-101,即EUNREACHABLE错误。

现在Android终端上的网卡配置是:

rndis0 : 192.168.137.2
掩码:255.255.255.0
网关:192.168.137.1

请问如何配置路由策略,从而使通过浏览器访问的数据包能够正常通过网卡rndis0?

谢谢~

论坛徽章:
0
发表于 2017-02-15 01:29 |显示全部楼层
ip_queue_xmit是协议栈ip层发包必经函数~

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2017-02-15 11:28 |显示全部楼层
那就strace比较一下ping和curl在socket行为上的差异,如果都一样,没有理由有区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP