Какие условия для обновления таблицы в алгоритме 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
имеет два условия.
R.cost + 1 < Ti.cost
, То есть обновление будет происходить, когдаreceivedCost + 1
меньше чемcurrentCost
, что очевидно.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
условие для обновления) работал в этом сценарии?