开始行文之前提出一个问题,相信大家在看完本文后一定可以回答

当我们在网站上填写注册信息的时候,需要我们上传照片,上传的过程发生了什么?

下面引入我们的主角,FTP文件传输协议




ftp上传文件 android 安卓ftp上传文件_android ftp上传照片

FTP 文件传输协议



FTP File Transfer Protocol 文件传输协议

主要用于客户端与服务器之间传输和共享文件




ftp上传文件 android 安卓ftp上传文件_端口号_02

FTP传输过程



在客户端和服务器端都运行着控制进程和数据进程。客户端和服务器想要传输数据,至少需要建立两个进程,一个是控制进程,在控制进程里客户端和服务器发送控制指令,比如开始传输、结束传输、暂停传输、允许传输什么格式的文件等等。另一个是数据进程,在数据进程里客户端和服务器之间就开始传输数据。控制进程先与数据进程建立,后与数据进程释放。


FTP两种传输方式

主动传输




ftp上传文件 android 安卓ftp上传文件_端口号_03

主动传输



用户先使用控制进程将随机数据进程端口号告诉服务器,当用户和服务器有数据传输时,用户就使用1025这个数据进程端口号和使用20数据进程端口号的服务器进行数据传输

被动传输




ftp上传文件 android 安卓ftp上传文件_数据_04

被动传输



用户先使用控制进程告诉服务器:“嗨哥们,告诉我你的数据进程端口号呗”,服务器说:“大哥,我的数据进程端口号是1025”,用户控制进程说:“我知道了,你随时等着,我随时叫你”。当用户和服务器有数据传输时,服务器就使用1025这个数据进程端口号和使用26数据进程端口号的用户进行数据传输

主动传输和被动传输的区别




ftp上传文件 android 安卓ftp上传文件_端口号_05

被动传输和主动传输



在用户和服务器端都有各自的网络防火墙,当需要使用的端口为高位端口时,它们各自的网络防火墙就会阻止高位端口往外传输数据。所以主动传输对于服务器端是友好的,被动传输对于客户端是友好的。当然防火墙阻止的端口是可以配置的,你可以让你的防火墙可以使用或者接受高位端口的通信。但是一般情况下还是不要设置,因为大多数的恶意程序都使用高位端口通信。