Pergunta

Por que é que as conexões TCP para um fim interface de auto-retorno em TIME_WAIT (socket fechado com set SO_DONTLINGER), mas as ligações idênticas a um host diferente não acabar em TIME_WAIT (eles são repostos / destruídos imediatamente)? ??

Aqui estão os cenários para ilustrar:

(A) dois aplicativos, um cliente e um servidor, são ambos rodando na mesma máquina Windows. O cliente se conecta ao servidor via interface de auto-retorno do servidor (127.0.0.1, porta xxxx), envia dados, receber dados, e fecha a socket (SO_DONTLINGER é definido).

Vamos dizer que as conexões são muito de curta duração, de modo que o aplicativo cliente é estabelecer e destruir um grande número de conexões a cada segundo. O resultado final é que as tomadas acabam em TIME_WAIT, eo cliente eventualmente, esgota o seu número máximo de soquetes (no Windows, este é ~ 3900 por padrão, e estamos assumindo que este valor não será alterado no registro).

(B) duas aplicações igual ao cenário (A), mas o servidor está em um host diferente (o cliente ainda está em execução no Windows). As conexões são idênticas em todos os sentidos, exceto que eles não estão destinados para 127.0.0.1, mas algum outro IP em seu lugar. Aqui as conexões na máquina cliente não entrar em TIME_WAIT, e o aplicativo cliente pode continuar a fazer conexões indefinidamente.

Por que a discrepância?

Foi útil?

Solução

O estado TIME_WAIT só ocorre em uma das extremidades da conexão - o fim que se fecha em primeiro lugar. Para o loopback interface de ambas as extremidades estão na mesma máquina que você sempre verá TIME_WAIT.

Em seu outro caso, tente olhar para a outra máquina. Eu acho que você vai ver os soquetes TIME_WAIT lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top