未来有没有可能改进协议,让端口大于这个数字。
65535个端口还不够?全球现有的IPv4地址一共有2的32次方个。
理论上:
两台互联的电脑之间,使用不同端口,最多可以建立 65535*65535 个TCP/IP连接。同1个端口(例如都使用80),一台电脑最多可以和全世界所有联网设备建立 2的32次方 个TCP/IP连接。
65535*65535
2的32次方
你要说IP不够用,现在有IPv6了,端口什么的,真心够用了。监听一个端口,至少需要1个线程吧。一般的电脑,据说几千个线程,操作系统连线程的调度都会很卡,根本用不到这么多端口。
Update at 20170620:来来来,不服就踩,毕竟只敢匿名玩的辣鸡。
来来来,不服就踩,毕竟只敢匿名玩的辣鸡。
总结答案,别说65535个端口,即使只有1个端口也够了。在协议完善,复用充分的情况下,可以实现无限量的通信需求。同理,你要觉得操作系统1个进程不够用,用一个进程开个虚拟机,爱怎么玩怎么玩。
回复评论:Q1 监听1个端口(服务方),你连一个线程都不给?怎么做到即时的响应?Q2 客户端需要一个临时端口,这总得给一个线程吧?先去百度下操作系统能跑多少个线程再说?
最后总结:考虑端口不够用的,都是设计有问题!线程比端口,资源紧缺的多,线程数目太多的,也都是设计有问题!栈深度、栈内存大小、文件路径长度,各种隐含的限制,多了去了,但是你要是遇到了,基本都是设计有问题!
其实这就是「多路复用」的概念 —— 在一个信道上传输不同的数据流。其实 TCP/UDP 就是在 IP 上的多路复用协议,当然 TCP 还提供了其他很多功能,UDP 则基本上就只是为了多路复用了。UDP 就是在 IP 的基础上加上了一个「头」,其中有端口号等信息,让原本的 IP 协议可以分成 65535 个端口。
理解了这个概念,当然你就可以在 TCP/UDP 的基础上承载一个新的协议,来提供更多数量的数据流了。例如 HTTP2 就引入了类似的技术来允许在同一个连接上 同时 传输多个请求。但遗憾的是现在互联网上绝大部分应用是直接基于 TCP/UDP 的,因此你只能在自己的应用中去拓展端口数量,而不能轻易地改变已有的基础设施了。
有,但是没这个需求
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
65535个端口还不够?
全球现有的IPv4地址一共有2的32次方个。
理论上:
两台互联的电脑之间,使用不同端口,最多可以建立
65535*65535
个TCP/IP连接。同1个端口(例如都使用80),一台电脑最多可以和全世界所有联网设备建立
2的32次方
个TCP/IP连接。你要说IP不够用,现在有IPv6了,端口什么的,真心够用了。
监听一个端口,至少需要1个线程吧。
一般的电脑,据说几千个线程,操作系统连线程的调度都会很卡,根本用不到这么多端口。
Update at 20170620:
来来来,不服就踩,毕竟只敢匿名玩的辣鸡。
总结答案,别说65535个端口,即使只有1个端口也够了。
在协议完善,复用充分的情况下,可以实现无限量的通信需求。
同理,你要觉得操作系统1个进程不够用,用一个进程开个虚拟机,爱怎么玩怎么玩。
回复评论:
Q1 监听1个端口(服务方),你连一个线程都不给?怎么做到即时的响应?
Q2 客户端需要一个临时端口,这总得给一个线程吧?先去百度下操作系统能跑多少个线程再说?
最后总结:
考虑端口不够用的,都是设计有问题!
线程比端口,资源紧缺的多,线程数目太多的,也都是设计有问题!
栈深度、栈内存大小、文件路径长度,各种隐含的限制,多了去了,但是你要是遇到了,基本都是设计有问题!
其实这就是「多路复用」的概念 —— 在一个信道上传输不同的数据流。其实 TCP/UDP 就是在 IP 上的多路复用协议,当然 TCP 还提供了其他很多功能,UDP 则基本上就只是为了多路复用了。UDP 就是在 IP 的基础上加上了一个「头」,其中有端口号等信息,让原本的 IP 协议可以分成 65535 个端口。
理解了这个概念,当然你就可以在 TCP/UDP 的基础上承载一个新的协议,来提供更多数量的数据流了。例如 HTTP2 就引入了类似的技术来允许在同一个连接上 同时 传输多个请求。但遗憾的是现在互联网上绝大部分应用是直接基于 TCP/UDP 的,因此你只能在自己的应用中去拓展端口数量,而不能轻易地改变已有的基础设施了。
有,但是没这个需求