zoukankan      html  css  js  c++  java
  • FTP Protocol

    FTP(File Transfer Protocol)是因特网上的一种文件传送协议。

    基本原理

    FTP协议基于客户/服务器模式,属于应用层,使用TCP可靠的运输服务。

    FTP的服务器进程由1个主进程若干从进程组成:主进程负责接受新请求,从进程负责处理单个请求。这样,1个FTP服务器就可以同时为多个客户进程服务。

    工作过程

    FTP工作分为主动模式和被动模式。
    不论哪种模式,首先,客户从一个随机的端口N(1024-65535)向服务器的命令端口21发起请求,建立起控制连接

    - 主动模式

    客户随机打开某个端口(1024-65535),在这个端口等待服务器的数据,所以要通过控制连接告诉服务器自己用哪个端口传送数据,接着服务器收到文件传送命令以及客户端口号,从自己的数据端口20向客户发起数据连接
    FTP传送完一个文件,数据连接就会关闭,而控制连接贯穿整个会话。

    - 被动模式
    如果客户被防火墙限制,不能接受到来的TCP连接,这时候就需要被动模式来传输:
    维基百科
    首先,客户通过控制连接向服务器发送命令PASV;
    接着,服务器向客户发送自己的IP地址和自己打算用来传送数据的端口号;
    最后,客户通过刚才接收的IP地址和服务器端口号,用自己任意一个端口(1024-65535)向服务器开的那个端口建立数据连接。

    通俗点,就是:
    主动模式:建立数据通道,服务器主动去连接客户;
    这里写图片描述
    被动模式:建立数据通道,服务器被动地被客户连接。
    这里写图片描述

    再通俗点,就是:
    主动模式:
    客户:我开了一个端口,你来连我吧;

    被动模式: 
    客户:mmp,被防火墙搞了,收不到你发来的数据连接了;
    服务器:哦,没事,我开了个端口,你连我就好了。

    参考:
    Active and Passive FTP Transfers Defined
    https://en.wikipedia.org/wiki/File_Transfer_Protocol

  • 相关阅读:
    Codeforces 379 F. New Year Tree
    「NOI2018」屠龙勇士
    「NOI2018」归程
    深入理解Java枚举类型(enum)
    2018.6.9-学习笔记
    String、StringBuffer与StringBuilder介绍
    HashMap和HashTable到底哪不同?
    HashMap详解
    List,Set和Map详解及其区别和他们分别适用的场景
    Java中高级面试题(1)
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/9248201.html
Copyright © 2011-2022 走看看