Como os pacotes de rede são transferidos para a memória no linux?

6

Existe algum comando ou ferramenta para monitorar os pacotes de rede e como esses pacotes são manipulados pela memória e que seguiram para a CPU na plataforma linux?

Usando o tcpdump, posso capturar muitas solicitações do apache, por exemplo, mas não sei como esses pacotes são atribuídos a algum ID do processo.

    
por ibedelovski 16.04.2014 / 15:47

1 resposta

5

Quando um processo do servidor é iniciado, ele emite algumas chamadas do sistema ( socket() e listen() ). O sistema então abre a porta e cria um descritor de arquivo de soquete para o processo interagir. Você pode ver isso com:

Encontre o ID do processo mestre do Apache:

root@frisbee:~# ps -ef | grep apache | grep root
root     27440     1  0 16:06 ?        00:00:00 /usr/sbin/apache2 -k start

Acesse /proc/$pid/fd e veja os sockets:

root@frisbee:~# ls -l /proc/27440/fd | grep socket
lrwx------ 1 root root 64 apr 16 16:12 3 -> socket:[518486]
lrwx------ 1 root root 64 apr 16 16:12 4 -> socket:[518487]

Aqui você pode ver que existem dois sockets abertos pelo Apache. O processo Apache internamente pode usar descritores de arquivos 3 & 4 para ler / gravar dados através da conexão de rede.

Você pode encontrar o mapeamento entre soquetes e portas de escuta com lsof :

root@frisbee:~# lsof | egrep 'IPv6.*(518486|518487)'
apache2   27440                  root    4u     IPv6             518487       0t0        TCP *:http (LISTEN)
apache2   27445              www-data    4u     IPv6             518487       0t0        TCP *:http (LISTEN)
apache2   27446              www-data    4u     IPv6             518487       0t0        TCP *:http (LISTEN)
apache2   27447              www-data    4u     IPv6             518487       0t0        TCP *:http (LISTEN)
apache2   27448              www-data    4u     IPv6             518487       0t0        TCP *:http (LISTEN)
apache2   27449              www-data    4u     IPv6             518487       0t0        TCP *:http (LISTEN)

Existem vários processos do Apache usando o mesmo descritor de arquivo (aberto pelo processo em execução como root , porque é uma porta privilegiada). Estes são os trabalhadores do Apache.

Uma maneira mais fácil de visualizar o link entre a porta e o processo é usar o comando netstat :

mtak@frisbee:~$ sudo netstat -tulpn | grep apache
tcp6       0      0 :::80                   :::*                    LISTEN      4269/apache2   
    
por 16.04.2014 / 16:22