为什么仅80端口用于Web服务?


54

为什么将多个TCP / IP端口专用于http为什么不明智?尽管公认很幼稚,但认为可以以某种方式提高服务器性能不是很直观吗?


17
你是绝对正确的。我将Web服务器的默认端口从80更改为90,91,92&93。服务器上的负载已急剧下降。
David Houde 2013年

17
...也许是因为没有客户端可以找到该服务器了?
Marcos Gonzalez

5
80只是用于http的端口。当您说“ something.com”时;(或什至是“ something.com”)浏览器将其完成后作为对“ something.com:80”的请求;(在端口80上,因为它是默认的知名http端口)。与443上的https相同。如果决定更改它,则必须在URL中说出来:“ myserver.com:1280”; 否则,浏览器将尝试在端口80上找不到。名单可以在维基百科
Olivier Dulac

6
对不起,马可斯,那是幽默的拙劣尝试。我从不擅长。
David Houde13年

3
@DavidHoude,该为您复习表情符号了。:-) cs.cmu.edu/~sef/sefSmiley.htm
generalnetworkerror

Answers:


70

端口80是一个众所周知的端口,这意味着它是通常可以找到HTTP服务器的位置。您可以在HTTP / 1.1 RFC中找到记录的文档。

设置默认值非常有用,因为您不必使用URI将其输入到Web浏览器中。如果在非标准端口上运行HTTP服务器(或实际上是任何服务),则将强制客户端记住您选择的哪个16位数字并键入。

除了这种不友好之外,还没有任何性能上的好处:端口只是(dst ip:port, src ip:port)4元组中唯一标识TCP连接的一部分。如果两个连接共享一个dst ip:port,这并不意味着它们共享一些系统资源-它们可以驻留在不同的线程或不同的进程中。

现在,如果您在逻辑上都使用HTTP的情况下具有不同的服务,那么在不同的端口上运行它们就没有问题。它只是使URI有点难看。


7
而已!端口80不是资源!这只是元组的一部分!谢谢您说得这么清楚。
Marcos Gonzalez

2
即使对于不同的服务,也没有任何价值,实际的HTTP连接通常是由系统范围的驱动程序在端口80上接收的,该驱动程序执行初始协议分析,然后将其交给正确的服务,从而允许不同进程中的完全不同的服务共享同一个端口。
Monstieur

1
无用的有用答案
Deckard

26

服务器不会通过处理一个或多个端口中的连接来浪费资源。服务器资源被分配用于处理连接,端口号只是将特定程序连接到特定连接的一种方式。

例如:HTTP服务器知道他将监听端口80中的连接。服务器知道,只要他在端口80上收到一些请求,便会将其处理到http服务器。之后,http服务器将处理通信,然后消耗资源。


8
我会在此答案中添加一个端口80,该端口不会被发送请求的用户占用。这就是为什么仅使用端口80(或您正在查看的传入协议的任何知名端口)都不会成为可伸缩性的瓶颈的原因。
Craig Sirkin

1
这正是我不太了解的内容。即使同时连接到www.example.com:80的100,000个用户也不会占用端口80。感谢您的澄清。我发现下面的@Useless'信息也很有启发性。
Marcos Gonzalez

某些Web服务器软件对每个实例和/或过程有限制。有时最好运行多个实例,但是在同一台机器上运行需要另一个监听端口,第一个(TCP80 / 443)正在将连接转发到第一个实例。
Remi Letourneau

22

您似乎认为端口是真实的东西;它只是一个16位无符号数字(0-65535),它是IP数据包标题中的标签。这有助于应用程序级多路复用。当传入的数据包到达网卡时,操作系统会收到通知。它检查传入数据包定向到哪个端口,然后将数据包仅转发到正确的应用程序。如果您正在运行Web服务器(nginx)以侦听端口80,则只有nginx会将数据包发送到端口80。

当客户端(IP:100.200.100.200)向服务器(55.55.55.55)发出HTTP请求时,他们向服务器上的目标端口80(55.55.55.55:80)发出该请求,但是源端口由服务器随机选择。用于网络浏览器的操作系统(类似于45490)。然后,来自Web服务器的HTTP响应来自(55.55.55.55:80),但发送到目的地(您的IP)(100.200.100.200:45490)。您计算机的操作系统知道需要将端口45490(来自55.55.55.55:80)上的传入数据包提供给发出请求的Web浏览器。由于从客户端到网站的每个唯一连接都会获得一个唯一的随机端口,因此您可以有多个Web浏览器连接到同一网站,并且当在一个浏览器中重新加载页面时,其他窗口不会受到影响。

每个IP数据包在标头中都有可用的源IP地址和目标IP地址以及端口。操作系统和应用程序(Web浏览器或Web服务器)可以同时使用两者来确定有关如何处理数据包的适当操作。


2
如果可以的话,+ 2票。
generalnetworkerror 2013年

13

端口80和443是HTTP / HTTPS的“默认”端口

这意味着,你不必指定端口(http://www.example.com:80https://www.example.com:443使用网页浏览器时)。

如果要让Web服务器侦听任何其他端口,则用户必须手动将端口添加到URL,或者必须在指向该特定端口的任何链接中对其进行编码。

此外,除非经过特别配置,否则大多数代理和防火墙都不会允许连接到这些端口(没有配置,传出代理将不会监听非默认端口,因此不会将请求转发到Web服务器,而防火墙只会阻止非TCP80 / 443连接尝试)

所有这些限制限制了可以在TCP / IP级别执行的操作

提高性能的一种方法是使负载平衡设备/服务侦听TCP80 / 443,然后将请求重定向到其他端口和/或ip(本地平衡)或什至不同的远程站点(全局平衡)上的服务器。但这完全是另一个话题


感谢您向我介绍“负载平衡”的概念。
Marcos Gonzalez

1
如果您想对某些负载平衡概念有一些“伪”的动手和想法,F5在university.f5.com上提供了一些免费的在线培训,注册是免费的,它使您可以访问LTM(本地流量管理器-他们的本地平衡器) )培训中,您可以看到它的外观并学习一些负载平衡概念(例如:真实IP,虚拟IP,池,运行状况检查等)
Remi Letourneau 2013年

很好的建议!
Marcos Gonzalez

9

添加额外的端口不会增加额外的带宽或类似的内容,端口更多的是标签而不是管道,它可以“增长”到所需的宽度,而不会因管道已满而变慢。

如果服务器收到太多请求,则服务器当然会减慢速度,但这不是可以通过添加另一个端口号来解决的问题类型。


s / label then / label than /-我会编辑,但是似乎只有一个字符是不可接受的编辑。
Paul Gear 2013年

7

如果您使用随机端口,则用户每次访问您的站点时都必须添加正确的端口号。即www.example.com:80; www.example.com:81; www.example.com:82等

使用更多端口不会提高性能。每个连接的源端口都是短暂端口,因此仍然有所不同


7

每个TCP / IP连接都有一个sourceIP:sourcePort和一个destinationIP:destinationPort。

启动连接时,始终将80用作目标端口(这很有意义,因为服务器只需要在端口80上侦听HTTP,而不必在多个端口上侦听)。诀窍是sourcePort对于每个连接都是动态的。

例:

user1:1.1.1.1:29999至2.2.2.2:80

user2:1.1.1.2:45333至2.2.2.2:80


2

不要将其他端口误认为是不同的物理连接,更高的网络带宽或服务器处理性能。服务器得到的是TCP或UDP数据包,它们恰好具有端口号作为地址的一部分。它们仍然使用相同的导线,通过相同的网络接口硬件和驱动程序,依此类推。

如果您要向服务器发送两个数据包,就服务器的资源消耗而言,服务器要处理这两个数据包,这两者中的一个具有不同的端口号或与之关联的相同端口号并不重要,内部处理将接近相同。

因此,这不是以任何方式提高性能的方法。

唯一可能的例外是,如果要将同时运行的两个不同的恶魔(或相同的两个副本)与两个不同的端口号关联,并且这些恶魔中的每个恶魔都会因负载而严重扩展。通常情况并非如此。


1

如Remi所述,端口80和443是HTTP / HTTPS的“默认”端口。

大多数网络和防火墙都不会阻止通过此端口的流量。因此,使用此端口更加容易,因为大多数时候您可能不必担心防火墙会阻止服务,否则您可能必须重新配置防火墙规则并获得法规遵从性/安全性的批准。


1
阿门,使用非标准端口的网站的任何安全管理员的存在的祸根,您nedwork一个用户需要使用一个网站,奇怪的端口=代理变化,FW变化,安全审查等
wintermute000

0

正如这里的其他人所说的那样,在端口80以外的任何端口上托管Web服务器基本上是没有意义的……除非您是在家中托管它。许多ISP限制出站TCP / UDP端口80和443(IANA分别定义为HTTPHTTPS),在这种情况下,使用这些端口会降低站点加载速度,等等。但是,IANA分配了3个HTTP-ALT端口用于TCP和UDP。它们分别是:591、8008和8080。使用这些端口也是可以接受的,但是您将使服务器管理员的生活变得井井有条。

端口号来源:https : //www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.