и как я сразу не присмотрелся.. КТ при попытке пингать 3828 выдаёт на arp-стадии код ошибки S, согласно его документации, это:
'S' size of ARP packet is wrong
то есть, шлёт всё таки 3828 ответные arp, но сформированы они похоже не по
RFC 826. этим вероятно и объясняется, почему компьютеры, где arp-пакеты разбираются программно, их воспринимают, а железки заточеные под точную их структуру - спотыкаются.
сейчас попробую сдампить сниффером экземпляр arp reply от 3828, поищу расхождения со спецификацией и выложу сюда.
...
нашёл. вот что имеем:
Код:
11:00:29.187513 00:1c:c4:a8:fa:f8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 172.17.0.11 tell 172.17.0.10
0x0000: ffff ffff ffff 001c c4a8 faf8 0806 0001 ................
0x0010: 0800 0604 0001 001c c4a8 faf8 ac11 000a ................
0x0020: 0000 0000 0000 ac11 000b ..........
11:00:29.188088 00:19:5b:17:d6:00 > 00:1c:c4:a8:fa:f8, ethertype ARP (0x0806), length 64: arp reply 172.17.0.11 is-at 00:19:5b:17:d6:00
0x0000: 001c c4a8 faf8 0019 5b17 d600 0806 0001 ........[.......
0x0010: 0800 0604 0002 0019 5b17 d600 ac11 000b ........[.......
0x0020: 001c c4a8 faf8 ac11 000a 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 0000 0000 cdfe b2d5 ................
в пакете всё нормально, кроме, собственно, его длины.
по спецификации на arp, размер arp-пакета всегда равен 28 байтам; но по спецификации на передачу кадров ethernet (
RFC 894) минимальный размер поля данных ethernet-фрейма равен 46 байтам, поэтому arp-пакет при отправке дополняется 18-ю нулевыми (обычно) байтами, 46-28=18.
у arp reply от 3828 в конце наблюдается ещё 4 байта. судя по тому что они каждый раз меняются - это похоже на контрольную сумму фрейма (crc32), но вообще-то сниффер не должен её видеть, так как crc32 проверяется на уровне драйвера и отрезается от пакета перед передачей его на верхние уровни. раз пакет до сниффера успешно дошёл - значит это и было сделано, из чего можно сделать предположение, что
на 3828 crc32 по крайней мере в arp-пакетах "пришивается" к фрейму дважды, и если это так - это определённо баг, подлежащий исправлению.
итого, КТ (и вполне вероятно другие железки, в том числе и д-линковские, о которых в этом топике писалось ранее) ожидает ровно 60 байт (ведь больше быть и не должно, там и так паддинг нулями), а получает переполнение и потому дальше ничего не работает..
вот для сравнения "нормальный" arp-пакет, который КТ нормально воспринимает:
Код:
11:29:03.904717 00:1c:c4:a8:fa:f8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: arp who-has 172.17.0.1 tell 172.17.0.10
0x0000: ffff ffff ffff 001c c4a8 faf8 0806 0001 ................
0x0010: 0800 0604 0001 001c c4a8 faf8 ac11 000a ................
0x0020: 0000 0000 0000 ac11 0001 ..........
11:29:03.906001 00:02:b3:4c:a4:06 > 00:1c:c4:a8:fa:f8, ethertype ARP (0x0806), length 60: arp reply 172.17.0.1 is-at 00:02:b3:4c:a4:06
0x0000: 001c c4a8 faf8 0002 b34c a406 0806 0001 .........L......
0x0010: 0800 0604 0002 0002 b34c a406 ac11 0001 .........L......
0x0020: 001c c4a8 faf8 ac11 000a 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 0000 0000 ............
тут всё нормально, 60 байт с заголовком, такие ответы шлют 3028, 3526, а вот с 3828 - беда.
проверьте, пожалуйста, мою гипотезу, если подтвердится - ждём-с новой прошивки asap.