1.首先我们日常的日常工作会常遇到各种各样的传输问题,比如需要将更新的补丁上传到服务器,或者从服务器上下载一些资料,但是经常用到的协议就大致的归纳一下(资料来自百度百科):
首先是FTP
ftp的语义是:
File Transfer Protocol,翻译过来是一种文件传输协议
一般关于FTP的使用涉及两个部分 :
客户端和服务端,用来进行数据的交换,一般采用的是20和21端口,其中20是用来传输数据的,21是用来传输控制信息,主动模式的话,就肯定是20端口,如果是被动模式的话,就得看具体的端口设置
主要有两种传输模式:
ASCII传输模式:
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的是不同的操作系统,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)
二进制传输模式:
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的

总结:有的时候,在传输一些二进制的文件的时候,在ASCII模式下就有可能损毁部分数据,所以不是传输的同一个文件,而是在传输的过程中,发生了转译的结果,具体发生了什么,可以研究下源码(以后会单独讲一下源码),所以在传输之前,要清楚ftp的传输模式,防止传输的二进制文件不是源文件
那么问题来了,怎么验证呢 :
在linux下面有一个命令名叫,md5sum,会计算文件的MD5值,比较两个文件的MD5值,就可以知道是不是同一个文件了

那么如何在linux上搭建文件服务器呢:

以Ubuntu为例:

sudo apt install vsftpd #安装ftp服务器

在/etc/vsftpd.conf配置文件:
进行一下修改:

write_enable=YES
utf8_filesystem=YES

然后重启ftp服务器

systemctl restart vsftpd

然后你就可以在你的浏览器中输入 ftp://10.0.119.179/(以我的ftp服务器为例),你就可以看到,你的文件列表了如图所示

SFTP:
在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一数据流连接,提供文件访问、传输和管理功能的网络传输协议
使用方法和ftp大同小异,使用的前提条件是,你的系统支持ssh

SCP:
SCP就是Secure copy,是用来进行远程文件复制的,并且整个复制过程是加密的。数据传输使用ssh,并且和使用和ssh相同的认证方式,提供相同的安全保证,你的系统支持ssh
通常情况下:你的系统支持ssh,那么就意味着支持scp和SFTP这两个传输协议

那么SCP和SFTP有什么不一样的地方吗
答案是肯定的
SFTP:支持断点续传
SCP:不支持断点续传
相同点都是基于ssh的加密传输方式

NFS:
网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样
网络文件系统(NFS)是文件系统之上的一个网络抽象,来允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问。虽然 NFS 不是第一个此类系统,但是它已经发展并演变成 UNIX系统中最强大最广泛使用的网络文件系统。NFS 允许在多个用户之间共享公共文件系统,并提供数据集中的优势,来最小化所需的存储空间

网络文件系统架构:
NFS 允许计算的客户 — 服务器模型。服务器实施共享文件系统,以及客户端所连接的存储。客户端实施用户接口来共享文件系统,并加载到本地文件空间当中。 [3]
在 Linux中,虚拟文件系统交换(VFS)提供在一个主机上支持多个并发文件系统的方法(比如 CD-ROM 上的 International Organization for Standardization [ISO] 9660,以及本地硬盘上的 ext3fs)。VFS 确定需求倾向于哪个存储,然后使用哪些文件系统来满足需求。由于这一原因,NFS 是与其他文件系统类似的可插拔文件系统。对于 NFS 来说,唯一的区别是输入/输出(I/O)需求无法在本地满足,而是需要跨越网络来完成。 [3]
一旦发现了为 NFS 指定的需求,VFS 会将其传递给内核中的 NFS 实例。NFS 解释 I/O 请求并将其翻译为 NFS 程序(OPEN、ACCESS、CREATE、READ、CLOSE、REMOVE 等等)。这些程序,归档在特定 NFS RFC 中,指定了 NFS 协议中的行为。一旦从 I/O 请求中选择了程序,它会在远程程序调用(RPC)层中执行。正如其名称所暗示的,RPC 提供了在系统间执行程序调用的方法。它将封送 NFS 请求,并伴有参数,管理将它们发送到合适的远程对等级,然后管理并追踪响应,提供给合适的请求者。 [3]
进一步来说,RPC 包括重要的互操作层,称为外部数据表示(XDR),它确保当涉及到数据类型时,所有 NFS 参与者使用相同的语言。当给定架构执行请求时,数据类型表示可能不同于满足需求的目标主机上的数据类型。XDR 负责将类型转换为公共表示(XDR),便于所有架构能够与共享文件系统互操作。XDR 指定类型字节格式(比如 float)和类型的字节排序(比如修复可变长数组)。虽然 XDR 以其在 NFS 中的使用而闻名,当您在公共应用程序设置中处理多个架构时,它是一个有用的规范。 [3]
一旦 XDR 将数据转换为公共表示,需求就通过网络传输给出传输层协议。早期 NFS 采用 Universal Datagram Protocol(UDP),但是,今天 TCP 因为其优越的可靠性而更加通用。 [3]
在服务器端,NFS 以相似的风格运行。需求到达网络协议栈,通过 RPC/XDR(将数据类型转换为服务器架构) 然后到达 NFS 服务器。NFS 服务器负责满足需求。需求向上提交给 NFS 守护进程,它为需求标示出目标文件系统树,并且 VFS 再次用于在本地存储中获取文件系统。整个流程在图 3 中有展示。注意,服务器中的本地文件系统是典型的 Linux 文件系统(比如 ext4fs)。因此,NFS 不是传统意义上的文件系统,而是访问远程文件系统的协议。 [3]
对于高延迟网络,NFSv4 实现称为 compound procedure 的程序。这一程序从本质上允许在单个请求中嵌入多个 RPC 调用,来最小化通过网络请求的 transfer tax。它还为响应实现回调模式。 [3]
网络文件系统协议编辑
从客户端的角度来说,NFS 中的第一个操作称为 mount。Mount 代表将远程文件系统加载到本地文件系统空间中。该流程以对 mount(Linux 系统调用)的调用开始,它通过 VFS 路由到 NFS 组件。确认了加载端口号之后(通过 get_port 请求对远程服务器 RPC 调用),客户端执行 RPC mount 请求。这一请求发生在客户端和负责 mount 协议(rpc.mountd)的特定守护进程之间。这一守护进程基于服务器当前导出文件系统来检查客户端请求;如果所请求的文件系统存在,并且客户端已经访问了,一个 RPC mount 响应为文件系统建立了文件句柄。客户端这边存储具有本地加载点的远程加载信息,并建立执行 I/O 请求的能力。这一协议表示一个潜在的安全问题;因此,NFSv4 用内部 RPC 调用替换这一辅助 mount 协议,来管理加载点。 [3]
要读取一个文件,文件必须首先被打开。在 RPC 内没有 OPEN 程序;反之,客户端仅检查目录和文件是否存在于所加载的文件系统中。客户端以对目录的 GETATTR RPC 请求开始,其结果是一个具有目录属性或者目录不存在指示的响应。接下来,客户端发出 LOOKUP RPC 请求来查看所请求的文件是否存在。如果是,会为所请求的文件发出 GETATTR RPC 请求,为文件返回属性。基于以上成功的 GETATTRs 和 LOOKUPs,客户端创建文件句柄,为用户的未来需求而提供的。 [3]
利用在远程文件系统中指定的文件,客户端能够触发 READ RPC 请求。READ 包含文件句柄、状态、偏移、和读取计数。客户端采用状态来确定操作是否可执行(那就是,文件是否被锁定)。偏移指出是否开始读取,而计数指出所读取字节的数量。服务器可能返回或不返回所请求字节的数量,但是会指出在 READ RPC 回复中所返回(随着数据)字节的数量

FTP 服务搭建及常用的命令脚本及传输协议基础普及相关推荐

  1. FTP服务器搭建及自动下载文件脚本

    FTP服务器搭建及自动下载文件脚本 一.FTP服务器搭建 二.浏览器与命令行测试 三.自动下载文件脚本 一.FTP服务器搭建 在虚拟机192.168.109.135上搭建FTP服务器 1.安装vsft ...

  2. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

  3. FTP服务搭建小白教程

    前言: 完成FTP服务搭建,实现局域网内所有用户电脑 可连接FTP服务 如 局域网内 所有用户电脑 都可以用 通过 此链接 ftp://10.14.152.150:21 链接到FTP服务器了 前期准备 ...

  4. FTP服务搭建与配置 (资源)

    2019独角兽企业重金招聘Python工程师标准>>> FTP介绍 • FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Inter ...

  5. linux下FTP服务搭建(1)

    1.FTP介绍: FTP (File Transfer Protocol,文件传输协议)主要用来文件传输,尤其适用于大文件传输,提供上传下载功能 FTP官方网站:https://filezilla-p ...

  6. FTP服务搭建与配置

    FTP介绍 大企业多使用自动化发布程序,例如:git等工具 使用vsftpd搭建ftp 安装vsftpd: yum install -y vsftpd 创建一个普通的系统用户: useradd -s ...

  7. 局域网内Linux下开启ftp服务的“曲折路”和命令复习

    今天主要学习了Linux下网络配置以及vsftp(FTP)和samba的服务配置,学习起来,难度也就一般,并没有特别难,可是在可以做实验的时候,却并没有自己想像的那么顺利,可见,很多事情看起来不难,做 ...

  8. 【FTP】FTP服务搭建

    基本介绍: FTP是文件传输协议的缩写,基于网络来传输文件的应用层协议. FTP支持两种模式:Standard(PORT方式,主动方式),Passive(PASV,被动方式). Port模式: FTP ...

  9. FTP服务搭建(ftpd、pure-ftpd、vsftpd)

    1.简介: FTP(File Transfer Protocol)文件传输协议,用于控制网络文件双向 2.方式: FTP支持两种模式:Standard (PORT方式,主动方式),Passive (P ...

最新文章

  1. Metadata Service 架构详解 - 每天5分钟玩转 OpenStack(165)
  2. 复旦计算机学院徐老师,复旦大学信息科学与技术学院徐跃东副研究员到课题组访问交流...
  3. python读取excel画散点图-matplotlib两种画散点图的方式
  4. 腾讯云yum操作实现CentOS 7.6 64位Linux系统图形界面的安装和vnc的搭建
  5. 【快乐水题】229. 求众数 II
  6. python idle在哪_python安装包里idle在哪
  7. 构建通用类型- 继承 VS 聚合
  8. java中自定义异常的_java中的自定义异常(标准)
  9. android网页接口实现方法,Android 程序员搞 web 之 webApi (十 四)
  10. 玩转 SpringBoot 2.x 之自定义Starter依赖
  11. oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
  12. 闲说HeartBeat心跳包和TCP协议的KeepAlive机制
  13. 【Web前端】hexo+GitPages搭建博客
  14. Linux系统编程四:串口编程,控制LED和蜂鸣器
  15. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
  16. 计算机办公自动化知识试题及答案,2015年计算机办公自动化考试试题及答案
  17. phpcms v9模板制作教程
  18. Docker容器实现跨主机文件共享(NFS服务器)
  19. 图解 Android 事件分发机制
  20. React 语法之let和const命令

热门文章

  1. Annoy搜索算法(Approximate Nearest Neighbors Oh Yeah)
  2. 【项目实战】---使用ajax完毕username是否存在异步校验
  3. poj——3177Redundant Paths
  4. SCCM2012R2之五创建系统集合
  5. HG522-C 刷Openwrt记录
  6. 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!
  7. js调用python脚本_javascript – 如何从NodeJs调用python脚本
  8. java 规范异常的处理_规范-异常处理
  9. oracle 查询reference,ORACLE高级查询之MODEL PART3
  10. android调服务不更新,android – OnUpdate()不调用小部件服务