Какие условия для обновления таблицы в алгоритме DVR?

Я читал алгоритм DVR из TCP/IP Protocol Suite от Бехруза А. Форузана.

Здесь я прочитал, что если входящая запись скажет R от какого-либо маршрутизатора, скажем A, то к таблице маршрутизатора скажем, что C отсутствует в таблице C, поэтому она обновит свою таблицу этой новой записью.

И если запись присутствует, она проверяет, меньше ли стоимость пути, достигающего к месту назначения, чем его текущая стоимость в ее таблице. Если это так, то он обновит свою таблицу следующим номером таблицы в качестве адреса исходного маршрутизатора и стоимостью в качестве costFromSourceRouter + 1,

Затем я прочитал этот алгоритм псевдокод.

Distance_Vector_Algorithm( )
{
    // At startup
    for(i = 1 to N)                 // N is number of ports
    {
        Tablei.dest = address of the attached network
        Tablei.cost = 1
        Tablei.next = ----          // Means at home
        Send a record R about each row to neighbor

    } // end of for loop

    //  Updating

    repeat(forever)
    {
        wait for arrival of a record R from a neighbor
        Update(R, T)                // Call update module
        for(i = 1 to N)             // N is the current table size
        {
            Send a record R about row to each neighbor
        }
    } // end repeat
}// end Distance_Vector_Algorithm

Update (R, T)
{
    Search T for a destination matching the one in R
    if(destination is found in row i)
    {
        if(R.cost + 1 < Ti.cost or R.next == Ti.next)
        {
            Ti.cost = R.cost + 1
            Ti.next = Address of sending router
        }
        else    discard the record      // No change is needed
    }
    else
        // Insert the new router
        {
            TN+1.dest = R.dest
            TN+1.cost = R.cost +1
            TN+1.next = Address pf sending router
            Sort the table according to destination address
        }
} // end of update module

На этом снимке экрана R - запись, отправленная исходным маршрутизатором, а T - таблица приемного маршрутизатора. в Update функция вложенных if имеет два условия.

  1. R.cost + 1 < Ti.cost, То есть обновление будет происходить, когда receivedCost + 1 меньше чем currentCost, что очевидно.

  2. R.next == Ti.next, То есть обновление будет иметь место, если следующее поле обеих полученных записей совпадает с полем текущей записи в таблице.

Может кто-нибудь объяснить мне это второе условие? Я выполняю ручные обновления в примерах таблиц для примера схемы, и второе условие приводит к новому пути, который имеет более высокую стоимость, чем предыдущий.

Образец Сети

Образец Сети

Таблицы:

**Router A (destination, cost, next)**
net1 1 -
net2 1 -
net3 1 -


**Router B (destination, cost, next)**
net1 2 A
net2 1 -
net4 1 -

**Router C (destination, cost, next)**
net1 2 A
net3 1 -
net4 1 -

Поэтому, когда B обменивается net1 запись с C, так что оба имеют одно и то же поле, которое является A. Таким образом, в соответствии с приведенным выше алгоритмом (если это правильно), так что C будет обновлять свою таблицу как

**Router C (destination, cost, next)**
net1 3 B
net3 1 -
net4 1 -

Таким образом, обновление вносит негативные изменения в таблицу. Как алгоритм (if условие для обновления) работал в этом сценарии?

0 ответов

Другие вопросы по тегам