É possível usar o socket de escuta para iniciar a conexão do cliente?

1

Hoje eu notei uma situação dessas:

[[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 é o mesmo que o soquete de destino. É possível ? Alguém pode por favor explicar.

    
por pradeepchhetri 29.10.2014 / 13:07

1 resposta

7

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.

    
por 17.11.2014 / 09:59