免费注册 查看新帖 |

Chinaunix

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

[网络子系统] 在驱动层做NAT之后,tcp的校验和总是出错。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-26 19:00 |只看该作者 |倒序浏览
最近项目上有个奇葩的需求,要用到虚拟网卡,于是我在e1000e的驱动里集成了snull(ldd3中的那个虚拟网卡代码)。大概结构如图所示

数据包从eth0进来,做个dnat到snull,然后snull的数据包做个snat从eth0发送出去,现在的问题是,数据包发送出去了,对端无法接收,单步跟了下,发现是在tcp校验的时候失败了。
刚开始以为,改过地址后,校验和算错了,但后来把所有的关于ip地址,mac地址的改动都去掉后(相当于没有做snat),直接发送出去,抓包发现,tcp->check的值变掉了。貌似是网卡对数据重新做了校验发送出去了,但是用这个命令ethtool -K eth0 tx off 关掉网卡的发送校验之后,发现还是一样的现象,实在想不到什么原因了,望知道的朋友帮帮解解惑。先谢过了

论坛徽章:
0
2 [报告]
发表于 2013-08-26 19:16 |只看该作者
补充下:skb->dev也改过了。在e1000e的手册里,没有找到控制发送校验的控制寄存器,只找到了用于控制接收校验的寄存器。不知道是不是硬件校验的原因
各路大神,给点提示,拜托了

论坛徽章:
0
3 [报告]
发表于 2013-08-27 08:23 |只看该作者
碉堡了,看来是问题太奇葩了。

论坛徽章:
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
4 [报告]
发表于 2013-08-27 10:00 |只看该作者
回复 1# FlankerSky
根据你的观察,到底是校验和正确了,还是仍然不正确。

修改之后,对端可以正确接收 TCP 报文了吗


   

论坛徽章:
0
5 [报告]
发表于 2013-08-27 13:56 |只看该作者
虚拟网卡直接自己软件层添加就行了。。。干嘛要在驱动层

论坛徽章:
0
6 [报告]
发表于 2013-09-13 13:13 |只看该作者
回复 4# Godbach

不好意思,好几天了,放假回家了。确实是校验和算错了,改了一下校验和的算法,现在可以了。谢了

论坛徽章:
0
7 [报告]
发表于 2013-09-13 13:19 |只看该作者
回复 5# godvmxi

这个虚拟网卡是修改的LDD中的例子,目的也是为了能修改物理网卡的数据,功能的话就是希望能坐一个snat dnat,当中还得对数据内容做些修改,不知道netfilter能不能实现,所以就想在网卡里做了,不知道兄弟说的软件曾添加是什么意思,还请指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP