Hoje notei tal situação:
[[email protected] ~]#netstat -taupen | grep 54310
tcp 0 0 ::ffff:10.0.12.209:54310 ::ffff:10.0.12.209:54310 TIME_WAIT 0 0 -
Você pode notar que o soquete de origem é igual ao soquete de destino. É possível ? Alguém por favor pode explicar.
As conexões TCP geralmente são estabelecidas usando um soquete de escuta. Mas isso não é um requisito. O padrão TCP permite que ambas as extremidades enviem um pacote SYN sem que nenhuma delas passe pelo estado LISTEN.
Durante o estabelecimento da conexão, cada par enviará um SYN e um ACK como dois pacotes separados. Então, quando eles atingirem o estado ESTABLISHED, quatro pacotes serão enviados (não os três pacotes usuais).
Este é o caminho de CLOSED para SYN SENT para SYN RECEIVED para ESTABLISHED no diagrama de estado .
Um efeito colateral disso é que também funciona quando um endpoint TCP se conecta a si mesmo. Raramente é útil, mas permitido pelo padrão. Um soquete estabelecido dessa maneira retornará todos os dados que ele enviar de volta para si mesmo. Você pode testá-lo com:
nc -p 12345 ::1 12345
Você notará que o diagrama de estado também permite uma transição de LISTEN para SYN SENT. Portanto, o padrão permite que um soquete de escuta seja usado para iniciar uma conexão de cliente. Não sei se o Linux implementou suporte para essa sequência específica, o
nc
comando parece não oferecer suporte, portanto, provavelmente seria necessário um pouco de codificação para testar.