计算机网络层路由器工作原理——实现非直连网段的通信

实验二:三个网络互通(非直连网段)

非直连网段是指两个局域网通过一个或多个路由器相连

1.建立两个局域网

每个局域网一台主机,每个主机和一个路由器相连
在这里插入图片描述

2.配置主机IP

在这里插入图片描述在这里插入图片描述

3. 为两个路由器配置本网段的IP地址

在这里插入图片描述在这里插入图片描述

4.为两个路由器相连的接口配置IP

在这里插入图片描述在这里插入图片描述

5.为主机配置网关

在这里插入图片描述在这里插入图片描述

6.测试每个网段的通信

192.168.1.1——>Router0
在这里插入图片描述
Router0——>Router1
在这里插入图片描述
Router1——>192.168.2.1

在这里插入图片描述

7.为路由器Router0,添加静态路由

在这里插入图片描述

8.为路由器Router1,添加静态路由

在这里插入图片描述

9.测试

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴能够回答你的问题。RIP(Routing Information Protocol)是一个内部网关协议,它用于在同一组织的网络中传递路由信息。RIP使用距离向量算法来确定最佳路径,并且具有自适应性,可以自动调整网络拓扑变化。 以下是RIP的C++代码实现: ``` #include <iostream> #include <vector> #include <string> #include <limits.h> #include <algorithm> #include <unordered_map> using namespace std; // 定义路由表项 struct RoutingTableEntry { string destination; // 目标网络IP地址 int hopCount; // 经过的跳数 string nextHop; // 下一跳路由器IP地址 }; // 实现路由器节点 class Router { public: Router(string routerId) { id = routerId; } // 添加相邻路由器 void addNeighbor(Router* neighbor, int cost) { neighbors[neighbor] = cost; } // 更新路由表 void updateRoutingTable() { routingTable.clear(); unordered_map<string, int> distanceVector; distanceVector[id] = 0; // 初始化距离向量 for (auto& neighbor : neighbors) { distanceVector[neighbor.first->id] = neighbor.second; } // 迭代更新距离向量 bool updated = true; while (updated) { updated = false; for (auto& neighbor : neighbors) { unordered_map<string, int> neighborVector = neighbor.first->getDistanceVector(); for (auto& item : neighborVector) { if (item.first == id) { continue; } int distance = neighbor.second + item.second; if (distance < distanceVector[item.first]) { distanceVector[item.first] = distance; updated = true; } } } } // 生成路由表 for (auto& item : distanceVector) { if (item.first == id) { continue; } int minCost = INT_MAX; Router* minNeighbor = nullptr; for (auto& neighbor : neighbors) { if (neighbor.first->id == item.first) { minCost = neighbor.second; minNeighbor = neighbor.first; break; } unordered_map<string, int> neighborVector = neighbor.first->getDistanceVector(); auto iter = neighborVector.find(item.first); if (iter != neighborVector.end() && neighbor.second + iter->second < minCost) { minCost = neighbor.second + iter->second; minNeighbor = neighbor.first; } } RoutingTableEntry entry; entry.destination = item.first; entry.hopCount = minCost; entry.nextHop = minNeighbor->id; routingTable.push_back(entry); } } // 获取距离向量 unordered_map<string, int> getDistanceVector() { unordered_map<string, int> distanceVector; for (auto& neighbor : neighbors) { distanceVector[neighbor.first->id] = neighbor.second; } return distanceVector; } // 打印路由表 void printRoutingTable() { cout << "Routing table of router " << id << ":" << endl; cout << "Destination\tHop count\tNext hop" << endl; for (auto& entry : routingTable) { cout << entry.destination << "\t\t" << entry.hopCount << "\t\t" << entry.nextHop << endl; } cout << endl; } private: string id; // 路由器ID unordered_map<Router*, int> neighbors; // 相邻路由器和其距离 vector<RoutingTableEntry> routingTable; // 路由表 }; int main() { // 创建四个路由器节点 Router* r1 = new Router("R1"); Router* r2 = new Router("R2"); Router* r3 = new Router("R3"); Router* r4 = new Router("R4"); // 添加相邻路由器和距离 r1->addNeighbor(r2, 2); r1->addNeighbor(r3, 1); r2->addNeighbor(r1, 2); r2->addNeighbor(r3, 3); r2->addNeighbor(r4, 1); r3->addNeighbor(r1, 1); r3->addNeighbor(r2, 3); r3->addNeighbor(r4, 2); r4->addNeighbor(r2, 1); r4->addNeighbor(r3, 2); // 更新路由表 r1->updateRoutingTable(); r2->updateRoutingTable(); r3->updateRoutingTable(); r4->updateRoutingTable(); // 打印路由表 r1->printRoutingTable(); r2->printRoutingTable(); r3->printRoutingTable(); r4->printRoutingTable(); return 0; } ``` 上述代码实现了一个简单的RIP路由器,它可以自动计算最佳路径并生成路由表。需要注意的是,该实现并不完整,仅仅是提供了一个基本的框架,如果需要实际使用,还需要进行更多的改进和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值