To jest pytanie o standardy protokołu internetowego.
- Klient DCHP (dhcpcd-5.2.10 z Androida 4.x) inicjuje interfejs
- Klient DHCP wysyła komunikat DHCPDISCOVER
- Serwer DHCP wysyła komunikat DHCPOFFER
- Następnie klient wysyła komunikat DHCPREQUEST, który zawiera „Żądany adres IP” inny niż „Twój adres IP” od DHCPOFFER i nie zawiera „Identyfikatora serwera DHCP”.
Widzę to z przechwytywania pakietów (można je otworzyć za pomocą Wireshark) na urządzeniu serwera dhcp.
RFC 2131 mówi:
The client broadcasts a DHCPREQUEST message that MUST include
the 'server identifier' option to indicate which server
it has selected, and that MAY include other options specifying
desired configuration values.
The 'requested IP address' option MUST be set to the value
of 'yiaddr' in the DHCPOFFER message from the server.
Pytanie: czy prawidłowe zachowanie klienta DHCP? Czy standardy się zmieniły?
This DHCPREQUEST message is broadcast and relayed through DHCP/BOOTP relay agents.
. Mmm, więc potrzebujemy innej metody, aby sprawdzić, czy to jest, RENEW
czy nie. (Muszę poczytać o tym :) Ale kiedy to czytam, są pewne przypadki, w których 'server identifier' MUST NOT be filled in
.
DHCPREQUEST
s mają ustawiony „Identyfikator serwera DHCP” (linie 73 i 77)? Odczytując również RFC 2131 tylko podczas stanu WYBIERANIA, należy wpisać „Identyfikator serwera DHCP”. Podczas INIT-REBOOT, ODNOWIENIA i PONOWNEGO REBINOWANIA NIE MUSI być ustawiony.
RENEW DHCPREQUEST
? Zgodnie z tym identyfikator serwera NIE MOŻE być wypełniony podczasRENEW
-request. A ponieważ Twoim celemDHCPREQUEST
jest emisja pojedyncza (od 0.0.0.0 do 255.255.255.255), może to byćRENEW DHCPREQUEST
. (PS. Tutaj nie jestem ekspertem :)