我正在TCP/IP Protocol Suite通过Behrouz A. Forouzan阅读DVR算法。
我在这里读到,如果来自某路由器的传入记录中的 R 说 A 到路由器表中,则表示 C 不存在 C 的表格,因此它将使用该新条目更新其表格。
如果记录存在,那么它检查到达目的地的路径的成本是否低于其表中的当前成本。如果是,那么它将使用表的下一个felid更新其表作为源路由器地址,并将成本更新为var linkUrl=(stirng)file.item["EncodedAbsUrl"];
。
然后我读了这个算法伪代码。
costFromSourceRouter + 1
在此屏幕截图中, R 是源路由器发送的记录, T 是接收方路由器的表。在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
函数中,嵌套Update
有两个条件。
if
。也就是说,当R.cost + 1 < Ti.cost
小于receivedCost + 1
时,会发生更新,这很明显。
currentCost
。也就是说,如果接收记录的下一个字段与表中当前记录的下一个字段相同,则会发生更新。
有人可以解释我的第二个条件吗?我在样本表中对样本电路进行手动更新,第二个条件是导致新路径的成本高于前一个路径
示例网络
表:
R.next == Ti.next
因此当 B 与 C 交换**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 -
记录时,两者都有相同的下一个字段 A 。所以根据上面的算法(如果它是正确的)所以C将把它的表更新为
net1
因此更新会对表格进行负面更改。算法(
**Router C (destination, cost, next)** net1 3 B net3 1 - net4 1 -
更新条件)如何在该场景中起作用?