网路文件共享服务原理_学习笔记

实际需求和局域网内解决方案

SMAB
NFS
FTP

DAS NAS SAN

1、FTP 协议(File Transfer Protocol 文件传输协议)

FTP报文格式

FTP有2种工作模式:

分为主动模式和被动模式,基于服务器角度而言
主动模式(port style):
    命令:客户端:随机端口port1----> 服务器端:21
    数据:客户端:随机端口port2<—-------> 服务器端:20

客户端通过发送命令比如get,ls,等命令告诉服务器端需要访问的资源和操作等,然后客户端是以主动模式连接的服务器,客户端在发送get等命令后,还会告诉客户端这边的数据接收随机端口是多少,然后服务器通过20主动去发起tcp连接请求,然后建立数据连接后发送数据给客户端。
这样子存在的问题就是防火墙一般是对入方向的数据进行控制,因为服务器端的20并不是监听端口,所以当防火墙发现有往服务器20端口发送的报文就会拒绝,因此当windows去连接阿里云主机的时候需要对dport=20的数据进行放行。

被动模式(passive  style):
    命令: 客户端:随机端口port3-------> 服务器端:21
    数据: 客户端:随机端口port4<-------> 服务器端:随机端口port5

被动模式就是客户端发起命令比如get,我要获取数据了,要开启数据链接了,我是被动模式链接的服务器,服务器说我知道了,然后发送了一个响应报文告诉客户端你连这个端口就好了(还不如说你就连20就好了,我还是不知道为啥子要这么设计呢?,一个进程同时能接受用户的请求数,不能如80那样去,通过主进程调度,通过子进程或子线程的方式来响应,所以使用随机端口建立新的连接请求。这就是被动模式的原因,),然后客户端就向此dport5发送tcp连接请求,然后获取数据。这边就比较那啥了,因为客户端防火墙会开放ftp客户端的会话,所以没啥影响,服务器端的防火墙应该也能够识别这个是本地ftp服务自己的端口放行放行,才行。但是设置这种模式有啥好处就不得而知了,而且ftp独有的2个连接也不知孰好孰坏,反正就服务器而言,主动发起tcp请求,还是被动接受客户端发来的tcp请求,只要能传输数据就好了不是。

被动服务器端口port5为协商结果,
227 Entering Passive Mode (host_ip,xx,yy)
服务器数据端口为:xx*256+yy

linux默认是用被动模式,windows默认是用的是主动模式

实现工具

Server:常见的服务器端软件

windows:Serv-U,IIS

Serv-U多平台,可用于Linux,多用于windows    [https://www.serv-u.com/]

linux:wu-ftp(最早的ftp实现工具),pure-ftpd,proftpd,vsftpd

Linux下几款ftp软件的分析参看:[http://blog.chinaunix.net/uid-8874157-id-3729247.html]

proftpd更专业,功能强大

pure-ftpd更简单,部署简单

vsftpd更安全,性能好

Client:常见的客户端端软件

各种浏览器

windows:FileZilla,tftpd32

FileZilla多平台,多用于windows  [https://filezilla-project.org/]

linux:ftp,lftp,lftpget,wget,curl

ftp:软件包ftp

lftp和lftpget:软件包lftp

wget:软件包wget

状态码

1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录

用户账号

匿名用户
系统用户
虚拟用户
共享哪些文件资源
用户能够对这些文件资源进行什么的操作权限。如何对用户进行认证

nss:名称解析框架

/lib64/libnss
/usr/lib64/libnss

/etc/nsswitch.conf

pam:可插入认证模块

/lib64/security/pam
/etc/pam.d/

数据传输安全

sftp:ssh提供的基于ssh的协议的ftp

ftps:基于ssl/tls的ftp

2、RPC协议

原文地址:http://blog.51cto.com/lajifeiwomoshu/2068713

时间: 2024-10-10 10:49:55

网路文件共享服务原理_学习笔记的相关文章

DNS服务相关概念_学习笔记

DNS服务的相关概念: BIND:Berkeley Internet Name Domain    域名解析 DNS:Domain Name Server 主机名:FQDN(Full Qualified DomainName 完全限定域名) DNS:名称解析,Name Resloving 名称转换(背后有查询过程,数据库) FQDN<-->IP NSSwitch:域名解析的平台(这是一个平台,平台上提供多种域名解析的方法) 方法: libnss_file.so libnss_dns.so /e

python基础教程_学习笔记9:抽象

抽象 懒惰即美德. 抽象和结构 抽象可以节省大量工作,实际上它的作用还要更大,它是使得计算机程序可以让人读懂的关键. 创建函数 函数可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> import math >>> y=1 >>> x=math.sqrt >>> callable(x) True >>> callab

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记3:元组

元组 元组不能修改:(可能你已经注意到了:字符串也不能修改.) 创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组. >>> 1,3,'ab' (1, 3, 'ab') 元组也是(大部分时候是)通过圆括号括起来的. >>> (1,3,'13') (1, 3, '13') 空元组可以用没有内容的两个圆括号来表示. 如何实现包括一个值的元组呢? >>> (5) 5 >>> ('ab') 'ab' >>>

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

python基础教程_学习笔记6:字典

字典 映射(mapping),一种可通过名字引用值得数据结构. 字典是python中唯一内建的映射类型. 字典中的值没有特殊的顺序,但都存储在一个特定的键(key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用,比如: 表征游戏棋盘的状态,每个键都是由坐标值组成的元组: 存储文件修改数,用文件名作为键: 数字电话/地址簿: 假如有一个人名列表如下: >>>names=['Alice','Beth','Cecil','Dee-Dee','Earl'] 如果

python基础教程_学习笔记5:字符串

字符串 基本字符串操作 字符串也是序列,因此序列的基本操作(索引.分片.连接.乘法.长度.求最大值和最小值.成员资格)对字符串同样适用: 索引 >>> 'a_string'[0] 'a' 长度 >>> len('a_string') 8 求最大值 >>> max('a_string') 't' 求最小值 >>> min('a_string') '_' 乘法 >>> 'a_string'*2 'a_stringa_st

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

python基础教程_学习笔记21:文件和素材

文件和素材 打开文件 open函数用来打开文件,语法如下: open([name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buffering)参数都是可选的. >>> f=open(r'D:\software(x86)\Python27\README.txt') 如果文件不存在,则出现错误: >>> f=open(r'D:\software(x86)\Python27\READM