前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >端口号超过了65535

端口号超过了65535

作者头像
Erwin
发布2019-12-31 12:21:40
3.1K0
发布2019-12-31 12:21:40
举报
文章被收录于专栏:啸天"s blog啸天"s blog

一.简介

因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接

这句话是错误的,实际上是最多监听TCP的端口号是65536,就像一台服务器安装了一个nginx,他的默认端口是80,但可以改为65535。

那他提供了80服务,支持的TCP连接可以是几十万个,也就是提供几十万个客户端去访问。

二.原理

系统通过一个四元组来唯一标识一条TCP连接.,这个四元组的结构是{local ip, local port, remote ip, remote port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接。

如果不仅仅考虑TCP, 则是一个五元组, 加上协议号(TCP, UDP或者其它)。

如果某个客户端向同一个TCP端点(ip:port)发起主动连接, 那么每一条连接都必须使用不同的本地TCP端点, 如果客户端只有一个IP则是使用不同的本地端口, 该端口的范围在*nix系统上的一个例子是32768到61000, 可以通过如下命令查看:

代码语言:javascript
复制
[root@benegg.com ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

也就是说, 一个客户端连接同一个服务器的同一个ip:port(比如进行压力测试), 最多可以发起30000个左右的连接.

TCP客户端(TCP的主动发起者)可以在同一ip:port上向不同的服务器发起主动连接, 只需在bind之前对socket设置SO_REUSEADDR选项.

系统支持的最大打开文件描述符数(包括socket连接):

代码语言:javascript
复制
[root@benegg.com ~]# cat /proc/sys/fs/file-max
580382

单个进程所能打开的最大文件描述符数:

代码语言:javascript
复制
[root@benegg.com ~]# ulimit -n
1024

三.端口号超过65535

下图显示的终端端口为 78650 ,那么端口数能否超过 65535 呢?

因为 TCP PORT 大小为 16 bit ,所以不能超过 65535 。

不过 Windows 会有一个问题,telnet www.sina.com.cn 65616 大家可以测试一下,这实际上是访问 www.sina.com.cn 的 80 端口,为什么呢? 注:65616 - 65536 = 80

以下是引用片段:

代码语言:javascript
复制
main()
{
    unsigned short int tcp_port=65616;
    printf("%u",tcp_port);
}

有 些软件,比方说 Windows 的 Telnet ,可能用了 32 bit 的数据类型记录 port ,这样 port 表面上看到是可以超过 65535 ,但是 tcp header 明确定义了 tcpport 为 16 bit,那即便某些应用程序使用了 32 bit 的数据类型,最终结果也是被强制转换。

简单的来说就是:

  1. 在应用程序里边可以使用4字节或更多字节来储存端口号。
  2. 当调用了系统的tcp/ip通讯之后,系统底层强制将大于65536的端口转换回正常范围。
  3. 并且在转换过程中,不会返回任何错误信息,一切都悄然进行了,所以应用层的程序不会有任何特别反应,这一切都在系统底层悄然完成了。
  4. 转换的方式为:端口号 - 65536 = ?,问号处既是转换结果。
  5. 如果转换后的端口还超过65535呢?那就继续转换,直到小于等于65535为止,所以 telnet www.baidu.com 131152 也是可以完美执行的,(65536 + 65536 + 80 = 131152)。

终.参考

端口数能否超过65535

经典的”服务器最多65536个连接”误解

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.简介
  • 二.原理
  • 三.端口号超过65535
  • 终.参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档