¿Cuál es el número de puerto de red TCP / IP más grande permitido para IPv4?

Respuestas:

565

El número de puerto es un entero de 16 bits sin signo, por lo que 65535.

Greg Hewgill
fuente
216
"Oye, Jim, ¿cuántos puertos debemos admitir?" "Solo haz 16 bits para una buena medida. Nadie tendrá más de unos cientos abiertos a la vez, como mucho".
JessieArr
3
@barlop Estaba sugiriendo que cuando crearon puertos por primera vez, una sola máquina con cientos de conexiones probablemente se consideraba el peor de los casos. Pero hoy en día los servidores web, dispositivos de red, etc. definitivamente pueden toparse con las limitaciones de conteo de puertos. Microsoft escribió un interesante artículo de Technet sobre cómo diagnosticarlo y evitarlo en entornos Windows: blogs.technet.microsoft.com/askds/2008/10/29/…
JessieArr
3
@JessieArr en ambos casos no es realmente un problema 65536, es un problema de A) que los programas no liberan conexiones, dejándolos en un estado "ESPERA" que muestra netstat combinado con B) algunas versiones anteriores de Windows solo van de 1024-5000 para puertos dinámicos E incluso entonces, quién sabe si eso sucedió alguna vez, ya que ningún programa se ha molestado en informar a nadie que no pudo obtener un puerto dinámico, ni tampoco Windows, por lo que es un problema teórico que ni siquiera fue realmente causado por el Número 65536. El navegador web puede ser el mayor usuario de conexiones. Tengo 297 líneas en mi salida de netstat. Lejos de 65K
barlop
3
@JessieArr La mayoría de las pilas de IP utilizan una tupla de dirección IP de origen, puerto de origen, dirección IP de destino y puerto de destino como un identificador único para las conexiones. Esto significa que un servidor puede tener muchas muchas más conexiones activas que hay puertos abiertos disponibles, y la cantidad de puertos solamente muestra una limitación (aunque muy grande) de la cantidad de conexiones abiertas entre una sola fuente y un solo destino. No creo que nadie pueda ejecutar servidores (o escuchar conexiones) en más de 65536 puertos a la vez.
jduncanator
41
@JessieArr: eso te enseñará a intentar hacer una broma, este es un negocio serio, ya sabes, no hay tiempo para ese tipo de cosas por aquí: /
Matt
145

El número de puerto más grande es un corto sin signo 2 ^ 16-1: 65535

Un puerto registrado es uno asignado por Internet Corporation para nombres y números asignados (ICANN) a un determinado uso. Cada puerto registrado está en el rango 1024–49151.

Desde el 21 de marzo de 2001, la agencia de registro es ICANN; antes de ese momento era IANA.

Los puertos con números inferiores a los de los puertos registrados se denominan puertos bien conocidos; Los puertos con números mayores que los de los puertos registrados se denominan puertos dinámicos y / o privados.

Wikipedia: puertos registrados

Brian R. Bondy
fuente
71

Según tengo entendido, solo debe usar hasta 49151, ya que desde 49152 hasta 65535 están reservados para puertos efímeros

Smashery
fuente
11
El rango de puertos efímeros varía según el sistema. Estoy ejecutando ubuntu linux con 3.19.0-43-kernel genérico. $ cat /proc/sys/net/ipv4/ip_local_port_rangeresultados en salida 32768 61000. En cuanto a si uno debería o no usar un puerto en el rango de puertos efímero del sistema, sospecho que la mayoría, si no todos los sistemas operativos de red modernos omitirán un puerto que ya está en uso.
Keith Reynolds el
37

Solo un seguimiento a la respuesta de Smashery . El intervalo de puertos efímero (al menos en Linux, y sospecho que también en otros Unices) no es fijo. Esto se puede controlar escribiendo a /proc/sys/net/ipv4/ip_local_port_range

La única restricción (en lo que respecta a IANA) es que los puertos inferiores a 1024 están designados como puertos conocidos. Los puertos superiores que son de uso gratuito. A menudo encontrará que los puertos por debajo de 1024 están restringidos al acceso de superusuario, creo que por esta misma razón.

Andrew Edgecombe
fuente
15

Según RFC 793, el puerto es un int sin signo de 16 bits.

Esto significa que el rango es 0 - 65535.

Sin embargo, dentro de ese rango, los puertos 0 - 1023 generalmente están reservados para propósitos específicos. Digo generalmente porque, aparte del puerto 0, generalmente no se aplica la reserva 0-1023. Las implementaciones de TCP / UDP generalmente no imponen reservas aparte de 0. Puede, si lo desea, ejecutar el puerto TLS de un servidor web en el puerto 80, 25 o 65535 en lugar del estándar 443. Del mismo modo, incluso aunque sea el estándar que los servidores SMTP escuchan en el puerto 25, puede ejecutarlo en 80, 443 u otros.

La mayoría de las implementaciones reservan 0 para un propósito específico: asignación aleatoria de puertos. Entonces, en la mayoría de las implementaciones , decir "escuchar en el puerto 0" en realidad significa "No me importa qué puerto uso, solo dame un puerto aleatorio no asignado para escuchar".

Por lo tanto, cualquier limitación en el uso de un puerto en el rango 0-65535, incluido 0, rango de reserva efímera, etc., es específica de la implementación (es decir, SO / controlador) , sin embargo, todos, incluido 0, son puertos válidos en el RFC 793.

Eldakka
fuente
11

Los números válidos para los puertos son: 0 a 2 ^ 16-1 = 0 a 65535
Esto se debe a que un número de puerto tiene una longitud de 16 bits.

Sin embargo, los puertos se dividen en:
Puertos conocidos : 0 a 1023 (utilizados para servicios del sistema, por ejemplo, HTTP, FTP, SSH, DHCP ...)
Puertos registrados / usuarios : 1024 a 49151 (puede usarlo para su servidor, pero cuidado con algunas aplicaciones famosas: como el servidor del sistema de administración de bases de datos de Microsoft SQL Server (MSSQL) o el servidor de red Apache Derby ya están tomando de este rango, es decir, no se recomienda asignar el puerto de MSSQL a su servidor; de lo contrario, si MSSQL se está ejecutando, entonces su servidor más probablemente no se ejecutará debido a un conflicto de puertos)
Puertos dinámicos / privados : 49152 a 65535. (no se utiliza para los servidores en lugar de los clientes, por ejemplo, en el servicio NATing)

En la programación, puede usar cualquier número del 0 al 65535 para su servidor, sin embargo, debe atenerse a los rangos mencionados anteriormente, de lo contrario, algunos servicios del sistema o algunas aplicaciones no se ejecutarán debido a un conflicto de puertos.
Consulte la lista de la mayoría de los puertos aquí: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

Mosab Shaheen
fuente
7

Debería ser 65535.

Chris
fuente