saída netstat é “ESTABLISHED -” (nenhum nome de programa anexado). Qual é o problema?

1

Meu programa do servidor está em execução e estou tentando estabelecer algumas conexões TCP do cliente redis.

Estou tentando estabelecer 1150 conexões de cliente, e quando eu verifico o netstat no lado do servidor eu encontro um estado "ESTABLISHED -" onde não entendo o motivo do traço ( - ), omitindo o nome do programa .

No lado do cliente:

[root@smarak-2storage-testvnf-vm0 src]# ulimit -n
4096
[root@smarak-2storage-testvnf-vm0 src]# ./redis-benchmark -h 10.111.89.230 -p 6379 -c 1150 -t set -n 20000 -d 10000 -r 100000000000000 -I

No lado do servidor:

[root@sdl-blr-vm-1-14 src]# ulimit -n
1024
[root@sdl-blr-vm-1-14 src]# netstat -anp | grep -i 6379
tcp      129      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34276     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:35048     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34614     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34234     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34984     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED 
-

Por que estou recebendo essa ESTABLISHED - de saída? Eu acho que existem 1024 descritores de arquivo no lado do servidor e, portanto, 1150 conexões são iniciadas do lado do cliente, apenas 1024 conexões devem ser estabelecidas, ou seja, "ESTABLISHED 31535 / respAccess" como estado (com nome do programa) e outros devem ser descartados. Se houver uma conexão com o estado "ESTABLISHED", então por que nenhum nome de programa anexado a ele?

    
por SKM 22.08.2017 / 08:16

1 resposta

2

Como você está usando uma conta root, você pode ver todos os processos de todos os usuários - indica que a conexão é feita pelo kernel.

Para lidar com a conexão, você deve chamar a função listen() com os parâmetros do descritor de soquete e do backlog. De acordo com man listen :

The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of ECONNREFUSED or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.

The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting to be accepted, instead of the number of incomplete connection requests.

EDITAR:
Conexões TCP de entrada são tratadas pelo kernel (handshake TCP), é por isso que você vê conexões como ESTABELECIDO. Quando o kernel estabelece a conexão TCP, a conexão é adicionada à fila quando está aguardando que o programa seja aceito. O Backlog indica o tamanho da fila, não o número máximo de conexões.

Assim, '-' sign in netstat indica que o cliente solicitou a conexão com o seu servidor, o kernel tratou o handshake TCP e adicionou conexão à fila, mas a conexão ainda não foi aceita pelo seu servidor.

EDIT2:
Confira o site . Há um fluxograma legal que descreve todo o processo.

    
por 22.08.2017 / 10:48