El RFC 6335 explica esto:
Los puertos en el rango de puertos dinámicos (49152-65535) se han reservado específicamente para uso local y dinámico y no se pueden asignar a través de IANA. El software de aplicación simplemente puede usar cualquier puerto dinámico que esté disponible en el host local, sin ningún tipo de asignación. Por otro lado, el software de la aplicación NO DEBE asumir que un número de puerto específico en el rango de puertos dinámicos siempre estará disponible para la comunicación en todo momento, y un número de puerto en ese rango NO DEBE ser utilizado como un identificador de servicio.
Los puertos reservados:
Los puertos en el rango de Puertos de usuario (1024-49151) están disponibles para la asignación a través de IANA, y PUEDEN usarse como identificadores de servicio después de una asignación exitosa.
Los puertos en el rango de Puertos del sistema (0-1023) también están disponibles para su asignación a través de IANA. Debido a que el rango de puertos del sistema es el más pequeño y el más densamente asignado, los requisitos para las nuevas asignaciones son más estrictos que los del rango de puertos de usuario y solo se otorgarán bajo los procedimientos de "Revisión IETF" o "Aprobación IESG" RFC5226 .
La introducción explica la confusión:
Durante muchos años, la asignación de nuevos nombres de servicio y valores de número de puerto para usar con el Protocolo de control de transmisión (TCP) [RFC0793] y el Protocolo de datagramas de usuario (UDP) [RFC0768] ha tenido
pautas poco claras.
Parece que Windows XP no sigue RFC6335, pero Solaris 10 sí.