在DVR算法中更新表的条件是什么?

时间:2017-11-16 09:43:02

标签: algorithm networking routing graph-algorithm bellman-ford

我正在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有两个条件。

  1. if。也就是说,当R.cost + 1 < Ti.cost小于receivedCost + 1时,会发生更新,这很明显。

  2. currentCost。也就是说,如果接收记录的下一个字段与表中当前记录的下一个字段相同,则会发生更新。

  3. 有人可以解释我的第二个条件吗?我在样本表中对样本电路进行手动更新,第二个条件是导致新路径的成本高于前一个路径

    示例网络

    Sample Network

    表:

    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 - 更新条件)如何在该场景中起作用?

0 个答案:

没有答案