Ik implementeer een distributed protocol dat met IP multicast werkt. De servers op de verschillende hosts zijn aanspreekbaar via een 224.x.x.x multicast adres. Elke host kan via dat multicast adres ook zichzelf bereiken.
Het protocol moet gebruikt worden in een dynamische omgeving waarin IP adressen niet statisch zijn. In een testje zijn er twee devices waarvan device A een server draait. Zodra A de server draait kan device B een ping doen naar het 224.x.x.x adres.
Het probleem is nu dat een wijziging van het IP adres van A leidt tot problemen bij device A zelf. Na de wijziging van het adres kan device B nogsteeds succesvol pingen naar A, en krijgt dan een reply terug van het nieuwe adres van A. Tevens kan B succesvol een request sturen naar het multicast kanaal en het krijgt dan een nogsteeds een reply van A (met het nieuwe adres). Echter, op device A zelf is het multicast kanaal lokaal helemaal dood. Pingen geeft meldingen als "Network is unreachable" en bovendien is het herstarten van de server niet mogelijk omdat het openen van een nieuwe multicast socket mislukt (ook al is SO_REUSEADDR gebruikt).
Kort gezegd: als A z'n IP adres verandert dan kan A zichzelf niet meer bereiken, maar andere devices kunnen A nog wel bereiken en vice versa. Ik denk aan een routeringsprobleem op de localhost, maar je zou verwachten dat die routering in de kernel gecorrigeerd wordt zodra A z'n adres (via ifconfig of wat dan ook) op een bepaalde adapter aanpast. Naar buiten toe gaat het immers nogsteeds helemaal goed met z'n nieuwe IP adres.
Heeft iemand hier een verklaring voor? De enige oplossing die ik nu zie is om op linklayer niveau raw ethernet packets af te tappen en dan de voor ons bestemde multicastpakketten er zelf uit te pikken. Dat is echter niet zo elegant, en bovendien zou alles op IP niveau gewoon moeten werken. Is dit een bug op zie ik iets over het hoofd?
Het protocol moet gebruikt worden in een dynamische omgeving waarin IP adressen niet statisch zijn. In een testje zijn er twee devices waarvan device A een server draait. Zodra A de server draait kan device B een ping doen naar het 224.x.x.x adres.
Het probleem is nu dat een wijziging van het IP adres van A leidt tot problemen bij device A zelf. Na de wijziging van het adres kan device B nogsteeds succesvol pingen naar A, en krijgt dan een reply terug van het nieuwe adres van A. Tevens kan B succesvol een request sturen naar het multicast kanaal en het krijgt dan een nogsteeds een reply van A (met het nieuwe adres). Echter, op device A zelf is het multicast kanaal lokaal helemaal dood. Pingen geeft meldingen als "Network is unreachable" en bovendien is het herstarten van de server niet mogelijk omdat het openen van een nieuwe multicast socket mislukt (ook al is SO_REUSEADDR gebruikt).
Kort gezegd: als A z'n IP adres verandert dan kan A zichzelf niet meer bereiken, maar andere devices kunnen A nog wel bereiken en vice versa. Ik denk aan een routeringsprobleem op de localhost, maar je zou verwachten dat die routering in de kernel gecorrigeerd wordt zodra A z'n adres (via ifconfig of wat dan ook) op een bepaalde adapter aanpast. Naar buiten toe gaat het immers nogsteeds helemaal goed met z'n nieuwe IP adres.
Heeft iemand hier een verklaring voor? De enige oplossing die ik nu zie is om op linklayer niveau raw ethernet packets af te tappen en dan de voor ons bestemde multicastpakketten er zelf uit te pikken. Dat is echter niet zo elegant, en bovendien zou alles op IP niveau gewoon moeten werken. Is dit een bug op zie ik iets over het hoofd?
"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein