RFC: 950
Оригинал: Internet Standard Subnetting Procedure
Категория: Стандарт Интернета
Дата публикации:
Авторы: ,
Перевод: Николай Малых

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

В большинстве реализаций IP имеется код, обслуживающий исходящие дейтаграммы и принимающий решение о передаче каждой дейтаграммы хосту локальной сети или пересылке ее на шлюз (маршрутизатор). В общем случае этот фрагмент кода работает так:

IF ip_net_number(dg.ip_dest) = ip_net_number(my_ip_addr)
    THEN
        send_dg_locally(dg, dg.ip_dest)
    ELSE
        send_dg_locally(dg,
                         gateway_to(ip_net_number(dg.ip_dest)))

(при обслуживании множество соединений, код становится более сложны, но в контексте данного документа это не имеет значения).

Для поддержки подсетей требуется сохранять одно или несколько 32-битовых значений, называемых масками. В этой битовой маске установлены (1) биты, соответствующие полям номера сети IP, и дополнительные биты, соответствующие полю номера подсети.

Соответствующий код будет иметь вид:

IF bitwise_and(dg.ip_dest, my_ip_mask) = bitwise_and(my_ip_addr, my_ip_mask)
    THEN
        send_dg_locally(dg, dg.ip_dest)
    ELSE
        send_dg_locally(dg,
               gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

Часть выражений в условиях может быть вычислена заранее (известна). Может потребоваться изменение функции gateway_to так, чтобы она принимала во внимание биты номера подсети при выполнении операций сравнения.

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

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