面向FTP协议的TCP端口复用方法及设备技术

技术编号:36535396 阅读:28 留言:0更新日期:2023-02-01 16:20
本发明专利技术提供了一种面向FTP协议的TCP端口复用方法及设备,本发明专利技术的FTP服务器的每个进程预先保留一定数量的TCP端口并进行管理。对于每个FTP控制连接的不同PASV命令,重复使用同一个TCP端口;对来自不同IP地址的FTP客户端PASV命令,分配使用相同的TCP端口。在FTP服务器完成数据连接建立后,根据目的TCP端口和数据连接的客户端IP地址,来确定该数据连接找到它对应的FTP控制连接。本实现了TCP端口的复用,消除FTP服务器在高并发访问时TCP端口不足导致无法提供服务的问题;对于同一个FTP控制连接的不同文件传输,可以复用同一个端口,提高程序运行效率。高程序运行效率。高程序运行效率。

【技术实现步骤摘要】
面向FTP协议的TCP端口复用方法及设备


[0001]本专利技术涉及一种面向FTP协议的TCP端口复用方法及设备。

技术介绍

[0002]FTP协议具有简单高效的优点,在IT系统中应用非常广泛。FTP协议定义了主动和被动传输模式。其中,被动模式更易于实现安全访问控制,在实践中应用更多。在被动模式中,FTP客户端首先和FTP服务器之间建立TCP控制连接,然后在控制连接上发送命令和应答。当上传或下载文件时,FTP客户端向FTP服务器发送PASS命令,FTP服务器在本地分配一个TCP端口,然后把端口发送给客户端。FTP客户端向该端口建立TCP连接,作为FTP的数据连接,在该连接上传输文件数据,传输结束后关闭数据连接。
[0003]FTP服务器普遍使用由操作系统分配TCP端口的方法。在创建数据连接socket之后,执行bind操作由操作系统随机分配一个未使用的TCP端口,通过控制连接将TCP端口发送给客户端,然后FTP服务器在该端口上执行listen、accept操作来接收客户端的连接请求,建立数据连接。实践中广泛应用的vsftpd、Flashftp等FTP服务器均使用该方法。
[0004]FTP协议规定了每次传输一个文件都需要分配一个TCP端口。传统的随机绑定端口的方法会造成大量TCP端口的使用。在多个FTP客户端进行高并发传输大量文件的场景下,就会发生FTP服务器端TCP端口分配失败,导致数据传输失败的情况。

技术实现思路

[0005]本专利技术的目的在于提供一种面向FTP协议的TCP端口复用方法及设备。
[0006]为解决上述问题,本专利技术提供一种面向FTP协议的TCP端口复用方法,包括:
[0007]为不同的FTP服务器的进程预留不同的端口号集合,其中,任意两个进程预留端口号集合都不同;
[0008]初始化每个进程的已分配端口号的内存数据映射表和空闲预留端口号的内存数据队列,其中,每个进程的已分配端口和空闲预留端口的总数等于该进程预留的端口集合中的端口总数,已分配端口的内存数据映射表为:<端口号,map<客户端IP地址,FTP控制连接>>;
[0009]FTP服务器在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号,
[0010]若已经分配端口,则将已经分配的端口号发送给FTP客户端;
[0011]若未分配端口,则获取所述PASV命令对应的客户端IP地址,判断是否从对应进程的已分配端口号的内存数据映射表中遍历查找到第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号,
[0012]若在已分配端口号的内存数据映射表遍历查找到,则在已分配端口号的内存数据映射表中的遍历查找到的第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号中,插入<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的控制连接>记录至内
存数据映射表,并将第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号发送给FTP客户端;
[0013]若未在已分配端口的内存数据映射表遍历查找到,则从对应进程的空闲预留端口号的内存数据队列的头部取出一个端口号,将取出的一个端口号发送给FTP客户端,并将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表中。
[0014]进一步的,在上述方法中,FTP服务器在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号之后,还包括:
[0015]FTP控制连接待关闭时,在已分配端口号的内存数据映射表中删除待关闭的FTP控制连接对应端口号下的<FTP客户端IP地址,待关闭的FTP控制连接>记录。
[0016]进一步的,在上述方法中,FTP控制连接关闭时,在已分配端口号的内存数据映射表中删除对应端口号下的<FTP客户端IP地址,FTP控制连接>记录之后,还包括:
[0017]判断已分配端口号的内存数据映射表中,已经关闭的FTP控制连接对应端口号下是否还有其他<FTP客户端IP地址,FTP控制连接>记录,
[0018]若无记录,则已分配端口号的内存数据映射表删除已经关闭的FTP控制连接对应端口号,并将删除的端口号加入到所述空闲预留端口号的内存数据队列的尾部。
[0019]进一步的,在上述方法中,将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表,包括:
[0020]基于所述端口号建立FTP客户端和FTP服务器之间的数据连接;
[0021]数据连接建立成功后,将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表,并建立数据连接和FTP控制连接的对应关系。
[0022]根据本专利技术的另一方面,还提供一种面向FTP协议的TCP端口复用设备,包括:
[0023]预留单元,用于为不同的FTP服务器的进程预留不同的端口号集合,其中,任意两个进程预留端口号集合都不同;
[0024]初始化单元,用于初始化每个进程的已分配端口号的内存数据映射表和空闲预留端口号的内存数据队列,其中,每个进程的已分配端口和空闲预留端口的总数等于该进程预留的端口集合中的端口总数,已分配端口的内存数据映射表为:<端口号,map<客户端IP地址,FTP控制连接>>;
[0025]判断单元,用于在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号,若已经分配端口,则将已经分配的端口号发送给FTP客户端;若未分配端口,则获取所述PASV命令对应的客户端IP地址,判断是否从对应进程的已分配端口号的内存数据映射表中遍历查找到第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号,若在已分配端口号的内存数据映射表遍历查找到,则在已分配端口号的内存数据映射表中的遍历查找到的第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号中,插入<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的控制连接>记录至内存数据映射表,并将第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号发送给FTP客户端;若未在已分配端口的内存数据映射表遍历查找到,则从对应进程
的空闲预留端口号的内存数据队列的头部本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向FTP协议的TCP端口复用方法,其特征在于,包括:为不同的FTP服务器的进程预留不同的端口号集合,其中,任意两个进程预留端口号集合都不同;初始化每个进程的已分配端口号的内存数据映射表和空闲预留端口号的内存数据队列,其中,每个进程的已分配端口和空闲预留端口的总数等于该进程预留的端口集合中的端口总数,已分配端口的内存数据映射表为:<端口号,map<客户端IP地址,FTP控制连接>>;FTP服务器在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号,若已经分配端口,则将已经分配的端口号发送给FTP客户端;若未分配端口,则获取所述PASV命令对应的客户端IP地址,判断是否从对应进程的已分配端口号的内存数据映射表中遍历查找到第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号,若在已分配端口号的内存数据映射表遍历查找到,则在已分配端口号的内存数据映射表中的遍历查找到的第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号中,插入<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的控制连接>记录至内存数据映射表,并将第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号发送给FTP客户端;若未在已分配端口的内存数据映射表遍历查找到,则从对应进程的空闲预留端口号的内存数据队列的头部取出一个端口号,将取出的一个端口号发送给FTP客户端,并将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表中。2.如权利要求1所述的面向FTP协议的TCP端口复用方法,其特征在于,FTP服务器在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号之后,还包括:FTP控制连接待关闭时,在已分配端口号的内存数据映射表中删除待关闭的FTP控制连接对应端口号下的<FTP客户端IP地址,待关闭的FTP控制连接>记录。3.如权利要求2所述的面向FTP协议的TCP端口复用方法,其特征在于,FTP控制连接关闭时,在已分配端口号的内存数据映射表中删除对应端口号下的<FTP客户端IP地址,FTP控制连接>记录之后,还包括:判断已分配端口号的内存数据映射表中,已经关闭的FTP控制连接对应端口号下是否还有其他<FTP客户端IP地址,FTP控制连接>记录,若无记录,则已分配端口号的内存数据映射表删除已经关闭的FTP控制连接对应端口号,并将删除的端口号加入到所述空闲预留端口号的内存数据队列的尾部。4.如权利要求1所述的面向FTP协议的TCP端口复用方法,其特征在于,将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表,包括:基于所述端口号建立FTP客户端和FTP服务器之间的数据连接;数据连接建立成功后,将取出的一个端口号及其<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的FTP控制连接>记录插入至已分配端口号的内存数据映射表,并建
立数据连接和FTP控制连接的对应关系。5.一种面向FTP协议的TCP端口复用设备,其特征在于,包括:预留单元,用于为不同的FTP服务器的进程预留不同的端口号集合,其中,任意两个进程预留端口号集合都不同;初始化单元,用于初始化每个进程的已分配端口号的内存数据映射表和空闲预留端口号的内存数据队列,其中,每个进程的已分配端口和空闲预留端口的总数等于该进程预留的端口集合中的端口总数,已分配端口的内存数据映射表为:<端口号,map<客户端IP地址,FTP控制连接>>;判断单元,用于在接收到FTP客户端在某个进程的FTP控制连接上发送的PASV命令时,判断该PASV命令是否已经分配端口号,若已经分配端口,则将已经分配的端口号发送给FTP客户端;若未分配端口,则获取所述PASV命令对应的客户端IP地址,判断是否从对应进程的已分配端口号的内存数据映射表中遍历查找到第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号,若在已分配端口号的内存数据映射表遍历查找到,则在已分配端口号的内存数据映射表中的遍历查找到的第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号中,插入<所述PASV命令对应的FTP客户端IP地址,所述PASV命令对应的控制连接>记录至内存数据映射表,并将第一个不包含所述PASV命令对应的FTP客户端IP地址的端口号发送给FTP客户端;若未在已分配端口的内存数据映射表遍历查找到,则从对应进程的空闲预留端口号的内存数据队列的头部取出一个端口号,将取出的一个端口号发送给FTP客户端,并将取出的一...

【专利技术属性】
技术研发人员:王飞平石连星程妹
申请(专利权)人:上海霄云信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1