找回密码
 加入我们
搜索
      
查看: 23530|回复: 86

[网络] SMB是可能静默数据损坏的,同步重要文件务必开启校验(加密)

[复制链接]
发表于 2022-11-27 15:33 | 显示全部楼层 |阅读模式
本帖最后由 darkclown 于 2023-2-9 22:06 编辑

我这段时间一直在和smb同步问题作斗争,具体可见我前两个帖子,想看结论直接看本帖。

结论:smb3.0并不能保证数据完整性,例如在我的网络环境下,win到mac传输400G的12000个文件中,会出现约8个文件损坏,每个文件中存在一段约500~1500(目前观察到的)字节的连续错误(静默无提示),文末附图。发现开启smb的加密可以保证数据完整性,只是目前只有极少app支持了。

网络环境:
路由器:国外运营商送的
服务端:win10 20H2及21H2都试过,无线网卡PCIE的AX200,开启smb共享
客户端:win10笔记本(AX201),macbook(m1)

测试组:
1. win10->win10:损坏率不稳定,损坏部分全为0,与mac不同
2. 以下几组损坏率稳定可复现,400G的12000个文件中,都会出现约5~8个文件损坏,损坏部分全为乱码:
     win10->mac(finder挂载,直接拷贝)
     win10->mac(finder挂载,beyondcompare同步)
     win10->mac(paralles虚拟机win11中打开服务器ip,直接拷贝到mac共享文件夹)
     win10->mac(paralles虚拟机win11中打开服务器ip,beyondcompare同步到mac共享文件夹)
3. win10->mac(开启smb加密):无损坏
(以上测试中数据传输过程无任何报错,同步的文件也和原文大小等属性完全一致,只是中间有一小段与原文不同)
(所谓“乱码”是指,无规律地与原文不同,见文末附图)


分析(最新更新,前面楼层中的讨论我就不改了):
1. smb是在tcp之上的,tcp本身有16bit的checksum校验,经过33楼朋友提醒,它的抗全随机错误的能力更差,与介质问题产生位翻转的情况很不同。
2. 虽然理论上tcp有校验机制,但网卡和路由器是否在某些步骤超出了校验的控制范围,而这些部分的bug导致了错误呢?
3. 关于内存和硬盘,台式机是有ECC内存的,win本和mac本都出现错误,而开启加密就不出错了,所以内存和硬盘应该没问题。
目前还没查出具体原因,但可以得到经验,不能依赖tcp的可靠性,必须在应用层再作校验,包括使用webdav等也应该开启https。



SMB3.0加密特性兼容性(欢迎补充):
  win8和server2012以后:native支持
  mac:finder(√) parallels+win(√)
  linux:samba(√)
  iphone/ipad:FE文件管理器(√)  File Hub(√)  Infuse(√) Documents(×) nPlayer(×)
  android:MiX(×) mxplayer(×)


开启smb3.0加密的方法:
powershell执行Set-SmbServerConfiguration –EncryptData $true
详见https://learn.microsoft.com/zh-c ... server/smb-security


文件差异对比:
截屏2022-11-27 19.14.44.jpg
发表于 2022-11-27 22:25 | 显示全部楼层
我不知道我的案例有没有关系。前段时间从电脑往NAS上传了700G左右数据,win11 AX201-->群晖,都是单个十几个G的大文件,用的fastcopy开校验,传完可能有近100G的数据是过不了校验的之前还有直接windows资源管理器传输,也出现过MD5不一致的情况
路由器是TP 6088,想不通到底是哪个环节的问题。

还是rsync好,公网龟速传过几个T的数据,MD5一点问题也没有。
发表于 2022-11-27 15:38 | 显示全部楼层
严谨的拷贝我们都用Teracopy来操作
 楼主| 发表于 2022-11-27 15:42 | 显示全部楼层
本帖最后由 darkclown 于 2022-11-27 15:56 编辑
wujin941005 发表于 2022-11-27 15:38
严谨的拷贝我们都用Teracopy来操作


嗯,最保险的是再校验一遍了,smb加密也只能保证中间的步骤不出错。只是网络传输时,额外作校验还要重传一遍,要花两倍的时间,除非服务端能直接提供hash。
发表于 2022-11-27 15:46 | 显示全部楼层
大概率是兼容问题。

我之前用OP开SMB做远程备份盘。

经常出现几个文件在同步时总是提示文件已存在无法写入(记不太清提示原话,大概是这样)。以前同步到windows二奶机时从来没出过问题,查看NAS那边的文件,其实是同步过去了的。删除后重新同步,这几个文件还是会报错。

然后相同的硬件换成hyper-v(win+op),用winodws自带共享,同步就一点问题没有了。
 楼主| 发表于 2022-11-27 15:52 | 显示全部楼层
gartour 发表于 2022-11-27 15:46
大概率是兼容问题。

我之前用OP开SMB做远程备份盘。

你这个是不是smb实现的问题,而且有错误提示的。

静默损坏就太可怕了,我经常需要局域网同步文件,要不是偶然一次发现,长期这么下去数据千疮百孔了
发表于 2022-11-27 15:56 | 显示全部楼层
darkclown 发表于 2022-11-27 15:52
你这个是不是smb实现的问题,而且有错误提示的。

静默损坏就太可怕了,我经常需要局域网同步文件,要不 ...

我觉得有可能是同一个原因。只是那个软件刚好有提示。

我没说清楚,不是同步几个文件不行,而是同步几千个文件,有几个文件会报错。

如果没提示,不就是无提示损坏了?
发表于 2022-11-27 15:57 | 显示全部楼层
有没有可能是交换机呢?
 楼主| 发表于 2022-11-27 15:59 | 显示全部楼层
gartour 发表于 2022-11-27 15:56
我觉得有可能是同一个原因。只是那个软件刚好有提示。

我没说清楚,不是同步几个文件不行,而是同步几千 ...

应该不是同一个原因,我这里遇到的smb数据损坏是上层软件发现不了的,文件大小什么的都一模一样,只是中间有一小段数据和原文不同
发表于 2022-11-27 16:03 | 显示全部楼层
可能出错的环节有点多
发表于 2022-11-27 16:05 | 显示全部楼层
确定是文件损坏而不是两个系统编码不一样?把mac乱码文件放到win打开呢?
发表于 2022-11-27 16:07 | 显示全部楼层
如果没有经过交换机,高度怀疑是路由器问题导致的……smb要是出错率这高早就很多人报告这个问题了吧
发表于 2022-11-27 16:10 来自手机 | 显示全部楼层
smb出错这么狠的话。那公司的file Server还得了。。你就没想有想到是在占用的情况下吗?
发表于 2022-11-27 16:10 | 显示全部楼层
哦,原来是用无线网卡当服务器的勇士,那是得开校验的,不开校验出问题很正常
发表于 2022-11-27 17:13 | 显示全部楼层
smb非加密出错可能是链路问题,同线路你可以试试ftp/nfs出不出错。
发表于 2022-11-27 19:50 | 显示全部楼层
之前坛内出现一例网件路由器导致的文件传输静默错误
如果设备的内存不稳定,也会导致smb文件传输静默错误
遇到这个问题,我不敢保证smb本身100%没问题,但是也要首先怀疑路由器或者内存的问题。最最不该首先质疑smb
先测试一下内存吧,看看有没有错误。LinX,P95,memtest都可以。
 楼主| 发表于 2022-11-27 20:42 | 显示全部楼层
Phil_Libra 发表于 2022-11-27 16:07
如果没有经过交换机,高度怀疑是路由器问题导致的……smb要是出错率这高早就很多人报告这个问题了吧 ...

如果是路由器的问题,那为什么tcp校验可以过呢?
 楼主| 发表于 2022-11-27 20:43 | 显示全部楼层
caileipk 发表于 2022-11-27 16:10
smb出错这么狠的话。那公司的file Server还得了。。你就没想有想到是在占用的情况下吗? ...

我觉得不一定,公司都是有线网,出错的概率小,更不容易出现并察觉这种事
 楼主| 发表于 2022-11-27 20:48 | 显示全部楼层
本帖最后由 darkclown 于 2022-11-27 21:13 编辑
孤舟一笠 发表于 2022-11-27 19:50
之前坛内出现一例网件路由器导致的文件传输静默错误
如果设备的内存不稳定,也会导致smb文件传输静默错误
...


我做了很多组实验了,不开加密出错,开了就无错,实验结果是可重复的。
路由器问题为何tcp校验可以过?内存问题为何开了加密就不出错?
我现在怀疑是不是网卡封包解包TCP有问题
 楼主| 发表于 2022-11-27 20:52 | 显示全部楼层
goat 发表于 2022-11-27 17:13
smb非加密出错可能是链路问题,同线路你可以试试ftp/nfs出不出错。

每做一次实验要12小时。。暂时做不动了。我重点疑问的是,这种特点的错误是不可能过tcp校验的,那为何还会如此?
发表于 2022-11-27 21:35 | 显示全部楼层
darkclown 发表于 2022-11-27 20:52
每做一次实验要12小时。。暂时做不动了。我重点疑问的是,这种特点的错误是不可能过tcp校验的,那为何还 ...

可以稳定复现就整理下给samba提issue,然后扔给对面,除非你打算自己修。
发表于 2022-11-27 21:38 | 显示全部楼层
我怎么记得有个帖子说的netgear的设备会造成smb数据被篡改?
 楼主| 发表于 2022-11-27 21:42 | 显示全部楼层
AxIaTErN 发表于 2022-11-27 21:38
我怎么记得有个帖子说的netgear的设备会造成smb数据被篡改?

帮忙找找那个帖子呗,我没找到
 楼主| 发表于 2022-11-27 21:53 | 显示全部楼层
goat 发表于 2022-11-27 21:35
可以稳定复现就整理下给samba提issue,然后扔给对面,除非你打算自己修。


我不是用的samba啊,提给微软/intel他们会理吗?
发表于 2022-11-27 21:57 | 显示全部楼层
darkclown 发表于 2022-11-27 21:42
帮忙找找那个帖子呗,我没找到

https://www.chiphell.com/forum.p ... page=2&mobile=1

要被网件坑死了,NAS里面文件废了大半,R7800用户注意啊

但是被归档了
发表于 2022-11-27 21:58 | 显示全部楼层
darkclown 发表于 2022-11-27 21:53
我不是用的samba啊,提给微软/intel他们会理吗?

直接找微软试试,至少比自己瞎摸解决方案强多了。
当然召唤个大佬直接指出哪里有问题更好
 楼主| 发表于 2022-11-27 21:58 | 显示全部楼层
Phil_Libra 发表于 2022-11-27 21:57
https://www.chiphell.com/forum.php?mod=viewthread&tid=1878038&extra=&page=2&mobile=1

要被网件坑死 ...

看不到帖子,你能讲讲吗?那个案例中为何文件损坏而tcp校验可以过?
发表于 2022-11-27 22:04 | 显示全部楼层
本帖最后由 zhuifeng88 于 2022-11-27 22:31 编辑

脚本跑了10TiB测试(linux读写win11的共享目录, 网卡两侧都是mcx4421a, 交换机st5008f, linux生成1GiB随机数据, 本地计算crc32, 写入共享目录, 冲刷io buffer, 从共享目录读取刚刚写入的数据, 计算crc32并和之前的比对, 重复10240次), 没看到有明确问题, 比较怀疑是有其他方面影响
 楼主| 发表于 2022-11-27 22:32 | 显示全部楼层
本帖最后由 darkclown 于 2022-11-27 22:38 编辑
zhuifeng88 发表于 2022-11-27 22:04
脚本跑了10TB测试(linux读写win11的共享目录, 网卡两侧都是mcx4421a, 交换机st5008f, linux生成1GiB随机数 ...


应该是我这边某一个环节错误率大而没被修正导致的,你那边应该不好观察到。。。

因为我这边做实验也比较慢,就先看看大家有什么说法,如果找到方向再进一步研究。
 楼主| 发表于 2022-11-27 22:34 | 显示全部楼层
jcd_chh 发表于 2022-11-27 22:25
我不知道我的案例有没有关系。前段时间从电脑往NAS上传了700G左右数据,win11 AX201-->群晖,都是单个十几 ...

你这个感觉跟我这很像啊,另外rsync是用什么协议的,ssh?那应用层有校验,和smb开加密效果应该一样了
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-9-20 01:55 , Processed in 0.016353 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表