Using port number as a service identifier sucks because it means you can only run e.g. one normally-accessible SSH server per IP address. One potential solution is to look up port numbers via DNS SRV records[1], but very few protocol standards demand clients do this.
HTTP and SMTP have their own ad-hoc, partial solutions to this (vhosting, MX records), but most every other service requires a unique IP address per instance.