当前位置: 首页 > news >正文

计算机网络10

OSI模型将网络通信过程分为七个层次,从上到下依次为:

  1. 应用层(Application Layer)

  2. 表示层(Presentation Layer)

  3. 会话层(Session Layer)

  4. 传输层(Transport Layer)

  5. 网络层(Network Layer)

  6. 数据链路层(Data Link Layer)

  7. 物理层(Physical Layer)

数据链路层:

网络层:,找网络的拓扑结构,选择合适的路径(可能存在多个路径,(在局域网之间增加多个网桥,增加可靠性),找最优路径过程中,可能有过载或是空闲问题,负载均衡;处理网络之间的互联问题)

存储转发

网络层(尤其是数据链路层和网络层)中,存储转发是指网络设备(如路由器、交换机等)接收到数据包后,首先将整个数据包存储到内存中,进行必要的检查和处理(例如错误检查、路由选择等),然后再转发到下一跳或最终目的地。这种机制与直接转发(Cut-through)相对。

查找转发表,找到相应的端口

(第一章中的通信子网:通信设备和连接线路;这里:一个大网络的一部分)

网络层服务目标

  • 服务应该独立于路由器技术:网络层提供的服务应当与路由器的具体技术或架构无关。这意味着传输层应能够灵活地与不同类型和配置的路由器进行交互。

  • 传输层应当避免受到路由器数量、类型和拓扑结构的影响:传输层应该在一个统一的方式下工作,无论网络中路由器的数量、类型和拓扑结构如何变化。这保证了传输层的稳定性和一致性。

  • 提供给传输层的网络地址应该使用统一的编号方式:无论是在局域网(LAN)还是广域网(WAN)中,提供给传输层的地址应采用统一的编号系统,可能是为了简化地址分配和管理。

网络层为上层传输层提供服务时:

无连接的服务:ip协议;面向连接的服务

  • 无连接服务不维护连接状态,适用于快速和简单的通信,如IP协议。

  • 面向连接服务则通过建立和维护连接,保证数据的可靠性和顺序,适用于要求高可靠性的应用,如TCP协议

网桥:转发表,路由器和端口号

路由器:路由表不断更新,线路

(这里是无连接的路由表)

(查表时,左边为目标地址,右边为下一个需要经过的节点,比如从A到F点,查A表,看F,要经过C,下一个查看C节点的表,看F,要经过E节点)

需要携带完整的目标地址

路由表的更新主要通过两种方式进行:

  • 静态路由:管理员手动配置并更新路由表。路由表中的条目不会自动变化,只有在网络配置改变时,管理员手动进行更新。

  • 动态路由:路由表通过动态路由协议(例如RIP、OSPF、BGP)自动更新,路由器会定期交换信息,自动计算最佳路径

(这里是面向连接的路由表)(面向连接的子网,也称虚电路;无连接也称为数据报)

相当于在收发双方建立管道,顺序传输

A路由表上,1号连接(label),那么看c表的A1,找到E表相应的C1

不需要携带完整的目标地址,若一个路由器出现故障会发生问题

A路由表上,H3与H2连接,最开始是label1(此时不知道1这个label被用过),但是在A表上知道已经有1,在A处进行标签交换,这里,C的label变为2,相当于走了两条路径

路由算法

经常考!!!!

1.区分路由与转发过程

路由过程(Routing Process)

任务:填充和更新路由表。

描述:路由过程是一个计算过程,路由器通过路由协议(如RIP、OSPF、BGP)与网络中的其他设备交换信息,计算出网络中各个目标地址的最佳路径,并将这些路径信息存储在路由表中。该过程通常较少发生,通常在网络拓扑变化或路由表需要更新时执行。

转发过程(Forwarding Process)

任务:处理数据包,查找路由表以确定出站路径。

描述:转发过程是一个实时操作,路由器在收到数据包时,根据目标IP地址查找路由表,并将数据包转发到下一跳路由器或最终目标。这个过程发生在数据包到达路由器时,它是根据现有的路由表进行的查找和转发,不涉及路径计算。

2. 路由算法的特性

Correctness(正确性)

一个正确的路由算法应能够根据网络拓扑和路由策略正确地选择数据包的路径。算法的目标是确保数据包能够从源头成功、准确地到达目的地。
正确性是路由算法的核心要求,若算法不正确,将导致网络通信失败。

Simplicity(简洁性)

路由算法应尽可能简单,便于实现、维护和调试。简洁的设计意味着算法具有较少的计算开销和复杂性,易于理解和管理。
简洁性帮助提高网络设备的效率和稳定性,减少错误和不必要的复杂度。

Robustness(鲁棒性)

一个好的路由算法需要在网络发生故障或拓扑变化时仍能有效工作。即使网络中出现错误、丢包或路由器故障,路由算法应能够自动调整并重新计算路径,确保数据包传递的可靠性。
鲁棒性确保网络能够在恶劣环境下稳定运行,避免因小范围故障而导致大规模的网络瘫痪

Stability(稳定性)

稳定性意味着路由算法在网络拓扑变化后不会导致频繁的路由变化或震荡。理想的算法应在网络发生变化时,能够平滑过渡,并避免不必要的路径波动。
稳定性有助于避免路由震荡,确保网络通信的连贯性和效率。

Fairness(公平性)

公平性是指路由算法应公平地分配网络资源,如带宽、路由路径等,避免某些流量过度占用资源,而导致其他流量受阻。
公平性保证了不同用户或数据流之间的平等待遇,避免了网络资源的不合理集中。
Optimality(最优性)

最优性意味着路由算法能够选择出最优路径,通常是选择最短的路径,或者是最能满足带宽、延迟、负载等需求的路径。
最优性能够确保网络资源的高效使用,减少数据传输的延迟和成本,提升网络性能。

个体的公平性与整体的最优性可能矛盾

最优化原则

如果路由器J在从路由器I到K的最佳路由上,那么从J到K的最佳路径就会在同一路由上

生成树:在一个图(例如网络中的交换机或路由器)中,生成树是一个子图,它包括所有的节点(设备),并通过(链接)连接这些节点,使得每两个节点之间都能连通,但没有环路。这意味着生成树确保每个节点有且只有一个路径可以到达其他节点

汇集树:从所有源端到目的端的最佳路由集合,形成了以目的地为根的树

路由算法的目标是为所有路由器找到并使用汇集树

以每个根的汇集树是否是唯一的?不是,算法规则不同。可以以跳数为衡量标准

从叶子节点到根为最优,但是从根到叶子节点不一定最优(有向图?)

衡量路径长度的方法

站点数量、距离、信道带宽、平均通信量、通信开销、队列平均长度、测量到的时延。

Dijkstra算法

import heapqdef dijkstra(graph, start):dist = {node: float('inf') for node in graph}dist[start] = 0prev = {node: None for node in graph}# 优先队列初始化,包含源节点pq = [(0, start)]while pq:current_dist, node = heapq.heappop(pq)# 跳过已经找到更短路径的节点if current_dist > dist[node]:continue# 更新相邻节点的距离for neighbor, weight in graph[node].items():alt = current_dist + weightif alt < dist[neighbor]:dist[neighbor] = altprev[neighbor] = nodeheapq.heappush(pq, (alt, neighbor))return dist, prevdef get_path(prev, target):path = []while target is not None:path.append(target)target = prev[target]return path[::-1]# 示例图
graph = {'A': {'B': 1, 'C': 4},'B': {'A': 1, 'C': 2, 'D': 5},'C': {'A': 4, 'B': 2, 'D': 1},'D': {'B': 5, 'C': 1}
}# 执行 Dijkstra 算法
distances, predecessors = dijkstra(graph, 'A')# 输出最短路径
for node in graph:print(f"从 A 到 {node} 的最短路径: {get_path(predecessors, node)}")

Flooding扩散法

将收到的每个分组,从除了分组到来的线路外的所有线路上发出,问题:产生大量的重复分组

抑制措施:用计数器实现跳数限制;记录下哪些分组已经被扩散过了

选择性扩散法:只把分组扩散到与正确方向接近的线路上

Distance VectorRouting

重要!!

通过最新的延迟来更新路由表

更新D:

用A算,8(新)+40(原来) = 48

用I算,10+27= 37

用H,12+8 = 20

用K,6+24 = 30

其中30最小,所以在更新的右表中,D对应的为20,使用H更新的

无穷计算问题

问题:算法收敛慢,对好消息(有新的节点加入)反应快,对坏消息(有节点离开)反应慢

节点加入时,加入的节点A发个hello,便知道节点A存在,经过1跳B知道,经过2跳C知道...

当节点A离开时,通过echo(时间延迟,知道往返时间),若B向A发acho,不会得到回应,B的延迟变为3(如何得到的?因为C告诉B经过两跳到达A,这个过程是经过B的,它们之间的信息不断循环更新)

http://www.dtcms.com/a/592668.html

相关文章:

  • C++基于websocket的多用户网页五子棋 --- 项目设计
  • 牛客周赛 Round 117 ABCDE 题解
  • 1.1.3 Program_Alarm的使用
  • C++pair学习笔记
  • 泉州网站建设平台项目计划书怎么做
  • Matplotlib Pyplot各种函数对比详解以及隐式显式对比详解
  • SQL,CROSS JOIN速度优化
  • 企业网站实名认证时间设计有关的网站
  • [免费]基于Python的农产品可视化系统(Django+echarts)【论文+源码+SQL脚本】
  • 【题解】P2472 [SCOI2007] 蜥蜴 [网络流]
  • RV1126 NO.47:RV1126+OPENCV对视频流进行视频腐蚀操作
  • 消息称苹果 iPhone 17 系列国内激活销量超 825 万
  • 狠狠做网站 百度一下做家政服务网站
  • 企业网站 php定制软件开发公司
  • SAP-ABAP:SAP 系统与外部服务的 HTTP 通信cl_http_client 的深度解析与应用实践
  • COC Asia 2025|得帆云 ETL:顺应 Hive 新特性,重塑数据管道的未来
  • 深度学习:基于YOLOv8模型的海洋生物目标检测系统 深度学习 pytorch 计算机 PySide6界面✅
  • 学习随笔-http和https有何区别
  • 八、深度学习中的正则化
  • Vue中使用axios+pinia实现token续期功能,自动刷新token
  • Pano2vr6制作全景html5
  • 100% 本地 MCP 客户端 + SQLite 服务器(LlamaIndex + Ollama + Qwen2.5)
  • 博客网站素材免费静态网站模板下载
  • 做营销网站建设北仑网站建设案例
  • HarmonyOS:相对布局(RelativeContainer)
  • 【数据库】国产数据库替代实战:金仓KES如何以“智能运维 + 低资源占用”年省百万运维成本?
  • pandas__unstack方法与set_index详解
  • JS 前端存储实战指南:从基础缓存到离线数据库,构建可靠的数据持久化体系
  • Python应用开发学习:Pygame中实现切换开关及鼠标拖动连续填充功能
  • 2025年--Lc231-350. 两个数组的交集 II-Java版