简介
分析 / 验证对比常见局域网服务发现协议在 Windows/Linux/Mac 等不同系统下的支持和表现
在使用不同系统的智能硬件时,如常见的树莓派 / Openwrt 路由器 / Debian/Fedora/Windows/Mac 等系统是,系统间相互发现以及网络共享本应是系统的基础服务,无需用户过多参与。
不过现实往往和理想之间的差距让我们惊讶,不同系统相互之间的发现以及共享并没有那么轻松.
开发的硬件设备无法在常见系统的网络邻居正确的现实出来,实在是很丧气的事情.
那么,就系统来看看局域网服务发现协议在不同系统上的支持及表现.
我的服务器啊,你在哪里
想要访问局域网网络里面的设备,远没有应有的轻松。每次新装系统或者设备入网,总是有这样或者那样的问题.
各系统网络邻居正常工作的协议汇总:
OS | Windows | Linux | Macos |
---|---|---|---|
网络邻居显示 | UPnP + WS-Discovery | mDNS + SMB | mDNS (服务器侧特别配置) + SMB |
网络邻居共 | WS-Discovery + SMB | mDNS + SMB | mDNS (服务器侧特别配置) + SMB |
Linux 和 Macos 比较相似,但是实现起来还是有明显的差异,下文会具体描述. |
1. Windows
Windows 一如既往的走在自己的路上,网络邻居发现协议自搞一套.
WS-Discovery(Web Services Dynamic Discovery,Web服务动态发现)
下图是此协议的抓包
此协议和 UPnP 极其相似,都是基于 SSDP 协议衍生的 XML 表达的,如果不支持此协议,则无法在 Windows10 的网络邻居里面显示为 PC, 无法直接点击访问共享.
支持此协议后,Windows10 的网络邻居里面会在计算机类型的里面显示设备.
UPnP (Universal Plug-n-Play,通用即插即用)
UPnP 是早期路由器常用的协议,目前从不同系统的验证来看,仅有 Windows 默认在文件浏览器里面支持,会在网络邻居里面显示出设备的信息;Ubuntu 和 MacOS 都需要单独配置或者应用程序才能浏览.
这个协议目前各种路由器基本都能支持,不过其安全问题频出,作用并不明显.
2. MacOS
mDNS (multicast DNS )
MAC 整体表现和 Linux 比较接近,双方使用的协议也是类似,只是在细节处理上有些区别.
mDNS 协议本身应用比较广泛,MAC 比较早就支持。在 Mac 新版本里面,网络邻居默认可以发现 mDNS 设备.
因为历史原因,早期的 AFP 协议升级后已经没有开源协议可以完美支持,因此使用 avahi 的 mDNS 服务时,如果还使能了 AFP 业务的话,MAC 会显示为大问号.
使用配置好的服务文件,MAC 可以正常显示设备
在调试过程中,还看到了网络邻居显示为 PC 的图标,有知道显示为这个图标的条件的小伙伴吗?
SMB ( Server Message Block,服务器信息块 )
SMB 是 MS 家的协议,奇怪吧:<>
Samba 是 * nix 系统上的一个 SMB 协议的实现,是早期为了和 Windows 兼容文件共享而做的功能。目前 MAC 已经全面放弃自己的 AFP 协议转而投向 SMB 协议.
设备仅支持 SMB 协议而没有 mDSN 协议辅助,MAC 也可以识别此系统,不过会显示为超级古老的图标.
3. Linux
mDNS(multicast DNS )
Ubuntu 系统的网络邻居可以自动发现 mDNS 服务并展示为不同的图标。在 Ubuntu 20.04 里面,除去图标的不同,还增加了每个服务的描述.
SMB ( Server Message Block,服务器信息块 )
同样的,Ubuntu 系统天然支持 SMB 协议,但是 SMB 协议需要 mDNS 协议的支撑,否则无法显示在网络邻居里面.
其他协议
除去前面流行并且工作的协议外,还有一些曾经使用但是已经废弃或者即将废弃的协议,在设备设计时,如果考虑兼容性,也同时需要支持.
SSDP ( Simple Service Discovery Protocol,简单服务发现协议 )
SSDP 是一个基础协议,UPnP 以及 WS-Discovery 都是基于这个协议来实现的.
AFP( AppleTalk Filing Protocol,AppleTalk 文件协议 )
Apple 家的私有协议,开源有 netatalk 实现. AFP 升级加密后,netatalk 也不能和新版本的 MAC 兼容.
苹果已经全面投向 SMB 的怀抱,AFP 基本上可以忽略了.
NetBIOS(Network Basic Input/Output System NetBIOS )
这个是 Windows 9x/Me/XP 等早期系统支持的名称解析协议,类似于 mDNS, 新的 Windows 10 已经不建议支持此协议.
LLMNR(Link-Local Multicast Name Resolution)
,LLMNR 也是和 mDNS 竞争的失败者,主要聚焦于局域网的名称解析,可以直接忽略了.
AFP vs SMB vs NFS: 谁是最好的数据传输协议?
SMB: 什么是 SMB 协议?
SMB (Server Message Block) 协议是 1983 年由 IBM 公司提出的,为了 DOS 系统(Windows 基于 DOS 开发)开发的一种用于在计算机间共享文件、打印机、串口的协议。截止今天,SMB 已经发展到 3.1.1 版本,主要与 Microsoft Windows 操作系统捆绑在一起,并且 Linux、Mac 现在都已经支持 SMB
SMB 使用服务器客户端架构。 要通过网络共享的文件在计算机上配置,然后客户端计算机通过输入主机的 IP 地址或主机名来访问这些 SMB 共享文件。但是,SMB 不会将网络安装的目录视为本地目录。 SMB 下,网络文件和本地文件有很大区别。
NFS: 什么是 NFS 协议?
Network File System (NFS) 是一种分布式文件系统协议,最初由 Sun Microsystems 于 1984 年开发。它最初是为运行 UNIX 操作系统的电脑而创建的,但因为它基于 IETF(Internet Engineering Task Force)标准开发,所以 NFS 适合大多数常见操作系统(Mac、Linux、Windows)。 NFS 目前已经从第 3 版发展到第 4 版,具有许多改进和新功能。
NFS 不提供打印服务或共享串行端口服务(而 SMB 提供),因为 UNIX 操作系统通常已经通过其他方法满足了这些需求。 也许正是因为它专注于文件共享服务,NFS 比 SMB 具有一些效率优势。 对于小型随机读取和写入,它始终优于 SMB。 但是,NFS(至少在 NFSv4 之前)的安全性低于 SMB。 NFSv4.1 中的一个重要特性是会话中继机制(Session trunking mechanism),当服务器和客户端上有多个网络接口可用时,它提供了更多的访问容错性。
NFS 最好在局域网(LAN)上使用,虽然从技术上来说,NFS 可以跑在广域网(WAN)上,但 NFS 并不擅长处理复杂的网络地址转换和路由配置,所以文件访问的效率会非常低。
AFP: 设么是 AFP 协议?
Apple Filing Protocol(AFP)是由 Apple 公司开发的,最初称为 “AppleTalk Filing Protocol”,因为当时它运行在 AppleTalk 网络上。 它于 1988 年在 Macintosh System 6 中首次向公众发布。当时的 AppleTalk 网络是只受用与 Apple 网络,因此 AFP 仅限于 Apple 产品。 即便如此,它还是很受欢迎,因为当时 Apple Mac 上其他的文件共享软件很贵。
Apple 对 AppleTalk 做出了一些明智的设计选择,这提高了 AFP 的采用率。 其一是 AppleTalk 网络堆栈遵循 OSI 模型开发,该模型目前已经是绝对的主流,在 AppleTalk 在被淘汰后,还是可以继续使用 AFP,就是因为其基于 OSI。 除此之外,Mac OS 中的网络几乎无需维护,而且对于非技术用户来说也非常容易设置。
随着计算机网络在以太网上变得更加标准化,并且随着各种操作系统变得更加异构,对异构软件连通性的渴望,使得 AFP 与其他操作系统甚至某些 NAS 系统一起使用成为可能,目前 Mac OS 上也支持使用 SMB 和 NFS 。
如何选择合适的传输协议?
如何选择合适的传输协议,要看具体使用场景,我们看下以下场景如何选择
####** 场景 1: 大型企业**
在这种情况下,公司有一个本地数据中心、一个相对快速的 LAN,并且主要是 Microsoft Windows 服务器和个人计算机,这个选择很明确。
** 你需要使用的协议:** SMB
** 使用 SMB 的理由:** 关于支持哪个或哪些版本的 SMB 可能会有疑问,但选择它是没错的。 如果有一小群 Mac 或 Linux 用户,则由 IT 组织或高层管理人员决定是否为他们支持 NFS 或 AFP。 该决定可能更多地基于安全风险而不是性能或易用性。 虽然支持所有三种协议是可能的,但更多的复杂性可能会使得 IT 部门维护工作变得艰巨
####** 场景 2: 小型网站设计公司**
在这种情况下,很有可能在此环境中有很多 Mac 用户(但不是 100%)。 因此,AFP 很可能成为主要受支持的文件共享协议。 它与 Mac OS 操作系统完美集成,性能良好,并且 Mac 上使用 AFP 具备更好的保密性(得益于 Mac 系统出色的网络安全架构)
** 你需要使用的协议:** AFP and SMB
** 使用 AFP and SMB 的理由:** 一家公司全部为 Mac 电脑的可能性比较小(Apple 电脑比大多数基本的 Windows 兼容电脑都贵)例如,会计部门可能正在使用仅在 Windows 上运行的软件,不需要高效的视频性能、CPU 或内存。 因此,需要为这组用户支持 SMB,因为没有适用于 Windows 的 AFP 客户端。 这两个组很可能会访问不同的共享,因此将 SMB 添加到组合中可能不会增加太多复杂性。 SMB 受 Mac OS 支持,即使是 Mac 用户,公司也可以决定只支持 SMB,但 AFP 是 Mac 用户的首选协议。
####** 场景 3: Linux 软件开发组**
NFS 多年来一直是 UNIX/Linux 世界的一部分,对于那些主要使用这些操作系统的人来说是最熟悉的协议。 它运行良好,Linux 管理员它的部署工作
** 你应该使用的协议:** NFS
** 使用 NFS 的理由:** 使用和运行 Linux 操作系统的群体可能会选择使用 NFS 来满足他们的文件共享需求。 但是,与前面两个示例一样,具有相同操作系统的同构系统网络很少见。 即使是一小部分 Windows 或 Mac 用户,在这种情况下,也可以加入 SMB ,或者可能同时支持 SMB 和 AFP,但是考虑到 NFS 的通用性,只 NFS 是不会错的
可以在互联网上使用这些协议吗?
这些协议都没有提供 Internet 上安全工作的机制。 事实上,大多数 Internet 服务提供商 (ISP) 可能会阻止此类流量。 如果他们确实允许流量,安全是一个主要问题。 如果强烈需要在 Internet 上共享文件,则可以使用其他方法,虽然不太方便,但更能保护数据。
大多数企业使用专用广域网 (WAN) 来连接他们的各种设施。 这些包括租用安全电路。 对于较小的办公室和个人远程工作者,使用虚拟专用网络 (VPN) 连接到公司 LAN,它可以在 Internet 上运行,为流量(包括文件共享协议)运行提供安全的加密 “隧道”。 在这种情况下,限制因素是互联网连接的速度、延迟和可靠性。 多年来,所有这些因素都有了巨大的改进,在家中通过 VPN 连接 Internet 并且使用文件共享协议的速度现在也是非常快的。
AFP vs SMB vs NFS 传输速率对比
我们通过下面的测试来对比 NFS、AFP、SMB 作用在 Linux、Windows、Mac 系统上的传输速率如何
我们接下来会测试上传和下载的速度,实验对象是 4 个 9GB 的视频.
所以这是我们下载这 4 个视频文件的第一个测试。 结果可能会因文件数量和文件大小而异。 小文档文件可能会导致非常不同的性能。
DOWN | WIN | LINUX | MAC |
---|---|---|---|
SMB | 1:45 | 1:45 | 2:28 |
AFP | 2:02 | 1:26 | |
NFS | 1:56 | 1:31 |
Windows 仅原生支持 SMB(如果要使用 NFS 需要额外配置) 。因此,在没有任何竞争的情况下,在 Windows 中下载文件的最快数据传输协议是 SMB。
在 MAC 上下载最快的文件传输协议是 AFP。 最快的 Linux 下载是通过 SMB 实现的。
总体而言,带有 AFP 的 MAC 在下载方面表现最佳。
DOWN | WIN | LINUX | MAC |
---|---|---|---|
SMB | 22% slower | 22% slower | 72% slower |
AFP | 42% slower | Fastest | |
NFS | 35% slower | 6% slower |
我们还测试了上传速度。 同样,Windows 仅支持 SMB,这也非常接近整体最快速度。
UP | WIN | LINUX | MAC |
---|---|---|---|
SMB | 1:50 | 2:12 | 1:49 |
AFP | 2:14 | 1:55 | |
NFS | 1:46 | 2:23 |
Linux 中最快的上传数据传输协议是 NFS。 MAC 上的快速上传是通过 SMB 协议。
UP | WIN | LINUX | MAC |
---|---|---|---|
SMB | 4% slower | 25% slower | 3% slower |
AFP | 26% slower | 8% slower | |
NFS | Fastest | 35% slower |
NFS vs SMB 传输速率对比
上传(或写)
Files: 7000 files of 10 KB each
NFS write time: 37 seconds
SMB write time: 101 seconds
Files: 245 files of 1 MB each
NFS write time: 23 seconds
SMB write time: 27 seconds
Files: 1 file of 500 MB
NFS write time: 45 seconds
SMB write time: 45 seconds
Files: 1 file of 3.5 GB
NFS write time: 323 seconds
SMB write time: 324 seconds
下载(或读)
Files: 7000 files of 10 KB each
NFS read time: 26 seconds
SMB read time: 58 seconds
Files: 245 files of 1 MB each
NFS read time: 24 seconds
SMB read time: 28 seconds
Files: 1 file of 500 MB
NFS read time: 45 seconds
SMB read time: 48 seconds
Files: 1 file of 3.5 GB
NFS read time: 330 seconds
SMB read time: 347 seconds
结果证明
对于中型或小型文件,NFS 是极佳的。 对于较大的文件,两种协议的性能相似。
NFS 和 SMB 在顺序读取情况下的性能在使用纯文本时是相似的。 但是在加密方面,NFS 稍微领先于 SMB。
在随机读取中,NFS 和 SMB 在纯文本方面的表现不相上下。 但是,NFS 具有更好的加密功能。
在随机写入的情况下,无论是明文还是加密,NFS 都优于 SMB。
如果使用 rsync 进行文件传输,NFS 在明文和加密方面是更好的选择。
总结:
NFS 的优点和缺点
NFS 的优点
- 网络文件共享成本低或无成本
- 配置简单可以轻松使用
- 访问远程的共享文件就如同访问本地共享文件,这使得其可以通过 Shell 命令做一些高效的操作
- NFS 减少了对 USB 磁盘或 DVD 等可移动媒体存储的要求并提高了安全性
NFS 的缺点 - NFS 基于 RPC,不是很安全。 没有防火墙的 RPC 通信是有风险的。 它应该只允许在受信任的网络上
- NFS 可以在高流量负载的情况访问速度会变慢。 NFSv4 和 NFSv4.1 都有其局限性。 然而,最大带宽随着版本 NFSv4.2 有所增加
SMB 的优缺点
SMB 的优点
- SMB 可以运行在 Linux 、Windows 、Mac
- SMB 允许基于用户的验证,有助于多次访问和打印机共享
- 协议支持 ACL 文件共享或网络间传输
- 与 NFS 相比,SMB 中读取事务的速度更快。 读取速率为 4 MB
SMB 的缺点
- 无论文件是打开还是关闭,您都无法在 SMB 中重命名文件
- 由于 Samba 是一个开源项目,SMB 并不总是提供与 Microsoft 实施的完美兼容性。
- 相较于 NFS,SMB 处理小文件的速率明显较慢
参考文档:
AFP Vs SMB Vs NFS: Which Is The Best Data Transfer Protocol?
NFS vs SMB – What’s the Difference (Pros and Cons)
Via:
-
网络邻居发现协议大比拼,Windows/Linux/Mac 系统局域网服务发现协议之 - 八大金刚 - 阿里云开发者社区
https://developer.aliyun.com/article/780797
-
AFP vs SMB vs NFS: 谁是最好的数据传输协议?_nfs和smb哪个速度快-CSDN博客
https://blog.csdn.net/ck784101777/article/details/130331642