Como uma porta "escuta", puxa ou empurra?


9

Quando você escreve um código para escutar de uma porta, como 80 por exemplo, o que acontece sob o capô? O método que o sistema operacional usa para ouvir é puxar ou empurrar? Em outras palavras, o SO verifica essa porta a cada milissegundos x, por exemplo?

Eu simplesmente não entendo. Quanto mais eu penso sobre isso, mais me parece que não pode ser outra coisa senão puxar.

Quero dizer, mesmo que o sistema operacional defina uma função de retorno de chamada, ainda assim algo deve entender que chegaram novas informações para chamar essa função de retorno de chamada. Que algo ainda deve usar pull para entender a chegada dos novos dados.

Como uma porta escuta?

Respostas:


14

Teoricamente, isso depende das especificidades do sistema operacional e do hardware da rede. Na prática, sistemas operacionais e hardware convencionais usam um modelo de envio baseado em interrupções para interação entre o hardware e o sistema operacional (e todo o software controlado pelo sistema operacional).

Basicamente, uma interrupção é um mecanismo de nível muito, muito baixo, através do qual o hardware periférico pode sinalizar à CPU que existe um evento que precisa ser tratado (como um pacote de rede que chegou, uma tecla foi pressionada etc.). A CPU reage a isso suspendendo o que estava fazendo naquele momento e executando um manipulador de interrupção.

A manipulação de interrupção geralmente é feita pelo sistema operacional ou, pelo menos, iniciada pelo sistema operacional e entregue a um código de aplicativo mais específico que foi registrado como interessado em um tipo específico de evento.


você quer dizer que a porta é um hardware periférico que, na chegada de um novo pacote de rede, envia uma interrupção para a CPU. OK, mas como a porta entende que um novo pacote de rede chegou? Através do mecanismo de tração? ou através de eletricidade? Quão?
Saeed Neamati

1
A placa de rede é o hardware periférico. Uma porta é puramente uma construção de software do protocolo TCP / IP. O sistema operacional reagirá à interrupção do hardware, chame a pilha TCP / IP, que possui algum tipo de registro cuja porta tem aplicativos escutando. Se não houver nenhum ouvinte registrado, o pacote será ignorado ou uma resposta de erro será enviada. Se houver um ouvinte, ele será chamado.
Michael Borgwardt

desculpe seguir a cadeia que estritamente :). Mas como a placa de rede entende que um novo pacote chegou. Estou apenas tentando descobrir se o dispositivo original nesta cadeia (aplicativo, SO, hardware, fio de rede) usa pull ou push. Obrigado por ficar comigo, amigo. :)
Saeed Neamati

1
@ Saeed: Não tenho certeza de que a distinção "puxar versus empurrar" faz sentido no nível do hardware. E isso depende dos detalhes da tecnologia de rede. Por exemplo, o firmware de uma placa Ethernet ou Wi-Fi precisará monitorar continuamente todo o tráfego Wi-Fi até encontrar um pacote cujo endereço MAC de destino corresponda ao seu, e nesse momento enviará uma interrupção. Eu não chamaria isso de "puxar", já que o cartão apenas ouve passivamente. Mas o hardware de rede baseado em conexões ponto a ponto pode funcionar de maneira completamente diferente.
Michael Borgwardt

1
"Mas como a placa de rede entende que um novo pacote chegou"? Voltagem. A sério. Um sinal chega por rádio ou através de um fio. A tensão sinaliza a atividade que o cartão decodifica como bits. Ele interrompe a CPU para indicar que os bits chegaram.
S.Lott

8

OK, não sou engenheiro de hardware Ethernet, mas acho que posso dar uma facada na sua pergunta. Quando você escreve um código para escutar de uma porta, acontece o seguinte:

  • O código do seu aplicativo bloqueia / dorme / "seleciona" / pesquisas até o sistema operacional sinalizar que um pacote chegou (com alguns bits no cabeçalho IP indicando que o pacote está associado a essa "porta" específica) e, portanto, ao aplicativo que está ouvindo essa porta)
  • O sistema operacional normalmente não pesquisa (em arquiteturas x86 / PC) novos pacotes, apenas roda alegremente até receber uma interrupção do hardware da rede Ethernet (transmitida pelo driver de rede Ethernet, a interface OS / hardware).
  • O próprio hardware de rede Ethernet sob as tampas normalmente contém um controlador Ethernet e alguns "buffers de recebimento", também conhecidos como "buffers de pacotes". O driver de rede Ethernet gerenciará os detalhes de aviso de que um buffer está cheio e o sistema operacional deve ser notificado; Não estou totalmente claro se isso é tipicamente push ou pull dentro do hardware Ethernet, mas suspeito que seja acionado por interrupção ou se algum registro no chip é definido quando um buffer está pronto. Mas o que define os buffers?
  • Uma parte de nível ainda mais baixo do hardware Ethernet preenche os buffers (ou pacotes de DMAs diretamente na memória principal). Uma lógica de nível muito baixo realmente reconhece as oscilações de tensão (ou sinalização óptica) e as traduz como "bits" e coloca os resultados nos buffers de recebimento de pacotes (e talvez defina valores de registro no hardware Ethernet). (Nota: antes das placas de interface de rede, quando as pessoas usavam conexões de porta serial / paralela, um único byte chegando poderia gerar uma interrupção de hardware (IRQ) no sistema operacional; consulte o parágrafo quatro de http://zone.ni.com/devzone / cda / tut / p / id / 4052 )
  • Como esse hardware de nível mais baixo sabe o que constitui um "bit"? Bem, a Ethernet , pelo menos a maioria das mais antigas / comuns, usa o Manchester Coding decodificar oscilações de tensão em bits. O que isso implica? Bem, como essa página menciona, há uma suposição subjacente de que cada bit é transmitido em um tempo fixo, um sinal de relógio implícito. (É por isso que as velocidades Ethernet nos padrões são fixadas em 10Mb / s, 100Mb / s, 1000Mb / s etc. e não completamente variáveis; ambos os lados da conexão Ethernet devem concordar com a taxa de transmissão através da configuração ou de algum mecanismo inicial de handshake. quando o cabo Ethernet está conectado. Há um circuito de relógio real no hardware em ambos os lados do fio que suporta essas ou uma dessas frequências. Às vezes, a taxa desse relógio é chamada de frequência ou taxa de sinalização.) Enquanto eu chame de amostragem, não de polling / pull,

Portanto, sua intuição de que "puxar" ocorre é, no nível mais baixo do hardware, talvez correta ... o circuito Ethernet "puxa" qual é o nível de tensão em determinados intervalos. (Mas o termo "puxar" pode ser totalmente incorreto se alguém estiver falando no nível do sistema operacional.) Obviamente, se você começar a falar sobre níveis de tensão e exatamente como as coisas são acionadas, nem a física elétrica nem a óptica usarão os termos "push "ou" pull "para descrever campos e potenciais elétricos, mas vamos assumir que somos todos programadores, não físicos aqui. :-)


3

O código que escuta uma porta apenas espera por uma mensagem da rede.

Sempre que o chip Ethernet recebe uma mensagem, é gerada uma interrupção. O kernel lida com essa interrupção e encaminha a mensagem para o driver de rede. Essa mensagem passa pela pilha TCP / IP e é filtrada ou passada para o código que escuta a porta.


o problema está aqui. Como o chip Ethernet recebe uma mensagem? É apenas outro tipo de atração? O chip Ethernet verifica a voltagem do fio da rede em intervalos, por exemplo?
Saeed Neamati

4
Este é um nível elétrico. Como uma lâmpada detecta o estado de sua troca? Esta não é uma pesquisa periódica. Embora os detalhes sejam mais complexos em um chip Ethernet, isso é basicamente o mesmo.
Mouviciel 12/09/11

"Como o chip Ethernet recebe uma mensagem". Voltagem. Elétrons em um fio ou ondas de rádio no ar. O chip é ativado pela tensão de entrada e coleta os bits. Em seguida, interrompe a CPU para indicar a presença de bits. A CPU precisa parar de fazer o que mais estava fazendo e coletar os bits antes que mais cheguem. Voltagem.
S.Lott

3

O hardware Ethernet será o responsável pela pesquisa do fio físico (ou sem fio). Quando houver uma razão "suficientemente boa", interromperá o processador. O processador descobrirá o driver adequado que lidará com a interrupção. O manipulador de interrupção manipulará o evento (leitura / gravação de dados). O driver também informará o sistema operacional para ativar os threads em espera.


Como o hardware Ethernet controla o fio físico? E se eles votarem, eles realmente usam pull, certo? Eles assistem o fio a cada 10 milissegundos mais ou menos?
Saeed Neamati
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.