首页 > 其他分享 >计算机网络-网络文件共享协议

计算机网络-网络文件共享协议

时间:2024-03-29 09:03:26浏览次数:19  
标签:Samba String 文件共享 网络 计算机网络 NFS File proc SMB

前言

在计算机网络中,我们经常会遇到在不同计算机网络系统之间如何共享和访问文件的场景,并且在实际项目中有这样的需求,在Linux中需要动态的mount文件,需要选择合适的网络文件共享协议以满足并发,吞吐量等需求。这就涉及今天要讲的网络文件共享协议SMB和NFS。

SMB vs NFS

什么是SMB

SMB 即 Server Message Block,最初是由IBM开发的,并被Microsoft进一步发展为CIFS(Common Internet File System)。虽然主要使用于windows,但目前也支持跨平台。该协议还在不断发展,最新的SMB版本是v.3.1.1。有时会将CIFS与SMB混淆,实际上CIFS是微软对SMB的实现。

大家可能也听说过Samba,Samba是SMB在Linux上的实现:

Samba:SMB 协议最初是由 Samba 提供 Unix 支持的。由于微软最初没有公开发布其专有协议的公共规范,Samba 的开发者不得不对其进行逆向工程。未来版本的 Samba 能够使用后来 SMB 协议的公开规范。Samba 包括对 SMB3(3.1.1)的支持。

Linux CIFS utils:这个内核软件充当 SMB 客户端,是在 Linux 上挂载现有 SMB 共享的首选方法。它最初是作为 Samba 软件的一部分包括在内的,但现在可以单独获得。Linux CIFS utils 作为大多数 Linux 发行版中的 cifs_utils 软件包提供

什么是NFS

NFS 即 Network File System,是由Sun Microsystems(现在为Oracle Corporation的一部分)开发的协议。它主要被设计用于UNIX/Linux操作系统的环境中。NFS v4是最新NFS版本。它支持并行文件访问,并且在这个版本中改进了安全性。向后兼容NFS v2和NFS v3。NFS v4支持更多的身份验证。

SMB vs NFS

SMB NFS
认证 User-based Host-based
端口 TCP 445; TCP 139, UDP 137, 138 TCP 2049, UDP 2049, TCP 111 and UDP 111; TCP 1110, UDP 1110, TCP 4045, UDP 4045.
加密 Kerberos, AES-256 Kerberos and TLS
File Lock 支持 只有高版本的支持
Performance 小文件performance更好,大文件一样。

实现

首先我们的网络文件是使用的Azure服务,我们首先来调查下Azure Blog服务都支持的协议,总结如下:

Azure Storage Service 支持的协议
Azure Blob Storage NFS 3.0
Azure File Storage (Standard) SMB
Azure File Storage (Premium) NFS 4.1, SMB

然后我们使用网络文件是为了读写Sqlite文件,而使用Sqlite文件必须得支持File Lock, 而NFS 3.0并不支持File Lock, 综合考虑,最合适的是SMB。 c#代码如下:

class LinuxMount : IMount
{
    private const String CredFolder = "/tmp";

    private static readonly String MountFileStorageCommand = "mount -t cifs {0} {1} -o credentials={2},dir_mode=0777,file_mode=0777,uid=0,gid=0,cache=strict,mfsymlinks,nobrl";
    private static readonly String UnmountFileStorageCommand = "umount -f {0}";

    public void Mount(DeviceMountOption option)
    {
        var mountPoint = option.MountPoint;
        EnsureFolder(mountPoint);
        EnsureFolder(CredFolder);
        var credFile = Path.Combine(CredFolder, $"credentials_{Guid.NewGuid()}");
        var credContent = $"username={option.Username}{Environment.NewLine}password={option.Password}";
        try
        {
            File.WriteAllText(credFile, credContent);
            ExcuteCommand(String.Format(MountFileStorageCommand, option.FileSharePath, mountPoint, credFile));
        }
        finally
        {
            if (File.Exists(credFile))
            {
                File.Delete(credFile);
            }
        }
    }

    public void Unmount(String mountPoint)
    {
        ExcuteCommand(String.Format(UnmountFileStorageCommand, mountPoint));
    }

    private void EnsureFolder(String folder)
    {
        var dir = new DirectoryInfo(folder);
        if (!dir.Exists)
        {
            dir.Create();
        }
    }

    private void ExcuteCommand(String command)
    {
        using var proc = new Process();
        proc.StartInfo.FileName = "sh";
        proc.StartInfo.Arguments = $"-c \"{command}\"";
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.RedirectStandardError = true;
        proc.Start();

        var result = proc.StandardOutput.ReadToEnd();
        result += proc.StandardError.ReadToEnd();

        proc.WaitForExit();
        if (proc.ExitCode != 0)
        {
            throw new Exception($"Command failed, {result}");
        }
    }
}

标签:Samba,String,文件共享,网络,计算机网络,NFS,File,proc,SMB
From: https://www.cnblogs.com/kyo-lynn/p/18102994

相关文章

  • 在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
    在Linux环境中,追踪TCP连接和网络数据包主要通过使用命令行工具tcpdump和图形化网络分析软件Wireshark来实现。以下是详细的操作步骤:1.使用tcpdumptcpdump是一个强大的命令行网络抓包工具,用于实时捕获和分析网络流量。以下是如何使用tcpdump追踪TCP连接和数据包:1.基本用法......
  • 网络工程师之路由交换组合配置知识点相关技术方法解析
    网络工程师之路由交换组合配置相关技术方法解析交换机部分配置参数vlanif的配置环回的配置vlanbatch配置允许通过trunk口ospf的配置disospfpeerbdisipconospf带宽:默认100bandwidth-reference10000{所有运行ospf的都改}100/10010000/100备份配置:创......
  • 网络安全渗透测试工具
    网络安全渗透测试常用的开发工具包括但不限于以下几种:Nmap:一款网络扫描工具,用于探测目标主机的开放端口和正在运行的服务,是网络发现和攻击界面测绘的首选工具。Wireshark:一个流量分析工具,用于监测网络流量。Hydra:一款用于在线破解密码的工具,可以用于各种服务的登录攻击,例如SSH......
  • 02-基于STM32F407MAC与DP83848实现以太网通讯六(IPerf网络速度测试)
    一、IPerf2网络测试工具Iperf2是一个用于测试网络带宽的工具。它是Iperf的旧版本,专注于提供基本的带宽测量功能。通过在客户端和服务器之间发送测试数据流并测量其性能,用户可以评估网络连接的速度和稳定性。Iperf2提供了一种简单而有效的方式来评估网络性能。IPerf3已经发布了,但......
  • flutter加载网络图片错误EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE The following
    在flutter里使用image.network加载网络图片遇到错误══╡EXCEPTIONCAUGHTBYIMAGERESOURCESERVICE╞════════════════════════════════════════════════════ThefollowingSocketExceptionwasthrownresolvingani......
  • Golang操作kafka遇到网络问题重试的案例
    草稿0、实际中会遇到网络抖动会导致消费者有一小段时间与kafka连接遇到问题~0、如何模拟网络问题?本地跑多个kafka实例直接关掉其中一个kafka服务??怎么模拟断网??1、kafka-go与sarama都演示一下2、一个consumer消费一个topic的例子;模拟网络问题可以把kafka服务关了~观察一下再开启k......
  • MIS607网络安全评估威胁模型
    主题代码和标题MIS607网络安全评估威胁模型报告个人/团体个人长度1500字(+/-10%)学习成果通过成功证明的学科学习成果以下任务包括:b)探索和阐明网络趋势、威胁和保持安全在网络空间,加上保护个人和公司数据。c)分析与组织数据网络相关的问题和安全性,向他们推荐实用的解决方案决议......
  • SD-WAN如何适应运营商网络
    随着企业网络需求的不断增长,SD-WAN(软件定义广域网)技术成为提升网络灵活性、可管理性和性能的重要工具。然而,要实现SD-WAN的有效部署,必须与运营商网络进行密切集成和适应。以下是SD-WAN如何适应运营商网络的关键方面:多路径与负载均衡:SD-WAN能够利用多种连接路径,包括专线、互联......
  • Unity网络通信系统设计.md
    Unity网络通信系统设计Buffer报文BufferEntity类作为报文基类的作用包括:封装数据:BufferEntity类可以用来封装网络通信中的数据,方便在网络传输中进行处理和管理。提供数据缓冲区:BufferEntity类通常会包含一个数据缓冲区,用来存储待发送或接收的数据,以便进行网络通信......
  • iOS网络抓包工具全解析
     摘要本文将深入探讨iOS平台上常用的网络抓包工具,包括Charles、克魔助手、Thor和HttpCatcher,以及通过SSH连接进行抓包的方法。此外,还介绍了克魔开发助手作为iOS应用开发的辅助工具,提供的全方面性能监控和调试功能。在iOS应用开发过程中,网络抓包工具是至关重要的工具之一。它们......