c # - Multicast-pakker modtages ikke med flere NIC'er

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et problem, jeg kan ikke synes at sortere ud og efter at have kigget gennem webstedet så jeg ikke mit eksakte problem, så her går vi.


Jeg har en pc med flere NIC-adaptere. Den ene er sat til 192.168.6.1 og den anden er sat til 192.168.2.90, begge har samme undernetmaske på 255.255.0.0. Begge NIC'er er tilsluttet samme netværksknap (ikke styret, kun en 32 portkontakt). Resterende på samme netværk er flere pc'er med samme undernetmaske, men forskellige IP-adresser i 192.168.6.X-området (192.168.6.6, 192.168.6.7 osv.)


Jeg har en applikation, der kører på pc'en med flere NIC-adaptere, og den er bindende og slutter sig til en multicast-gruppe for at modtage pakker. Problemet jeg har er, at de multicast-pakker, der sendes fra en af ​​pc'erne i systemet (dvs. 192.168.6.6) ikke modtages af min ansøgning. Jeg kan se multicast-pakkerne i Wireshark, når jeg ser enten NICs trafik, så jeg tror, ​​at hver NIC får pakkerne ordentligt.


Et lille stykke:


{
    IPEndPoint localIPEndPoint
    localIPEndPoint = new IPEndPoint(IPAddress.Parse("192.168.6.1"), 16466);
    receiveUDPClient = new UdpClient(localIPEndPoint);

    receiveUDPClient.JoinMulticastGroup(IPAddress.Parse("239.254.2.1"));
    receiveUDPClient.MulticastLoopback = false;
    receiveUDPClient.DontFragment = true;
    receiveUDPClient.Client.ReceiveBufferSize = 16384;

    // ....
    // ....

    BeginReceiveAudio();
}

public void BeginReceiveAudio()
{
    receiveUDPClient.BeginReceive(ReceiveCallback, receiveUDPClient);
}


Jeg behandler pakkerne i en tilbagekald, som jeg ved, fungerer fint, når du bruger et enkelt NIC - faktisk hvis jeg bare deaktiverer 192.168.2.90 NIC-adapteren, modtager min ansøgning helt fint.


private void ReceiveCallback(IAsyncResult ar)
{
    byte[] receivedBytes = receiveUDPClient.EndReceive(ar, ref localIPEndPoint);

    // Process Data...

    BeginReceiveAudio();
}


Det andet interessante er, at hvis jeg bytter adapterens IP-adresser, mens begge aktiveres, modtager min ansøgning pakkerne fint! Jeg er slet ikke bekendt med, hvordan pakkerne bliver sendt til hver NIC, jeg antog, at når du binde til en IP-adresse og deltage i en multicast-gruppe, sendes pakker sendt til den multicast-gruppe, der modtages af pc'en, til hver NIC, der er en del af den multicast-gruppe.


Enhver anelse, hvad sker der her? I betragtning af at det er et fælles netværk, hvad ville være grunden til at bruge en NIC til at lade min ansøgning modtage pakkerne, men den anden gør det ikke?

Bedste reference


Du skal deltage i multicast-gruppen via hver tilgængelig grænseflade, så IGMP-meddelelserne sendes ud via hver, så værterne på alle disse netværk ved, at der er et multicast-medlem. Hvis du kun deltager en gang uden at angive grænsefladen, bruges den statiske IP-rute til at bestemme, hvor IGMP er sendt, hvilket kun er et netværk.