协议】SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理"/>
【网络协议】SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理
一.SSH协议
1.什么是SSH?
SSH全称 安全外壳协议(Secure Shell)
,,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
- SSH通过在网络中创建
安全隧道
来实现SSH客户端与服务器之间的连接 - 主要用于远程登录,通过本机的ssh客户端,登录到远程的ssh服务器,从而实现
在本地远程操作和控制服务器
。 - 几乎所有UNIx操作系统都可以运行SSH
- 1995年,
芬兰学者Tatu Ylonen设计了SSH协议
,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现
。本文针对的实现是OpenSSH
,它是开源软件,应用非常广泛
。
- 此外,
本文只讨论SSH在Linux Shell中的用法
。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY
,这个有时间各位可以去了解
2.基本使用
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
$ ssh user@host
如果本地用户名与远程用户名一致,登录时可以省略用户名。
$ ssh host
SSH的默认端口是22
,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以指定端口。
#这条命令表示,ssh直接连接远程主机的2222端口。
$ ssh -p 2222 user@host
3.中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密
。
整个过程是这样的:
- 远程主机收到用户的登录请求,把自己的
公钥
发给用户。 - 用户使用这个
公钥
,将登录密码加密后,发送回来
。 - 远程主机用自己的
私钥
,解密登录密码
,如果密码正确,就同意用户登录
。
这个过程本身是安全的,但是实施的时候存在一个风险:
- 如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的
登录密码
。再用这个密码登录远程主机
,那么SSH的安全机制就荡然无存了。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证
的,也就是说,都是自己签发
的。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)
。
SSH协议是如何应对的呢?
4.SSH提供2种级别的安全验证
1. 基于密码
的安全验证
只要你知道自己帐号和密码,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
安全链接的过程是:
- 远程主机端收到客户端的登陆请求时先发送自己的
公钥
给客户端 - 客户端用拿到的
公钥
加密用户名和密码,然后发送给远程主机 - 远程主机用自己的
私钥
解密收到的用户名和密码,然后校验用户名和密码是否正确,如果正确则登陆成功。
如果你是第一次登录对方主机,系统会出现下面的提示:
$ ssh user@hostThe authenticity of host 'host (12.18.429.21)' can't be established.RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Are you sure you want to continue connecting (yes/no)?
这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
- 所谓
"公钥指纹"
,是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹
。 - 上例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
Are you sure you want to continue connecting (yes/no)? yes
系统会出现一句提示,表示host主机已经得到认可。
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
然后,会要求输入密码。
Password: (enter password)
如果密码正确,就可以登录了。
-
当远程主机的公钥被接受以后,它就会被保存在文件
$HOME/.ssh/known_hosts
之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。 -
每个SSH用户都有自己的
known_hosts
文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts
,保存一些对所有用户都可信赖的远程主机的公钥。
2. 基于密匙
的安全验证
需要依靠密匙
,也就是你必须为自己创建一对密匙
,公匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公匙
,然后把它和你发送过来的公匙
进行比较。如果两个密匙一致
,服务器就用公匙
加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私匙
解密再把它发送给服务器。
- 用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
- 第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒
公钥登录的流程如下:
- 客户端在自己本地生成一对
公钥密钥
文件,然后将公钥
存储在远程主机
上 - 客户端登陆时,远程主机会随机生成
一串字符串
发送给客户端 - 客户端用自己的
密钥
将收到的字符串加密,并返回给远程主机 - 远程主机利用
公钥
解密收到的加密字符串,如果解密成功并且与发送的一致则直接免密登陆。
使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录
,可以省去输入密码的步骤。
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
$ ssh-keygen
-
运行上面的命令以后,系统会出现一系列提示,可以
一路回车
。其中有一个问题是,要不要对私钥设置口令(passphrase)
,如果担心私钥的安全,这里可以设置一个。 -
运行结束以后,在
$HOME/.ssh/
目录下,会新生成两个文件:id_rsa.pub和id_rsa
。前者是你的公钥
,后者是你的私钥
。
这时再输入下面的命令,将公钥传送到远程主机host上面:
$ ssh-copy-id user@host
- 好了,从此你再登录,就不需要输入密码了。
如果还是不行,就打开远程主机的/etc/ssh/sshd_config
这个文件,检查下面几行前面"#"注释是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后,重启远程主机的ssh服务。
#centos
service sshd restart
#或者 systemctl restart sshd.service# ubuntu系统
service ssh restart#debian系统
/etc/init.d/ssh restart
3.authorized_keys文件
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys
文件中。公钥就是一段字符串,只要把它追加在authorized_keys
文件的末尾就行了。
这里不使用上面的ssh-copy-id
命令,改用下面的命令,解释公钥的保存过程:
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:
"$ ssh user@host"
,表示登录远程主机;- 单引号中的
mkdir .ssh && cat >> .ssh/authorized_keys
,表示登录后在远程shell上执行的命令: "$ mkdir -p .ssh"
的作用是,如果用户主目录中的.ssh目录
不存在,就创建一个;'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
的作用是,将本地的公钥文件``~/.ssh/id_rsa.pub
,重定向追加到远程文件authorized_keys
的末尾
。
写入authorized_keys
文件后,公钥登录的设置就完成了。
4.SSH高级使用
4.1.远程操作
SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
-
上一节authorized_keys文件的操作,就是一个例子:
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
-
单引号中间的部分,
表示在远程主机上执行的操作
;后面的输入重定向,表示数据通过SSH传向远程主机
。 -
这就是说,
SSH可以在用户和远程主机之间,建立命令和数据的传输通道
,因此很多事情都可以通过SSH来完成。
下面看几个例子。
-
将
$HOME/src/
目录下面的所有文件,复制到远程主机的$HOME/src/
目录。$ cd && tar czv src | ssh user@host 'tar xz'
-
将远程主机
$HOME/src/
目录下面的所有文件,复制到用户的当前目录
。$ ssh user@host 'tar cz src' | tar xzv
-
查看远程主机是否运行进程httpd。
$ ssh user@host 'ps ax | grep [h]ttpd'
4.2.绑定端口
既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。
假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
$ ssh -D 8080 user@host
SSH会建立一个socket
,去监听本地的8080端口
。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。
4.3.本地端口转发
有时,绑定本地端口还不够
,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"
。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)
。
假定host1
是本地主机,host2
是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3
,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2
。
我们在host1
执行下面的命令:
$ ssh -L 2121:host2:21 host3
命令中的L参数
一共接受3个值,分别是"本地端口:目标主机:目标主机端口
",它们之间用冒号分隔
。
- 这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,
默认端口为21
)。
这样一来,我们只要连接host1
的2121端口
,就等于连上了host2的21端口
。
$ ftp localhost:2121
"本地端口转发"
使得host1
和host3
之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"
。
下面是一个比较有趣的例子。
$ ssh -L 5900:localhost:5900 host3
它表示将本机的5900端口
绑定host3的5900端口
(这里的localhost指的是host3
,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发
,ssh登录host2
。
$ ssh -L 9001:host2:22 host3
这时,只要ssh登录本机的9001端口
,就相当于登录host2
了。
$ ssh -p 9001 localhost
上面的-p
参数表示指定登录端口
。
4.4.远程端口转发
既然"本地端口转发"是指绑定本地端口的转发
,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发
。
还是接着看上面那个例子,host1与host2之间无法连通
,必须借助host3转发
。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3
。这时,"本地端口转发"就不能用了,怎么办?
- 解决办法是:既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
我们在host3执行下面的命令:
$ ssh -R 2121:host2:21 host1
R参数
也是接受3个值,分别是"远程主机端口:目标主机:目标主机端口
"。- 这条命令的意思,: 就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
绑定之后,我们在host1就可以连接host2了:
$ ftp localhost:2121
这里必须指出,"远程端口转发"的前提条件
是,host1和host3两台主机都有sshD和ssh客户端
。
4.5.SSH的其他参数
SSH还有一些别的参数,也值得介绍。
-
N参数,表示
只连接远程主机,不打开远程shell
; -
T参数,
表示不为这个连接分配TTY
。
这2个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作
。
$ ssh -NT -D 8080 host
f参数
,表示SSH连接成功后,转入后台运行
。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。
$ ssh -f -D 8080 host
- 要关闭这个后台连接,就只有用
kill命令
去杀掉进程。
SSH协议详解
SSH服务详解
二.SFTP协议
基本介绍
SFTP,称为 “安全文件传输协议
”。SSH File Transfer Protocol
的缩写,SFTP与FTP有着几乎一样的语法和功能。是SSH内含协议
,也就是说只要ssh服务器启动了,sftp就可使用,不需要额外安装(SFTP 为 SSH的其中一部分.)
,它的默认端口和SSH一样为22
。
- SFTP通过使用
加密/解密技术来保障传输文件的安全性
,因此SFTP的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表
、对账单
等对安全性要求较高的场景。 - SFTP要求客户端
必须由服务器进行身份验证
,并且数据传输必须通过安全通道(SSH)进行
,即不传输明文密码或文件数据。它允许对远程文件执行各种操作,有点像远程文件系统协议。SFTP允许从暂停传输,目录列表和远程文件删除等操作中恢复
。
基本用法
#连接sftp服务端
E:\dev_tools\>sftp -oPort=22 root@192.168.0.205
root@192.168.0.205's password:
Connected to root@192.168.0.205.#下载单个文件
sftp>get /data/huawei_saas_api_mybatis_plus.tar.gz E:\data#上传单个文件
sftp>put E:\huawei_saas_api_mybatis_plus.tar.gz /data
说明:
- -o 连接的时候指定选项
- Port=22 端口指定为22
sftp使用参数说明
操作远程服务器
-
ls 显示远端主机的列表
-
cd 切换远程的工作目录
-
pwd 显示远程的工作目录
操作本地服务器
-
lls 显示本地主机的列表
-
lcd 切换本地的工作目录
-
lpwd 查看本地目录信息
上传下载文件参数
-
get — 表示从远程服务器下载数据(单个文件)
-
mget — 表示下载多个文件
-
put — 表示从本地服务器上传数据(单个文件)
-
mput — 表示上传多个文件
查看帮助的方式:
- sftp> help 显示帮助信息
三.FTP协议
FTP(File Transfer Protocol,文件传输协议)
是 TCP/IP 协议族
中的协议之一。
- FTP协议包括两个组成部分,其一为
FTP服务器
,其二为FTP客户端
。其中FTP服务器用来存储文件
,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。 - 在开发网站的时候,通常利用
FTP协议把网页或程序传到Web服务器上
。 - 此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21
这2个端口,其中20用于传输数据
,21用于传输控制信息
。
- 但是,是否使用20作为传输数据的端口与FTP使用的
传输模式
有关,如果采用主动模式
,那么数据传输端口就是20
; 如果采用被动模式
,则具体最终使用哪个端口要服务器端和客户端协商决定
。
ftp的连接ftp服务端的方式和sftp一样,上传下载命令的使用方式也一样
四.SFTP、FTP主要区别
SFTP和FTP非常相似,都支持批量传输(一次传输多个文件
),目录导航
,目录移动
,目录创建
,文件删除
等。但还是存在着差异,下面我们来看看SFTP和FTP之间的区别。
- 而 SFTP 协议是
在 FTP 的基础上对数据进行加密,使得传输的数据相对来说更安全
。但是这种安全是以牺牲效率为代价的,也就是说 SFTP 的传输效率比 FTP 要低(不过现实使用当中,没有发现多大差别)。
SFTP使用
-
安全通道
FTP 不提供任何安全通道来在主机之间传输文件;而SFTP协议提供了一个安全通道(SSH)来加密传输认证信息和传输的数据。 -
使用的协议
FTP使用TCP / IP协议
。而,SFTP是SSH协议
的一部分,它是一种远程登录信息
。 -
连接方式
FTP使用TCP端口21
上的控制连接建立连接。而SFTP
是在客户端和服务端之间通过SSH协议(TCP端口22)
立的安全连接来传输文件。 -
安全性
FTP密码和数据以纯文本格式
发送,大多数情况下是不加密的,安全性不高。而SFTP会在发送之前加密数据,二进制的形式传递,是无法“按原样”阅读的,安全性较高。
总结
- FTP 基于TCP来传输文件,明文传输用户信息和数据。
- SFTP 基于SSH来加密传输文件,可靠性高,可
断点续传
。
五.Telnet协议
基本介绍
Telnet(远程登录协议)
是 TCP/IP 协议族
中的协议之一。主要用于远程登录其他主机
, 默认端口为23
- 主要用于远程登录,通过本机的Telnet客户端,登录到远程的Telnet服务器,从而实现
在本地远程操作和控制服务器
。 - 搭建或配置网络环境时,经常会使用ping命令检查网络是否可达。有些时候Ping命令也不好使,比如因防火墙禁止或访问策略限制等。则可使用telnet测试映射端口或远程访问主机。
工作流程
Telnet 协议工作有规范的流程,大致包括连接、执行命令和断开连接 3 个部分。具体工作流程如图所示。
其中,工作流程分为 6 个步骤,每个步骤含义如下:
- Telnet 客户端通过 TCP 协议的三次握手与 Telnet 服务器建立连接。
- 建立连接后,需要通过用户名和密码才能远程登录到服务器。因此,服务器要求客户端提供用户名和密码。
- Telnet 客户端输入用户名和密码,尝试登录服务器。
- 成功登录后客户端向服务器发送要执行的命令。
- 服务器收到客户端发来的执行命令,开始执行命令,并将结果返回给客户端。
- 客户端不再需要远程执行命令,将向服务器发送 TCP 断开数据包,用于撤销连接。
telnet部署安装
安装telnet服务端
$ yum install telnet telnet-server -y
- 设置开机自启动
$ vim /etc/xinetd.d/telnet
- 修改xinetd下的配置文件,从而管理telnet服务
$ vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{flags = REUSEsocket_type = streamwait = nouser = rootserver = /usr/sbin/in.telnetdlog_on_failure += USERIDdisable = no
}
- 启动xinetd 服务,让telnet能够开机自启动
$ /etc/init.d/xinetd startStarting xinetd: [ OK ]
telnet客户端测试
说明: telnet服务默认不支持root用户直接登陆。
$ telnet 10.0.0.250Connecting to 10.0.0.250:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
test login: oldboyPassword:Last login: Wed Oct 18 09:41:19 from 10.0.0.1
[oldboy@test ~]$
telnet使用参数
执行的命令如下:
telnet 主机名
主机名表示要连接的远程计算机的名称或 IP 地址。成功连接上以后,进入 Telnet 控制台。用户输入的子命令将在远程计算机上执行。
Telnet 常用的子命令及含义如下:
- open:建立到远程主机的 Telnet 连接,子命令后跟主机名称或 IP 地址。
- close:关闭现有的 Telnet 连接。
- display:查看 Telnet 客户端的当前设置。
- mode:设置文件传输模式。其中,ASCII 的文件传输模式适用于传输文本文件,而二进制的文件传输模式适用于其他类型的文件,如可执行文件、图片。
- send:向远程计算机发送特殊的 Telnet 协议指令序列,如终止指令序列、中断指令序列或文件结束指令序列。
- set:对 Telnet 客户端进行设置。
- status:显示状态信息。
- environ:设置环境变量。环境变量可以被操作系统用来提供特定的用户或计算机信息。
- logout:注销远程用户并关闭连接。
- quit:退出 Telnet 程序。
- unset:取消对 Telnet 客户端的设置。
- toggle:切换操作参数。
- z:暂停 Telnet 登录。
- ?:显示帮助信息。
ssh与telnet区别
-
ssh是
加密
的服务协议,telnet服务是非加密
的 -
ssh服务
默认支持root用户登陆
,telnet用户默认不支持root用户登陆
六.拓展
SCP协议
SCP就是资源复制协议,Secure copy
,是用来在SCP 客户端
和SCP 客户端
进行远程文件复制的,并且数据传输必须通过安全通道(SSH)进行。 是SSH内置工具
,也就是说只要ssh服务器启动了,scp就可使用,不需要额外安装它的默认端口和SSH一样为22
。
如何上传和下载
上传
scp -P22 -rp E:\dev_tools root@192.168.0.201:/data/dev_tools参数说明:
# -P(大写,注意和ssh命令的不同)接端口,默认22端口时可以省略-P22;
# -r递归,表示拷贝目录;
# -p表示在拷贝前后保持文件或目录属性;
# -l limit 限制速度。
# E:\dev_tools 为本地的目录。“@”前为用户名,“@”后为要连接的服务器的IP。IP后的:/data/dev_tools,为远程服务端目录。
以上命令作用是把本地E:\dev_tools
拷贝到远端服务器192.168.0.201的/data/dev_tools
目录;
下载
scp -P22 -rp root@192.168.0.201:/data/dev_tools E:\dev_tools
以上命令作用是远端服务器192.168.0.201的/data/dev_tools
目录下载到本地 E:\dev_tools
目录
其他测试案例
# 拷贝本地文件到远程:
scp filename.txt user@host:some/directory
# 拷贝本地文件到远程,使用指定端口:
scp -P 2234 filename.txt user@host:some/directory
# 拷贝多个文件到远程home:
scp filename1.txt filename2.txt user@host:~
# 拷贝远程文件到本地:
scp user@host:directory/filename.txt /directory
# 拷贝远程文件夹到本地:
scp -r user@host:directory/folder .
# 拷贝远程文件到远程:
scp user@host1:directory/filename.txt user@host1:directory
命令参数:
- -1: 强制scp命令使用协议ssh1
- -2: 强制scp命令使用协议ssh2
- -4: 强制scp命令只使用IPv4寻址
- -6: 强制scp命令只使用IPv6寻址
- -B: 使用批处理模式(传输过程中不询问传输口令或短语)
- -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
- -p:保留原文件的修改时间,访问时间和访问权限。
- -q: 不显示传输进度条。
- -r: 递归复制整个目录。
- -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
- -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
- -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
- -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
- -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
- -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
- -P port:注意是大写的P, port是指定数据传输用到的端口号
- -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
FTP 、SFTP 、SCP 都可以用来传输文件,区别主要为
- FTP 基于
TCP
来传输文件,明文传输用户信息和数据。 - SFTP 基于
SSH
来加密传输文件,可靠性高,可断点续传
。 - SCP 是基于
SSH
来加密拷贝文件,但要知道详细目录
,不可断点续传。
TFTP协议
TFTP(Trivial File Transfer Protocol,简单文件传输协议
)是TCP/IP协议族
中的一个用来在TFTP客户端与TFTP服务端
之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。它基于UDP协议而实现,默认端口号为69
。
- 它适合传送 “简单” 的文件。与FTP不同的是,
它使用的是UDP的69端口
,只能上传下载文件,不能列出目录。因此它可以穿越许多防火墙
。不过它也有缺点,比如传送不可靠、没有密码验证等
。虽然如此,它还是非常适合传送小型文件的。
tftp命令的语法:tftp -i host [get\put] source [destinqtion]
-i 二进制文件传输
host TFTP服务器地址
get 下载文件
put 上传文件
sourse 文件名
destination 目的地
windows下开启TFTP客户端服务
上传:
# 192.168.1.101为客户端IP,
tftp -pl test.txt 192.168.1.101
下载:
#192.168.1.101为服务器IP,服务器端目录下的test.txt文件下载到客户端
tftp -gr test.txt 192.168.1.101
注:在客户端执行语句
注意事项
- tftp监听的是69号端口, 走的是UDP协议, 所以tftp相对来说, 是不稳定的, 如果传输大文件的时候会出现问题
- tftp默认的上传目录是tftp32.exe的目录
- tftp默认的下载目录也是tftp32.exe的目录
常见协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合
。
- 协议定义了两个以上通信实体之间交换报文格式和顺序所遵从的标准。
-
SMTP 协议 :提供电子邮件服务的协议叫做 SMTP 协议, SMTP 在传输层也使用了 TCP 协议。SMTP 协议主要用于系统之间的邮件信息传递,并提供有关来信的通知。
-
DNS 协议:由于 IP 地址是计算机能够识别的地址,而我们人类不方便记忆这种地址,所以为了方便人类的记忆,使用 DNS 协议,来把我们容易记忆的网络地址映射称为主机能够识别的 IP 地址。
-
ARP 协议:ARP 是一种解决地址问题的协议,通过 IP 位线索,可以定位下一个用来接收数据的网络设备的 MAC 地址。如果目标主机与主机不在同一个链路上时,可以通过 ARP 查找下一跳路由的地址。不过 ARP 只适用于 IPv4 ,不适用于 IPv6。
-
RARP:RARP 就是将 ARP 协议反过来,通过 MAC 地址定位 IP 地址的一种协议。
代理 ARP:用于解决 ARP 包被路由器隔离的情况,通过代理 ARP 可以实现将 ARP 请求转发给临近的网段。
-
ICMP 协议:Internet 报文控制协议,如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么将会发送 ICMP 消息,ICMP 实际上是 IP 的一部分。
-
DHCP 协议:DHCP 是一种动态主机配置协议。使用 DHCP 就能实现自动设置 IP 地址、统一管理 IP 地址分配,实现即插即用。
-
NAT 协议:网络地址转换协议,它指的是所有本地地址的主机在接入网络时,都会要在 NAT 路由器上讲其转换成为全球 IP 地址,才能和其他主机进行通信。
-
IGP:内部网关协议,一般用于企业内部自己搭建的路由自治系统。
-
EGP:外部网关协议,EGP 通常用于在网络主机之间相互交换路由信息。
-
RIP :一种距离向量型路由协议,广泛应用于 LAN 网。
-
OSPF:是根据 OSI 的 IS-IS 协议提出的一种链路状态型协议。这种协议还能够有效的解决网络环路问题。
-
MAC 协议:媒体访问控制协议,它规定了帧在链路上传输的规则。
TCP/UDP协议常见端口号
点此查看
拓展知识
- MIME 类型,它表示的是互联网的资源类型,一般类型有
- 超文本标记语言文本 .html text/html
- xml文档 .xml text/xml
- 普通文本 .txt text/plain
- PNG图像 .png image/png
- GIF图形 .gif image/gif
- JPEG图形 .jpeg,.jpg image/jpeg
- AV文件 .avi video/x-msvideo
- 具体看这里
更多推荐
【网络协议】SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理
发布评论