O RFC 6335 explica isso:
Ports in the Dynamic Ports range (49152-65535) have been
specifically set aside for local and dynamic use and cannot be
assigned through IANA. Application software may simply use any
dynamic port that is available on the local host, without any
sort
of assignment. On the other hand, application software MUST NOT
assume that a specific port number in the Dynamic Ports range
will
always be available for communication at all times, and a port
number in that range hence MUST NOT be used as a service
identifier.
As portas reservadas:
Ports in the User Ports range (1024-49151) are available for
assignment through IANA, and MAY be used as service identifiers
upon successful assignment.
Ports in the System Ports range (0-1023) are also available for
assignment through IANA. Because the System Ports range is both
the smallest and the most densely assigned, the requirements for
new assignments are more strict than those for the User Ports
range, and will only be granted under the "IETF Review" or "IESG
Approval" procedures RFC5226.
A introdução explica a confusão:
For many years, the assignment of new service names and port number
values for use with the Transmission Control Protocol (TCP) [RFC0793]
and the User Datagram Protocol (UDP) [RFC0768] has had less than
clear guidelines.
Parece que o Windows XP não está seguindo o RFC6335, mas o Solaris 10 o faz.