[GH-ISSUE #1074] relay下并发一大,ftp出现大量421错误,如何调优 #845

Closed
opened 2026-05-05 12:32:21 -06:00 by gitea-mirror · 7 comments
Owner

Originally created by @alphonsetai on GitHub (Feb 2, 2019).
Original GitHub issue: https://github.com/fatedier/frp/issues/1074

先说一下我的网络环境。

ftp服务器位于内网(和fpc同一个机器),ftp客户端位于内网,frps服务端位于Q外vps,且max_pool_count = 30
kcp协议、打开加密、打开压缩

客户端和服务端均配置成被动模式,一切ok,可以访问可以传输文件和数据。
但我最近刚好要备份webrtc的代码,这个工程比较大,小文件较多。

filezilla客户端同时开5个线程后,容易较高概率的出现:
响应: 421 Rejected command, requested IP address does not match control connection IP.

filezilla客户端日志片段如下:
响应: 421 Could not create socket.
命令: PORT 192,168,1,98,234,252
响应: 150 Opening data channel for file upload to server of "/mac-bak/android-ndk-r16b/prebuilt/darwin-x86_64/lib/python2.7/test/test_kqueue.pyc"
响应: 421 Could not create socket.
命令: PORT 192,168,1,98,234,253
响应: 227 Entering Passive Mode (192,168,1,46,195,101)
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
命令: STOR test_largefile.py
响应: 226 Successfully transferred "/mac-bak/android-ndk-r16b/prebuilt/darwin-x86_64/lib/python2.7/test/test_kqueue.pyc"
状态: 文件传输成功,传输了 6,393 字节 (用时1 秒)
状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_linecache.py
命令: PASV
响应: 421 Rejected command, requested IP address does not match control connection IP.
错误: 文件传输失败
状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_lib2to3.pyc
命令: PASV
响应: 421 Rejected command, requested IP address does not match control connection IP.
错误: 文件传输失败
状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_lib2to3.py
命令: PASV
响应: 227 Entering Passive Mode (192,168,1,46,195,102)

由于被动模式下,ftp的数据通道每一次仅传输一个文件,下一个文件开始传输时,会新开一条数据通道(tcp连接)。
没有找到关于421详细的解释,从字面理解仅仅是数据通道和控制通道不匹配。

个人推测可能是客户端新启的连接到frps时,frpc那边的连接还没上来(或者是其他类似的原因?)

想求助一下各位,这个问题如何调优。

ps:大文件传输都ok,基本可以缩小问题范围就在并发和并发模型上了。

Originally created by @alphonsetai on GitHub (Feb 2, 2019). Original GitHub issue: https://github.com/fatedier/frp/issues/1074 先说一下我的网络环境。 ftp服务器位于内网(和fpc同一个机器),ftp客户端位于内网,frps服务端位于Q外vps,且max_pool_count = 30 kcp协议、打开加密、打开压缩 客户端和服务端均配置成被动模式,一切ok,可以访问可以传输文件和数据。 但我最近刚好要备份webrtc的代码,这个工程比较大,小文件较多。 filezilla客户端同时开5个线程后,容易较高概率的出现: 响应: 421 Rejected command, requested IP address does not match control connection IP. filezilla客户端日志片段如下: 响应: 421 Could not create socket. 命令: PORT 192,168,1,98,234,252 响应: 150 Opening data channel for file upload to server of "/mac-bak/android-ndk-r16b/prebuilt/darwin-x86_64/lib/python2.7/test/test_kqueue.pyc" 响应: 421 Could not create socket. 命令: PORT 192,168,1,98,234,253 响应: 227 Entering Passive Mode (192,168,1,46,195,101) 状态: 服务器发回了不可路由的地址。使用服务器地址代替。 命令: STOR test_largefile.py 响应: 226 Successfully transferred "/mac-bak/android-ndk-r16b/prebuilt/darwin-x86_64/lib/python2.7/test/test_kqueue.pyc" 状态: 文件传输成功,传输了 6,393 字节 (用时1 秒) 状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_linecache.py 命令: PASV 响应: 421 Rejected command, requested IP address does not match control connection IP. 错误: 文件传输失败 状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_lib2to3.pyc 命令: PASV 响应: 421 Rejected command, requested IP address does not match control connection IP. 错误: 文件传输失败 状态: 开始上传 c:\tmp-ftp\mac-bak\android-ndk-r16b\prebuilt\darwin-x86_64\lib\python2.7\test\test_lib2to3.py 命令: PASV 响应: 227 Entering Passive Mode (192,168,1,46,195,102) 由于被动模式下,ftp的数据通道每一次仅传输一个文件,下一个文件开始传输时,会新开一条数据通道(tcp连接)。 没有找到关于421详细的解释,从字面理解仅仅是数据通道和控制通道不匹配。 个人推测可能是客户端新启的连接到frps时,frpc那边的连接还没上来(或者是其他类似的原因?) 想求助一下各位,这个问题如何调优。 ps:大文件传输都ok,基本可以缩小问题范围就在并发和并发模型上了。
Author
Owner

@fatedier commented on GitHub (Feb 2, 2019):

建议放弃 ftp,更换其他传输协议,本身已经过时了。

<!-- gh-comment-id:459939588 --> @fatedier commented on GitHub (Feb 2, 2019): 建议放弃 ftp,更换其他传输协议,本身已经过时了。
Author
Owner

@alphonsetai commented on GitHub (Feb 2, 2019):

建议放弃 ftp,更换其他传输协议,本身已经过时了。

还没找到合适的文件传输协议啊。

<!-- gh-comment-id:459939762 --> @alphonsetai commented on GitHub (Feb 2, 2019): > 建议放弃 ftp,更换其他传输协议,本身已经过时了。 还没找到合适的文件传输协议啊。
Author
Owner

@fatedier commented on GitHub (Feb 2, 2019):

这种每个文件传输都需要建立一个连接的方式,本身就不友好,而且也不是很适合内网穿透。如果是要做文件同步的话,应该有不少其他开源项目可以实现的。

<!-- gh-comment-id:459940146 --> @fatedier commented on GitHub (Feb 2, 2019): 这种每个文件传输都需要建立一个连接的方式,本身就不友好,而且也不是很适合内网穿透。如果是要做文件同步的话,应该有不少其他开源项目可以实现的。
Author
Owner

@duhd1993 commented on GitHub (Apr 1, 2019):

@fatedier 请问可以推荐下有什么项目吗?想要找比较轻量适合在路由器上运行的web file browser,没有特别合适的。还是只能用ftp呢...

<!-- gh-comment-id:478686395 --> @duhd1993 commented on GitHub (Apr 1, 2019): @fatedier 请问可以推荐下有什么项目吗?想要找比较轻量适合在路由器上运行的web file browser,没有特别合适的。还是只能用ftp呢...
Author
Owner

@fatedier commented on GitHub (Apr 2, 2019):

@lonelykid 只要下载或在浏览器查看的话可以使用 frp 自带的 http web server,对外提供简单的文件访问服务

有更多要求的话考虑 sftp 或其他相类似的协议。

<!-- gh-comment-id:478796507 --> @fatedier commented on GitHub (Apr 2, 2019): @lonelykid 只要下载或在浏览器查看的话可以使用 frp 自带的 http web server,[对外提供简单的文件访问服务](https://github.com/fatedier/frp/blob/master/README_zh.md#%E5%AF%B9%E5%A4%96%E6%8F%90%E4%BE%9B%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%87%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%9C%8D%E5%8A%A1) 。 有更多要求的话考虑 sftp 或其他相类似的协议。
Author
Owner

@rampageX commented on GitHub (Apr 2, 2019):

同步当然是用 syncthing

<!-- gh-comment-id:478801783 --> @rampageX commented on GitHub (Apr 2, 2019): 同步当然是用 syncthing
Author
Owner

@duhd1993 commented on GitHub (Apr 2, 2019):

@lonelykid 只要下载或在浏览器查看的话可以使用 frp 自带的 http web server,对外提供简单的文件访问服务

有更多要求的话考虑 sftp 或其他相类似的协议。

谢谢,这个之前没注意到,的确符合我的需求。不过刚刚尝试了一下,打开结果是404 page not found,并且没有提示输入用户名密码。

<!-- gh-comment-id:478847382 --> @duhd1993 commented on GitHub (Apr 2, 2019): > @lonelykid 只要下载或在浏览器查看的话可以使用 frp 自带的 http web server,[对外提供简单的文件访问服务](https://github.com/fatedier/frp/blob/master/README_zh.md#%E5%AF%B9%E5%A4%96%E6%8F%90%E4%BE%9B%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%87%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%9C%8D%E5%8A%A1) 。 > > 有更多要求的话考虑 sftp 或其他相类似的协议。 谢谢,这个之前没注意到,的确符合我的需求。不过刚刚尝试了一下,打开结果是404 page not found,并且没有提示输入用户名密码。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#845
No description provided.