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.