Posso forçar pacotes IP a serem transportados através de uma conexão de “loopback” na mesma máquina?

1

Minha pergunta a seguir é sobre um nível muito inicial e posso não ter conhecimento significativo sobre o básico da rede. Embora a questão esteja de alguma forma relacionada aos conceitos de servidor / cliente, a principal questão por trás não é definitivamente a programação. Então eu tento aqui e espero não estar completamente fora do tópico. Eu não sei onde a pergunta teria sido melhor colocada ... Por favor, não feche a questão sem dar uma pista sobre o que está errado.

Dado uma única máquina (no meu caso um PC), ela pode ter mais de uma placa de rede instalada, fornecendo, digamos, duas interfaces físicas A , B . De acordo com um anterior questionar essas duas interfaces (Camada 1) pode ser atribuída a dois endereços IP diferentes (Camada 3):

The layer-3 module registered with the layer-2 module for an interface will be assigned the layer-3 address for that interface.

Por exemplo, IP(A) = 192.168.1.10 e IP(B) = 192.168.2.10; ambos atribuídos pelas propriedades do TCP / IP para a placa de interface específica.

A pergunta:

Digamos que um processo do servidor, executando na mesma máquina seja iniciado, registrando-se em IP (B) e em alguma porta antes de começar a escutar conexões de entrada. Por isso, ele está escutando as solicitações de entrada que chegam pela interface B.

Agora, tenho um cliente TCP na mesma máquina e desejo abrir uma conexão TCP com o servidor em IP (B). Então, eu ingenuamente conecto A e B com um cabo de loopback externo e espero que o tráfego ultrapasse esse cabo quando uma conexão com B for solicitada. Mas não há como informar ao cliente, qual interface X deve usar ... Será que vai usar A ou B ? Eu até adivinho, que usaria B , porque A e B são redes diferentes de acordo com a máscara de sub-rede escolhida e, portanto, uma solicitação para um endereço final em B será emitida pela interface B ? Como uma questão secundária: Qual é o caminho dos pacotes agora, porque o cabo não é necessário. Existe um loopback interno?

Mas e se eu quiser forçar o tráfego pelo cabo de loopback (por qualquer motivo)? Isso é sequer possível? Como posso obter, que um cliente está usando A como interface de saída ao endereçar IP(B) . Para chegar ao fim: Eu só quero garantir que todos os pacotes enviados entre cliente e servidor sejam transportados pelo cabo.

Quando A e B e também servidor e cliente estariam em máquinas diferentes, cada qual tendo uma única interface de rede, não teria problemas para entender. Mas aqui?

Por que preciso disso?

Na realidade, como próximo passo, quero substituir o cabo entre A e B por uma configuração experimental, onde taxas de erro de bit podem ser alteradas adicionando intencionalmente alguns tipos de erros estatísticos e de ruído para simular / emular um canal muito ruim. Eu poderia colocar cada lado em uma máquina diferente, mas preferiria ter as duas coisas iguais.

    
por michael 27.06.2017 / 23:12

2 respostas

2

A maioria das pilhas de rede dos sistemas operacionais verá que o endereço de destino para o qual você está enviando é um endereço que a própria máquina local possui e usará um mecanismo interno de loopback de software para que o tráfego não incorra no custo hospedar ou mesmo atingir o hardware Ethernet. Na verdade, na maioria das vezes o pessoal de rede fala sobre loopback, eles estão falando sobre esses mecanismos de loopback que são completamente internos à pilha de software de rede. "loopback" quase nunca significa "sair de uma placa de rede e através de um loop externo do cabo de rede e voltar para outra placa de rede".

As formas de forçar o tráfego de uma NIC e vice-versa podem variar de sistema operacional para sistema operacional. Por exemplo, alguns membros da família BSD de Unixes, como FreeBSD e macOS, têm um sysctl chamado net.link.ether.inet.useloopback , cujo padrão é ser 1 (habilitado), mas pode ser desabilitado para 0 (desabilitado) para forçar o tráfego para sai do NIC mesmo quando ele é destinado a outro endereço IP na mesma máquina.

    
por 28.06.2017 / 05:29
0

Acho que precisamos do seu sistema operacional ou da marca de dispositivos para fornecer uma solução mais detalhada, mas você pode conseguir essa configuração como uma rota padrão para as redes.

Isso significa que você vai definir que todo o tráfego da rede 192.168.1.0/24 estará fora do endereço IP x.x.x.x ou de alguma porta específica como esta.

Você deve ter uma tabela de roteamento onde você definiu a rota para obter o tráfego através dessa porta / endereço.

    
por 27.06.2017 / 23:21