RFC: 917
Оригинал: Internet Subnets
Категория: Не определено
Дата публикации:
Автор:
Перевод: Николай Малых

2.2. Измнение программ хостов для поддержки подсетей

В большинстве реализация протокола IP имеется код для обслуживания исходящих потоков типа приведенного ниже:

IF ip_net_number(packet.ip_dest) = ip_net_number(my_ip_addr)
    THEN
        send_packet_locally(packet, packet.ip_dest)
    ELSE
        send_packet_locally(packet,
           gateway_to(ip_net_number(packet.ip_dest)))

Код с поддержкой множества подключенных сетей несколько сложнее, но в данном случае это не имеет значения.

Для поддержки подсетей нужно сохранить одно дополнительное 32-битовое значение — маску IP (my_ip_mask). Эта битовая маска представляет собой строку битов, в которой установлены (1) значения битов, соответствующий номеру сети IP и номеру подсети. Например, для сети класса A с 8-битовым полем номера подсети маска будет иметь значение 255.255.0.0.

Упомянутый выше код тогда принимает вид:

IF bitwise_and(packet.ip_dest, my_ip_mask)
                 = bitwise_and(my_ip_addr, my_ip_mask)
    THEN
        send_packet_locally(packet, packet.ip_dest)
    ELSE
        send_packet_locally(packet,
           gateway_to(bitwise_and(packet.ip_dest, my_ip_mask)))

Очевидно, что часть выражения в условном операторе может быть вычислена заранее.

Может потребоваться изменение функции gateway_to с включением такого же условия сравнения.

Для поддержки хостов со множеством подключения код может быть изменен так, чтобы значения my_ip_addr и my_ip_mask сохранялись для каждого интерфейса, а выражения в условном операторе должны вычисляться для каждого интерфейса.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.