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 nenhum deles passe pelo estado LISTEN.
Durante esse estabelecimento de conexão, cada par enviará um SYN e um ACK como dois pacotes separados. Assim, quando chegarem ao estado ESTABLISHED, serão enviados quatro pacotes (não os três pacotes habituais).
Este é o caminho de CLOSED até SYN SENT até SYN RECEIVED até ESTABELECIDO no diagrama de estados .
Um efeito colateral disso é que ele também funciona quando um terminal TCP se conecta a si mesmo. É raramente útil, mas permitido pelo padrão. Um soquete estabelecido dessa maneira retornará todos os dados que ele envia para si mesmo. Você pode testá-lo com: nc -p 12345 ::1 12345
Você notará que o diagrama de estados 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 do cliente. Eu não sei se o Linux implementou o suporte para essa seqüência em particular, o comando nc
não parece suportá-lo, então provavelmente seria necessário um pouco de codificação para testar.