TCP-IP крупным планом

       

ICMP запрос и отклик маски адреса.



Рисунок 6.4 ICMP запрос и отклик маски адреса.


Поля идентификатора и номера последовательности в ICMP сообщении могут быть установлены по выбору отправителя, эти же значения будут возвращены в отклике. Именно таким образом отправитель идентифицирует отклик на свой запрос.

Мы можем написать простую программу (которая называется icmpaddrmask), которая выдает ICMP запрос маски адреса и печатает все отклики. Обычно, запрос отправляется на широковещательный адрес, мы поступим точно так же. Адрес назначения (140.252.13.63) это широковещательный адрес для подсети 140.252.13.32 (см. рисунок 3.12).

sun % icmpaddrmask 140.252.13.63
received mask = ffffffe0, from 140.252.13.33 от самого себя
received mask = ffffffe0, from 140.252.13.35 от bsdi
received mask = ffff0000, from 140.252.13.34 от svr4

Первое, на что стоит обратить внимание в выводе программы, это то, что значение, возвращенное от svr4, неверно. Это произошло из-за того, что SVR4 возвращает общую маску подсети класса В, подразумевающую, что деление на подсети не осуществлено, даже несмотря на то что интерфейс svr4 сконфигурирован с правильной маской подсети:

svr4 % ifconfig emd0
emd0: flags=23<UP, BROADCAST, NOTRAILERS.
inet 140.252.13.34 netmask ffffffe0 broadcast 140.252.13.63

Это одна из известных ошибок SVR4 возникающая при обработке ICMP запросов маски адреса.

Мы рассмотрим обмен пакетами для хоста bsdi, используя tcpdump. Вывод показан на рисунке 6.5. Была использована опция -e, которая позволяет посмотреть аппаратные адреса.

1 0.0 8:0:20:3:f6:42 ff:ff:ff:ff:ff:ff ip 60:
sun > 140.252.13.63: icmp: address mask request
2 0.00 (0.00) 0:0:c0:6f:2d:40 ff:ff:ff:ff:ff:ff ip 46:
bsdi > sun: icmp: address mask is 0xffffffe0
3 0.01 (0.01) 0:0:c0:6f:2d:40 8:0:20:3:f6:42 ip 60:
svr4 > sun: icmp: address mask is 0xffff0000



Содержание раздела