FTP服务器的默认端口号是21,它负责传输控制指令,而数据的实际传输在主动模式下默认使用20端口,无论你用FileZilla还是FlashFXP,连接地址里不填端口号时,软件默认访问的就是21端口。
FTP默认端口号解析:21和20的分工与区别
FTP协议从诞生之初就采用双通道设计,控制通道走21端口,用来传递用户名、密码、切换目录、删除文件等操作指令,数据通道走20端口,用来实际搬运文件内容,这种“对话”和“搬运”分开的设计,好处是控制指令不会因为大文件传输而卡顿,坏处是端口管理一下子复杂起来。
端口21是FTP的“总机台”
所有FTP会话都从连接21端口开始,客户端向服务器的21端口发起TCP握手,成功之后才输入账号密码,根据FTP协议规范,如果21端口不通,整个FTP会话就无法建立,与数据通道的状态无关,业内专家指出,这是FTP连接里最容易被忽略的先决条件。
端口20是主动模式下的“货运专线”
20端口并非每次连接都会用到,只有当FTP工作于主动模式时,服务器才主动从20端口向客户端发起数据连接,如果工作于被动模式,服务器会临时开放一个高位端口(通常在1024到65535之间)等待客户端来连。
| 项目 | 端口21 | 端口20 |
|---|---|---|
| 角色 | 控制连接 | 数据连接(主动模式) |
| 是否必须开放 | 必须 | 仅主动模式需要 |
| 连接发起方 | 客户端 | 服务器(主动模式) |
| 加密状态 | 明文 | 明文(视协议版本而定) |
FTP主动模式与被动模式的端口差异:一个实战对比
很多刚接触FTP的人会卡在“21端口明明通了,文件列表就是刷不出来”的问题上,原因多半是数据通道没打通,按连接方向不同,FTP有两种工作模式,端口使用逻辑完全是两套。

主动模式下,服务器20端口主动找上门
默认配置下,很多FTP服务器软件优先使用主动模式,客户端先连服务器的21端口,发出数据传输请求后,服务器用20端口反向连回客户端的某个高位端口,麻烦在于,如果客户端电脑开了防火墙或处于家用路由器NAT后面,服务器回连的数据请求会被拦下,传输直接失败这也是这种模式的先天短板。
被动模式下,服务器临时开一个高位端口等客户端
被动模式的流程是:服务器收到请求后,临时随机开放一个端口(比如51234),把端口号告诉客户端,客户端主动去连,这种模式更适应现代网络环境,因为客户端只需要能出站访问对方端口就行,不需要为入站连接开放任何端口,代价是服务器端防火墙得放行一段动态端口区间,否则每次随机换端口都可能被拦截。
内网穿透场景里的端口决策
如果你的FTP服务器藏在内网,只有公网IP映射到了21端口,那么被动模式几乎是你唯一的选择,行业共识认为,在网络安全域配置上,与其反向折腾主动模式,不如直接放行被动端口范围,把50000到50100这段端口开放给被动连接使用,既省心又少踩坑,顺带提一句,企业搭建FTP服务器的整体投入并不高云服务器年租金几百到几千元不等,端口本身不产生额外费用,真正花时间的往往是模式选错之后的排查工时。
修改FTP默认端口号:Linux与Windows实操路径
默认端口21是“公共常识”,也因此成为被扫描攻击的第一目标,改端口虽然不能彻底解决安全问题,但多数情况下能明显减少只扫默认端口的恶意流量,以下两种主流系统的修改方式均经过实践验证。

Linux下vsftpd修改默认端口
- 编辑配置文件:
/etc/vsftpd/vsftpd.conf - 添加或修改一行:
listen_port=2121 - 重启服务:
systemctl restart vsftpd - 确认监听状态:
netstat -tlnp | grep 2121
顺手也能在同一配置文件里指定被动端口范围,添加这两行即可:
pasv_min_port=50000pasv_max_port=50100
如果服务器开了firewalld,需要把新端口加进放行列表:
firewall-cmd --permanent --add-port=2121/tcpfirewall-cmd --reload
Windows Server上修改FTP默认端口
如果你用的是IIS的FTP服务,操作路径这样走:
- 打开IIS管理器,选中左侧的FTP站点
- 点击右侧“绑定”,将端口从21改为2121
- 重新启动FTP站点,使绑定生效
- 在Windows Defender防火墙中放行TCP 2121,使用管理员身份运行PowerShell输入:
New-NetFirewallRule -DisplayName "FTP Custom Port" -Direction Inbound -Protocol TCP -LocalPort 2121 -Action Allow
修改完成后,客户端连接地址必须写成ftp://服务器IP:2121,只写IP不加端口是连不上的,端口号变了,连接路径就得跟着变。
FTP端口被占用怎么办?三步排查与解决
启动FTP服务时提示“端口已被占用”,是最常见的端口故障,通常是有别的进程抢先占用了21端口,或者上一次异常退出没释放端口。
第一步:查看21端口被哪个进程占用
Windows命令行执行:
netstat -ano | findstr :21- 看到对应的PID后,执行:
tasklist | findstr 该PID
如果一台机器上装了多个FTP服务程序,这一点特别容易踩坑两个服务同时抢21端口,后启动的必然报端口冲突,Linux系统下则用:

lsof -i :21查看占用进程ss -tlnp | grep 21确认监听状态
第二步:确认占用进程是否必要
Windows环境如果发现占用21端口的是别的FTP服务进程,可以直接停止该服务,管理员命令行里执行net stop ftpsvc,如果是一个没见过的陌生进程,先查清来源再决定终止,别盲目杀掉系统进程。
第三步:直接更换FTP服务器端口号
排查来排查去太费时间,更快的做法是直接让你的FTP服务让开冲突端口,参照上文修改端口的步骤,把端口换成2121或其他高位端口即可,改完记得同步修改防火墙,并通知使用方更新连接地址。
FTP服务器默认端口号相关疑问解答
FTP服务器默认端口号是什么?20还是21?
FTP服务器默认端口号是21,专门用于控制连接,20端口只是主动模式下数据连接的默认端口,并非所有FTP会话都会用到它,客户端发起FTP连接时,默认就是向目标服务器的21端口发送请求。
改了默认端口后,客户端怎么连?
需要在FTP软件的“主机”或“地址”栏写明完整信息,格式是ftp://192.168.1.10:2121,或者直接在IP地址后面加冒号和端口号,FileZilla这类工具还可以把自定义端口保存为站点,下次直接选站点连接,不必重复输入。
FTP和SFTP的默认端口有什么不同?
FTP默认使用21端口,SFTP是SSH File Transfer Protocol,默认走22端口,对外提供文件服务时,SFTP明显更安全,它使用SSH加密隧道保护传输中的指令和数据,而传统FTP的账号密码与文件内容都是明文传输,任何中间节点抓包就能直接读到敏感信息。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/866608.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是端口部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!