11网络层-分组转发算法

路由

分组转发

1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址N

2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要经过其他路由器,直接将数据报交付给目的主机(这里包括将目的主机地址D转为具体硬件地址,把数据报封装为MAC帧,再发送此帧);否则间接交付,执行(3);

3)若路由表中有目的地址为D的特定主机路由,则把数据报送给路由表中下一条路由器;否则执行4

4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一条路由器;否则,执行5

5)若路由表中有一个默认路由,则把数据报传送给路由表中指明的默认路由器;否则执行6)

6)报告转发分组出错

在互联网上转发分组时,都是从一个路由器转发到下一个路由器。对于每条路由最主要的时以下两个信息(目的网络地址,下一条地址)

现在互联网所有分组的转发都是基于目的主机所在的网络,但大多数情况下都允许有这样的特例,即对特定的目的主机指明一个路由。这个路由也叫做特定主机路由。特定主机路由的子网掩码时255.255.255.255.要在所有路由器上添加。

默认路由

默认路由(Default route),是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由。目的地不在路由器的路由表里的所有数据包都会使用默认路由。这条路由一般会连去另一个路由器,而这个路由器也同样处理数据包: 如果知道应该怎么路由这个数据包,则数据包会被转发到已知的路由;否则,数据包会被转发到默认路由,从而到达另一个路由器。每次转发,路由都增加了一跳的距离。

默认路由和静态路由的命令格式一样。只是把目的地ip和子网掩码改成0.0.0.0和0.0.0.0。

主机里的默认路由通常被称作默认网关。默认网关通常会是一个有过滤功能的设备,如防火墙和代理服务器。

路由还可以采用默认路由以交少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时时很有用的。默认路由用0.0.0.0表示

子网划分

子网划分的基本思路:

1)一个拥有很多物理网络的单位,可将所属的物理网络划分为若干个子网。划分子网纯属一个单位内部的事情,本单位意外看不到这个网络是由多少个子网构成的,因为这个单位对外仍然表现为一个网络。

2)划分子网的方法时从网络主机号借用若干位作为子网号当然主机号也就相应的减少了同样的位数。于是两级IP地址在本单位内部变为三级IP地址:网络号、子网号和主机号。也可记为:

IP地址 ::={,,}

3)凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接本单位网络上的路由器。但此路由器收到IP数据报后,再按照目的网络号和子网号找到目的子网,再把OP数据报交付给目的主机。

子网掩码

子网掩码

再IP数据报的首部无法看出源主机和目的主机所连接的网络是否进行了子网的划分。这是因为32为的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须宁外想办法,这就是使用子网掩码。

把三级地址的子网掩码与收到的数据报的目的IP地址逐位相“与”,就能得出所要找的子网的网络地址。

使用子网掩码的好处是:不论有没有划分子网,只要把子网掩码与IP地址进行与运算,就能立即得出网络地址。这样再路由器处理到来的分组时就可采用同样的算法。

互联网规定:所有的网络都必须使用子网掩码,同时再路由器的路由表也必须有子网掩码一栏。不划分子网,那么该网络的子网掩码就是默认子网掩码。

A类地址的默认子网掩码是255.0.0.0

B类地址的默认子网掩码是255.255.0.0

C类地址的默认子网掩码是255.255.255.0

使用子网掩码时的分组转发

在使用子网划分之后,路由表中现必须包含以下三项内容:目的网路地址、子网掩码和下一跳地址。

在划分子网的情况下,路由器转发分子算法

1)从收到的数据报的首部提取目的IP地址D;

2)先判断是否位直接交付。对路由器直接相连的网络逐个进行检查:用各个网络的子网掩码与D逐位相与,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还要将D转为物理地址,将数据报封装成帧发送出去),转发任务结束。否则就间接交付,执行3)

3)若路由表中有目的地址位D的特定主机路由,则把数据报传送给路由表中所执行的下一条路由器;否则执行4)

4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相与,得到结果N。若N与改行的目的网络地址匹配,则把数据传送给改行指明下一跳路由器;否则执行5)

5)若路由表中有一个默认路由,则把数据报传送给路由表中指明的默认路由器;否则,执行6)

6)报告转发分组出错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人为因素:为什么网络安全不仅仅关乎技术

关注公众号网络研究观获取更多最新内容。 我们生活在一个生活与技术日益紧密交织的世界。但在构建防火墙和安装防病毒软件时,我们常常会忘记一个关键因素:人的行为。 网络犯罪分子正是利用了人为因素,利用巧妙的心理战术绕过最强大的安全措…

【MySQL基础篇】事务

事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或或撤销操作请求,即这些操作要么同时成功,要么同时失败。 典型事例:银行转账操作 假设张三向李四进行转账…

Python:正则表达式相关整理

最近因为一些原因频繁使用正则表达式,因为以前系统整理过关于正则表达式的相关知识,所以这里仅记录使用期间遇到的问题。 本文内容基于re包 1. match和search方法的区别 在Python中,re.search和re.match都是用于匹配字符串的正则表达式函数&a…

防火墙NAT、智能选路综合实验

一、实验拓扑 二、实验要求 1,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 2,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3,多出口环境基于带宽比例…

Curator分布式锁

Curator 是一个用于 Apache ZooKeeper 的客户端库,提供了更高级的抽象和工具,以简化 ZooKeeper 的使用。Curator 是由 Netflix 开发的,并已成为分布式应用程序中使用 ZooKeeper 的事实标准。它解决了原生 ZooKeeper API 使用复杂、易出错的问…

node js安装、配置(Windows版)

目录 node js 安装 node js 全局配置 1、全局安装路径 2、全局缓存路径 3、修改环境变量 pnpm安装、卸载 全局安装pnpm 验证pnpm版本 卸载pnpm 1、移除全局安装的包 2、移除pnpm cli 脚本直接安装 npm安装的使用命令直接卸载 node js 安装 cmd 查看是否存在&…

容器docker 架构命令案例

文章目录 前言一、docker1.1 为什么有docker1.2 docker架构1.3 docker 安装1.4 docker中央仓库1.5 docker 基本指令1.6 docker数据卷,挂载例:nginx 数据卷挂载例:mysql 本地持久化 1.7 镜像制作镜像结构dockerfile基础指令容器生成镜像 1.8 d…

宿主机访问docker容器中的mysql被拒绝

问题: 解决方案: 1.进入docker中的mysql容器 docker exec -it 容器名称/id /bin/bash 2.登录用户 mysql -u root -p 3.进去mysql自带的管理数据库mysql use mysql; 4.查询用户的访问权限 SELECT user, host FROM user WHERE userroot;5.发现该用…

绘画平台小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,讲师管理,课程类型管理,课程信息管理,课程购买管理,作业类型管理 开发系统:Windows 架构模式:SSM JDK版本&…

AURORA仿真

AURORA 仿真验证 定义:AURORA是一种高速串行通信协议,通常用于在数字信号处理系统和其他电子设备之间传输数据。它提供了一种高效的方式来传输大量数据,通常用于需要高带宽和低延迟的应用中。AURORA协议通常由Xilinx公司的FPGA器件支持&#…

golang 项目打包部署环境变量设置

最近将 golang 项目打包部署在不同环境,总结一下自己的心得体会,供大家参考。 1、首先要明确自己目标服务器的系统类型(例如 windows 或者Linux) ,如果是Linux 还需要注意目标服务器的CPU架构(amd或者arm) 目标服务器的CPU架构可执行命令&…

对Mapper.xml文件进行深入的学习

1. 前言 既上次在Mapper.xml文件出现bug之后&#xff0c;痛改前非&#xff0c;决定吃透Mapper.xml映射文件。 让我们通过具体的代码段来进一步理解 MyBatis 的 Mapper XML 文件中的每个组成部分。 <?xml version"1.0" encoding"UTF-8"?> <!…

python 爬取当当网图书榜

首先查看当当网好评书单页面&#xff0c;找到翻页的URL参数 直接用requests请求页面 resp requests.get(url) 找到想要的信息&#xff0c;使用正则表达式把这些信息提取出来 patternre.compile(list_num.*?(\d).<.*?<img src"(.*?)".*?title"(.*?…

Eel入门还有一些案例

Eel入门还有一些案例 Eel 是一个 Python 库&#xff0c;它允许 Python 程序通过简单的 API 与网页进行交互。它使用 WebSocket 协议来实现 Python 后端和 JavaScript 前端之间的实时通信。下面是关于 Eel 的用法、通信原理和使用场景的一篇博客文章。 Eel的基本原理 Eel的基本原…

针对vue3的render函数添加自定义指令

话不多说 直接上代码 主要是给h函数设置自定义指令控制 import /styles/reset.css import /styles/global.scss import uno.cssimport { createApp } from vue import App from ./App.vue import { setupRouter } from ./router import { setupStore } from ./store import …

Android studio之编译提示Could not find :umeng-asms-v1.2.1

1 、问题 Could not determine the dependencies of task :app:compileDebugJavaWithJavac. > Could not resolve all task dependencies for configuration :app:debugCompileClasspath.> Could not find :umeng-asms-v1.2.1:.Required by:project :app> Could not …

FGF14:脑部疾病新潜力靶标

成纤维细胞生长因子14&#xff08;FGF14&#xff09;是FGF11亚家族成员&#xff0c;在神经元的所有基本特性&#xff08;内在放电、兴奋性和抑制性神经元的突触传递和可塑性&#xff09;中发挥作用。 &#xff08;数据来源AlphaFold&#xff09; FGF14由247个氨基酸组成&#x…

实战篇(九):解锁3D魔方的秘密:用Processing编程实现交互式魔方

解锁3D魔方的秘密:用Processing编程实现交互式魔方 使用 Processing 创建一个 3D 魔方效果展示1. 安装 Processing2. 项目结构3. 代码实现4. 代码解释4.1. 初始化魔方4.2. 绘制魔方4.3. 处理鼠标事件4.4. 检查点击的面4.5. 旋转面和最终确定旋转5. 运行和测试6. 细节解释6.1. …

【资源调度】2-如何解决资源调度问题?

导读&#xff1a;本期是全网最全【资源调度】系列推文的第2期(共50期左右)。上期我们在《何为调度&#xff1f;》中&#xff0c;对调度的定义与作用、计划与调度的关系、调度问题的拆解做了详细介绍。从本期开始&#xff0c;我们选择【客服调度】场景作为【资源调度】问题的具象…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889_8080参考代码(v1.3)

硬件&#xff1a;STC8H8K64U/STC8051U34K64 RA8889开发板 硬件跳线变更为并口8080模式&#xff0c;PS00x&#xff0c;R143&#xff0c;R142不接&#xff0c;R141无关 8080接口电路连接图&#xff1a; 实物连接图&#xff1a; RA8889开发板外接MCU连接器之引脚定义&…