RFC: 922
Оригинал: Broadcasting Internet datagrams in the presence of subnets
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

RFC 922, Страница 7 из 9

6.3. Алгоритм маршрутизации Pseudo-Algol

На рисунке 1 показан алгоритм pseudo-Algol, который должны использовать шлюзы. Ниже приведены определения использованный при описании алгоритма терминов.

  • RouteLink(хост)

    Функция, принимающая адрес хоста в качестве параметра и возвращающая канал для первого интервала пути отшлюза к хосту.

  • RouteHost(хост)

    Эта функция аналогична предыдущей, но возвращает адрес хоста на первом интервале.

  • ResolveAddress(хост)

    Эта функция возвращает аппаратный адрес хоста по адресу IP.

  • IncomingLink

    Канал, на который прибывает пакет.

  • OutgoingLinkSet

    Набор каналов, в которые пакет должен быть передан.

  • OutgoingHardwareHost

    Аппаратный адрес хоста, которому передается пакет.

  • Destination.host

    Связанная с хостом часть адреса получателя (номер хоста).

  • Destination.subnet

    Номер подсети в адресе получателя.

  • Destination.ipnet

    Номер сети IP в адресе получателя.

BEGIN
   IF Destination.ipnet IN AllLinks THEN
      BEGIN
         IF IsSubnetted(Destination.ipnet) THEN
            BEGIN
               IF Destination.subnet = BroadcastSubnet THEN
                  BEGIN      /* используется Reverse Path Forwarding алгоритм */
                     IF IncomingLink = RouteLink(Source) THEN
                        BEGIN IF Destination.host = BroadcastHost THEN
                              OutgoingLinkSet <- AllLinks -
                           IncomingLink;
                           OutgoingHost <- BroadcastHost;
                           Проверка возможности внутреннего использования пакета;
                        END
                     ELSE  /* отбрасывание дубликатов от других шлюзов */
                        Discard;
                  END
               ELSE
                  IF Destination.subnet = IncomingLink.subnet THEN
                     BEGIN           /* пересылка будет порождать петлю */
                        IF Destination.host = BroadcastHost THEN
                           Проверка возможности внутреннего использования пакета;
                        Discard;
                     END
                  ELSE BEGIN    /* пересылка в (возможно локальную) подсеть */
                        OutgoingLinkSet <- RouteLink(Destination);
                        OutgoingHost <- RouteHost(Destination);
                     END
            END
         ELSE BEGIN         /* пакет адресован в одну из локальных сетей */
               IF Destination.ipnet = IncomingLink.ipnet THEN
                  BEGIN              /* пересылка будет порождать петлю */
                     IF Destination.host = BroadcastHost THEN
                        Examine packet for possible internal use;
                     Discard;
                  END
               ELSE BEGIN                     /* может быть широковещательным */
                     OutgoingLinkSet <- RouteLink(Destination);
                     OutgoingHost <- RouteHost(Destination);
                  END
            END
      END
   ELSE BEGIN                    /* пересылка в удаленную сеть IP */
         OutgoingLinkSet <- RouteLink(Destination);
         OutgoingHost <- RouteHost(Destination);
      END
   OutgoingHardwareHost <- ResolveAddress(OutgoingHost);
END

Рисунок 1: Алгоритм Pseudo-Algol для маршрутизации широковещательных дейтаграмм.

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