Por que o telnet envia um RSET quando eu o controle-c ao conectar?

3

Solaris 10 usando snoop para capturar pacotes.

Quando faço telnet para um endereço IP não utilizado e aguardo a tentativa de conexão expirar, tudo se comporta como esperado (os SYNs são enviados várias vezes até que o tempo de estabelecimento da conexão seja excedido e o telnet seja encerrado).

Quando faz a mesma coisa, mas cancela a tentativa antes que ela atinja o tempo limite, com control-c, o último pacote tem um RSET.

Isso é feito por um motivo? Talvez a pilha da rede esteja assumindo que os SYNs foram bem-sucedidos, mesmo que o SYN-ACK não tenha voltado, por isso envia um RSET para impedir que o sistema remoto fique meio aberto?

Eu havia lido o Stevens TCP / IP Illustrated, Vol 1 há muito tempo, e não me lembro disso sendo discutido (eu verifiquei com um rápido google, mas não desenterrei o livro).

    
por benc 09.09.2011 / 03:41

2 respostas

3

Como você suspeita - é uma medida justa para notificar o host remoto a anular a tentativa de conexão; para todo o seu sistema sabe, o host mandou de volta um SYNACK e você não entendeu.

É basicamente um "eh, host remoto, se você tentou se conectar de volta para mim, pode ir em frente e parar".

    
por 09.09.2011 / 04:09
3

O TCP não permite que uma sessão esteja em um estado ambíguo, esteja essa sessão estabelecida ou em processo de estabelecimento. Ele precisa finalizar a conexão ou a tentativa de conexão normalmente, no sentido de que não irá apenas interromper a conexão sem enviar um FIN ou um RST (até onde eu saiba).

Isso não quer dizer que uma sessão nunca possa estar em um estado ambíguo devido a fatores fora do alcance do TCP, como um link interrompido que causa uma abertura parcial em uma extremidade da sessão. Do ponto de vista do TCP, uma conexão semiaberta é simplesmente uma conexão que está ociosa por muito tempo (a menos que o TCP keep-alive seja implementado).

    
por 09.09.2011 / 04:31

Tags