De acordo com estatísticas de socket, o Apache só escuta IPv6, mas também serve IPv4

0

ss -lnp no servidor mostra as seguintes informações:

# ss -lnp
Recv-Q Send-Q                                                                                                            Local Address:Port                                                                                                              Peer Address:Port 
0      128                                                                                                                          :::22                                                                                                                          :::*      users:(("sshd",3847,4))
0      128                                                                                                                           *:22                                                                                                                           *:*      users:(("sshd",3847,3))
0      10                                                                                                                    127.0.0.1:25                                                                                                                           *:*      users:(("sendmail",1605,4))
0      128                                                                                                                   127.0.0.1:199                                                                                                                          *:*      users:(("snmpd",22765,8))
0      128                                                                                                                          :::80                                                                                                                          :::*      users:(("httpd2-prefork",15058,4),("httpd2-prefork",2235,4),("httpd2-prefork",1209,4))
# 

De acordo com a saída de ss , pode-se pensar que o Apache só escuta a porta TCP 80 em todos os endereços IPv6. Na verdade, o Apache também atende a solicitações pelo IPv4. Por que? Além disso, como é possível que os PIDs 15058, 2235 e 1209 todos ouçam na mesma porta TCP?

    
por Martin 22.10.2015 / 11:17

1 resposta

3

1) É assim que o Linux funciona (por padrão) se você escutar conexões em uma porta ipv6.

2) Os processos compartilham o mesmo "socket", que foi criado e "ligado" à porta 80.

Nesse caso, ele é compartilhado porque os processos foram bifurcados (clonados) após a abertura do soquete. Isso é exatamente o mesmo que processos bifurcados que herdam arquivos abertos. Como quando você executa ls , ele herda os descritores de arquivos do shell, o que inclui um identificador que permite gravar sua saída no terminal. O Unix trata muitas coisas como arquivos:).

No entanto, não seria possível ligar um segundo socket para escutar na mesma porta (não importa qual processo você é). (Pedantismo: a menos que ambos os processos usem SO_REUSEPORT ).

    
por 22.10.2015 / 12:05