Faz parte do cabeçalho TCP (ou UDP, etc.) do pacote. Então o servidor descobre porque o cliente diz isso. Isso é semelhante a como ele descobre o endereço IP do cliente (que faz parte do cabeçalho IP).
Por exemplo, todo pacote TCP inclui um cabeçalho IP (com IP de origem, IP de destino e protocolo [TCP], pelo menos). Em seguida, há um cabeçalho TCP (com porta de origem e destino, além de mais).
Quando o kernel recebe um pacote SYN (o início de uma conexão TCP) com um IP remoto de 10.11.12.13 (no cabeçalho IP) e uma porta remota de 12345 (no cabeçalho TCP), ele então conhece o remoto IP e porta. Envia de volta um SYN | ACK. Se obtiver um ACK de volta, a chamada listen
retornará um novo soquete, configurado para essa conexão.
Um soquete TCP é identificado exclusivamente pelos quatro valores (IP remoto, IP local, porta remota, porta local). Você pode ter várias conexões / soquetes, desde que pelo menos uma delas seja diferente.
Normalmente, a porta local e o IP local serão os mesmos para todas as conexões com um processo do servidor (por exemplo, todas as conexões com o sshd estarão em local-ip: 22). Se uma máquina remota fizer várias conexões, cada uma utilizará uma porta remota diferente. Assim, tudo, menos a porta remota, será o mesmo, mas tudo bem - apenas um dos quatro deve ser diferente.
Você pode usar, por exemplo, wirehsark para ver o pacote e rotular todos os dados para você. Aqui está a porta de origem destacada (observe-a destacada no pacote decodificado, bem como o dump hexadecimal na parte inferior):