是否可以设置Linux系统,使其提供超过65,535个端口?目的是在给定的系统上侦听超过65k守护程序。
显然,正在使用端口,因此由于这些原因不可能实现,因此可以将其视为理论上的尝试,以试图了解TCP在执行此类操作时会受到哪些限制。
是否可以设置Linux系统,使其提供超过65,535个端口?目的是在给定的系统上侦听超过65k守护程序。
显然,正在使用端口,因此由于这些原因不可能实现,因此可以将其视为理论上的尝试,以试图了解TCP在执行此类操作时会受到哪些限制。
Answers:
查看RFC for TCP:RFC 793-传输控制协议,答案似乎是“不”,因为对于源/目标端口字段,TCP标头限制为16位。
否。即使IPv6将为我们提供更大的IP地址空间(32位和128位),也没有尝试改善端口号的16位TCP数据包限制。有趣的是,针对IPv6的RFC:Internet协议版本6(IPv6)规范,需要扩展IP字段。
当TCP通过IPv6运行时,根据RFC 2460更改了用于计算校验和的方法:
必须修改在其校验和计算中包括IP头中的地址的任何传输或其他上层协议,以便在IPv6上使用,以包括128位IPv6地址而不是32位IPv4地址。
一种方法是使用更多接口来堆叠其他IP地址。如果您的系统具有多个NIC,这会更容易,但是即使只有一个NIC,也可以根据需要使用虚拟接口(也称为别名)来分配更多IP。
注意:已替代使用别名iproute2
,您可以使用别名在单个接口(即eth0
)上堆叠IP地址。
$ sudo ip link set eth0 up
$ sudo ip addr add 192.0.2.1/24 dev eth0
$ sudo ip addr add 192.0.2.2/24 dev eth0
$ ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc
pfifo_fast state DOWN qlen 1000
link/ether 00:d0:b7:2d:ce:cf brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global eth1
inet 192.0.2.2/24 scope global secondary eth1
是否可以设置Linux系统,使其提供超过65,535个端口?
不。
目的是在给定的系统上侦听超过65k守护程序。
然后,您需要:
iptables
重定向流量内容的配置,或
一种“服务代理服务”或“多路复用器服务”,它将接受单个端口上的传入连接,并将其路由到“其后”的适当守护程序。如果您希望标准协议未经修改地通过,则可能必须以IDS或第7层防火墙进行分析的方式在此多路复用器服务中实施协议侦听/识别。绝大多数协议完全有可能。
对于第二项,如果您确实愿意,可以设计此服务来处理2 ^ 16个以上的“端口”。与运行2 ^ 16 +的侦听器的负载相比,我相信对性能的影响将最小。
Linux中的守护程序可以侦听文件系统中存在的unix套接字,因此您的“多路复用器服务”可以维护外部端口<->内部unix套接字的内部映射。在任何现代文件系统上用尽inode之前,您可能会遇到内核进程限制(32 KB进程?)。
只是因为没有好的答案,所以我想插话。
一种方法是添加一个IP选项,该选项指定端口扩展名。该选项必须设计为适合IP标头的可选部分,并且会被未知的跃点跳过。
您将使用此选项及其信息信息来扩展源,目标或两个端口号。
仅通过添加选件,限制就不会自动在现有软件中起作用,无论如何实施,都必须重写它们以利用选件,现有软件和防火墙将忽略数据包或照常处理它使用源端口和目标端口字段中的值。
简而言之,这样做并不容易,并且最好使用单个可重复使用的侦听器和包含在数据包有效载荷中的数据来完成。
您还可以更轻松地允许软件中的端口重用,这可以通过将服务器的端口重用于多个客户端连接来帮助克服此限制。
例如,RTSP可以将SessionId报头与IP数据包有效负载中的各种其他报头结合使用,以确定发出请求的连接,并采取相应的措施,例如,从其传递消息的套接字是否与该套接字的套接字不同会话所对应的远程地址,然后可以允许使用新套接字更新会话以进行处理,拒绝消息或根据应用程序采取各种其他措施。
Http服务器也可以执行此操作或其他任何类型的服务器。
允许复用端口时要记住的关键是,您还必须考虑源IP地址。
是的你可以 !
它是在例如Edgehill加密服务器之前完成的,该服务器在线运行的恶意软件数量超过25.000.000。