计算机网络:网络层 - IP数据报的转发
计算机网络:网络层 - IP数据报的转发
- 基于终点转发
- 最长前缀匹配
- 二叉线索树路由表
- 特殊路由
- 特定主机路由
- 默认路由
- IP多播
基于终点转发
路由器转发报文时,是通过报文中的目的地址
字段来转发的,也即是说路由器只知道终点的IP地址
,根据这个地址来进行转发,这叫做基于终点转发
。
路由器拿到报文后,决定把这个报文向哪一个路由器转发,下一个收到报文的路由器也执行一样的操作,通过一个一个路由器的接力传送,直到分组的到达目的网络。
路由器内部存储了很多条目,每个条目代表一个网络,网络通常以
网络地址/前缀长度
或者是网络地址 网络掩码
的形式
接下来我就用一个案例,来介绍路由器是如何决定把数据报转发到下一个路由器的:
源主机H1
想要把数据报传输给主机H2
,源地址
为128.1.2.193
,目的地址
为128.1.1.132
。
第一步:先检测
目的主机
与源主机
是否在同一个网络中
这个步骤是由源主机
自己完成的,如果在同一个网络中,那么直接在网络内部通信即可,无需路由器。
整个网络N1
的网络前缀为128.1.2.192/26
,子网掩码为255.255.255.192
。
源主机H1
处于N1
中,将目的地址与源地址的子网掩码进行按位与,看结果是否与源地址所处的网络N1
相同,从而判断目的主机与源主机是否在一个网络:
128. 1. 1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128. 1. 1.128 // 结果
最终结果为128.1.1.128
,与N1
的网络前缀128..1.2.192
不同,所以不处于一个网络,此时要交给路由器转发。
假设现在把报文已经递交给了路由器R1
,R1
的转发表如下:
第二步:当路由器转发报文时,根据自己的路由表,一一进行网络前缀匹配
从上往下,首先拿目的地址128.1.1.132
与128.1.2.64/26
进行前缀匹配,/26
的子网掩码为255.255.255.192
,进行计算:
128. 1. 1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128. 1. 1.128 // 结果
结果128.1.1.128
与128.1.2.64/26
不匹配,说明不是通过该路由。
随后拿第二条进行匹配,网络前缀为128.1.2.128/26
,子网掩码为255.255.255.192
,进行计算:
128. 1. 1.132 //目的地址
255.255.255.192 // 子网掩码
----------------
128. 1. 1.128 // 结果
结果128.1.1.128
与1288.1.1.128/26
匹配,说明可以通过该路由转发,于是通过该路由通过该接口把数据报转发出去。
如果下一个节点还是路由器,则重复以上过程,如果已经到达指定网络,那么路由器的任务就结束了。
最长前缀匹配
有的时候,路由器内部可能会有多个条目匹配,此时要选择网络前缀最长的接口进行转发。
某个路由器转发数据报时,目的地址为206.0.71.130
,该路由器的路由表如下:
206.0.68.0/22 R1
206.0.71.128/25 R2
先匹配第一条,网络前缀206.0.68.0/22
,子网掩码为255.255.252.0
,将目的地址
与子网掩码
进行按位与:
206. 0. 71.130 //目的地址
255.255.252. 0 // 子网掩码
----------------
206. 0. 68. 0 // 结果
结果206.0.68.0
和网络前缀206.0.68.0/22
匹配,说明可以通过路由器R1
转发。
随后再匹配第二条,网络前缀206.0.71.128/25
,子网掩码为255.255.255.128
,将目的地址
与子网掩码
进行按位与:
206. 0. 71.130 //目的地址
255.255.252.128 // 子网掩码
----------------
206. 0. 68.128 // 结果
结果206.0.68.128
与网络前缀206.0.71.128/25
也匹配,可以通过路由器R2
转发。
此时既可以通过R1
也可以通过R2
,但是R1
的网络前缀长度为/22
,而R2
的网络前缀长度为/25
,所以选择R2
进行转发,这就是最长前缀匹配
。
通过匹配更长的网络,可以确保数据包被转发到最具体的网络,而不是更广泛的网络。
为了提高最长前缀匹配的效率,路由器会对条目排序,把前缀长的条目放在前面
这样进行匹配时,只需要从上往下匹配即可,第一个匹配的网络一定是最长的,无需在往下匹配了。
二叉线索树路由表
当转发表的项目数很大时,为了进行更加有效的查找,通常是将无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索树(binary trie)
,它是一种特殊结构的树。
IP 地址中从左到右的比特值决定了从根节点逐层向下延伸的路径,而二叉线索中的各个路径就代表转发表中存放的各个网络前缀
。
为了简化二叉线索的结构,用每条路由中网络前缀
的唯一前缀
来构造二叉线索。在进行查找时,只要和唯一前缀
相匹配,就表示和这条路由相匹配。
比如下图:
对于第一条地址,其网络前缀为01000110.0.0.0
,现在确定该网络前缀的唯一前缀:
- 第一位
0
:该路由表中有其它的地址第一位也是0
,不是唯一前缀 - 前两位
01
:该路由表中有其它的地址前两位也是01
,不是唯一前缀 - 前三位
010
:该路由表中有其它的地址前三位也是010
,不是唯一前缀 - 前四位
0100
:该路由表中没有其它的地址前四位是0100
,是唯一前缀
因此第一个条目的唯一前缀就是0100
,利用这个前缀构建节点,也就是图中的蓝色路径。
要将二叉线索用于转发表中,还必须使二叉线索中的每一个叶节点包含对应的网络前缀
和子网掩码
。当搜索到一个叶节点时,就必须将目的 IP 地址
和该叶节点的子网掩码
进行按位与运算,看结果是否与对应的网络前缀相匹配。若匹配,就按下一跳的接口转发该分组;否则,就丢弃该分组。
特殊路由
在路由表中,还存在两种特殊的路由:特定主机路由
和默认路由
特定主机路由
特定主机路由是指针对特定 IP 地址
的路由条目。它明确指定了到达该主机的路径,包括下一跳路由器和网络接口。这种路由的子网掩码为255.255.255.255
相比于一般的路由,特定主机路由
的优先级是最高的,这可以从最长前缀匹配
的角度理解,其前缀长度为/32
应用场景
- 当需要与特定主机建立直接连接时,例如访问特定服务器或设备。
- 当需要优化特定主机的网络性能时,例如将数据包直接转发到目标主机,避免经过其他路由器。
默认路由
默认路由是指当路由器无法找到与目的 IP 地址
匹配的路由时,会使用的路由条目。它通常指向一个默认网关,负责将数据包转发到其他网络。
该路由的网络前缀为0.0.0.0/0
,一般是最后一个匹配的路由,只有当前所有的条目都匹配不上,才会走这个条目。
IP多播
如图所示:
现在一个服务器要同时给90
台主机提供相同的服务,如果采用单播的方式,那么同样一份数据就要拷贝90
份发送出去,这会造成大量资源浪费,对此我们会采用IP多播
的方式。
如图所示:
在服务器发送数据报时,只发送一份,随后路由器根据多播,将其复制多分发送给指定的路由器,后面的路由器也重复该过程。直到该数据报传输到一个局域网内部。
IP 多播
所传送的分组需要使用多播 IP 地址
,也就是 D 类IP 地址
。多播地址只能用于目的地址,而不能用于源地址。
IP 多播
可以分为两种,一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。
相关文章:
![](https://img-blog.csdnimg.cn/direct/d4c455a5cd2c4995bb38e00bb97a73cc.png)
计算机网络:网络层 - IP数据报的转发
计算机网络:网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时,是通过报文中的目的地址字段来转发的,也即是说路由器只知道终点的IP地址,根…...
![](https://img-blog.csdnimg.cn/direct/a1a5540a6e934587a64cbbb629880964.png)
颠覆与创新:探寻Facebook未来的发展路径
Facebook,这个曾经引领社交网络革命的巨头,在如今竞争激烈的科技市场中,正面临着前所未有的挑战和机遇。如何在不断变化的数字世界中保持竞争力,成为业界领先者,这是摆在Facebook面前的重要课题。本文将探寻Facebook未…...
![](https://img-blog.csdnimg.cn/img_convert/7d09684eb820c5706c0bf58ef8991e99.png)
太湖远大毛利率下滑:研发费用率远低同行,募投项目合理性疑点重重
《港湾商业观察》黄懿 6月20日,浙江太湖远大新材料股份有限公司(以下简称“太湖远大”,873743.NQ)即将迎来过会。 2023年11月30日,太湖远大所提交的上市申请材料正式获北交所受理,保荐机构为招商证券&…...
![](https://www.ngui.cc/images/no-images.jpg)
赶紧收藏!2024 年最常见 20道设计模式面试题(八)
上一篇地址:赶紧收藏!2024 年最常见 20道设计模式面试题(七)-CSDN博客 十五、模板方法模式是如何在父类中定义算法框架的? 模板方法模式通过在父类(通常是一个抽象类)中定义算法的骨架&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
JAVA学习-练习试用Java实现“比较版本号”
问题: 给定两个版本号 version1 和 version2 ,请比较它们。 版本号由一个或多个修订号组成,各修订号由一个 . 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,…...
![](https://www.ngui.cc/images/no-images.jpg)
云原生分级SLA
云原生分级SLA(Service Level Agreement,服务等级协议)规则是为了确保云服务提供商和客户之间对服务性能、可用性和其他关键指标有明确的理解和期望。这些规则通常基于业务需求和技术实现来制定,并根据服务的不同级别进行分级。以…...
![](https://www.ngui.cc/images/no-images.jpg)
java干货 线程间通信
文章目录 一、线程间通信1.1 为什么要处理线程间通信?1.2 什么是等待唤醒机制? 二、等待唤醒机制使用2.1 等待唤醒机制用到的方法2.1.1 wait2.1.2 notify 2.2 线程通信代码实践2.2.1 重要说明2.2.2 代码 一、线程间通信 1.1 为什么要处理线程间通信&…...
![](https://img-blog.csdnimg.cn/direct/968cce9ae85b492eb3127ee172f1c26d.png)
【人机交互 复习】第6章 交互式系统的设计
一、设计框架 1.在建立了一组需求之后,设计即将开始,建议采取自上面下的方式,首先把重点放在大的方面,生成低保真且不包含具体细节的方案,一般通过写剧本来确定交互设计模式与逻辑。 2.设计框架: 先站在一个…...
![](https://img-blog.csdnimg.cn/direct/ae56b702c2a74042b708c13e7082eeb5.png)
1-函数极限与连续
1 2 平方项没有考虑到(其正负)...
![](https://img-blog.csdnimg.cn/direct/0f7b4203354545978dc01412fc657e6d.png)
【C++题解】1670 - 象棋大赛
问题:1670 - 象棋大赛 类型:分支问题 题目描述: 市里要组织象棋大赛,年龄在 8∼30 周岁之间的选手可以报名参赛。为了公平起见,大赛组委会将选手们分了青年组、少年组和儿童组,大赛组委会规定:…...
![](https://www.ngui.cc/images/no-images.jpg)
Samba:用于高效无限上下文语言建模的简单混合状态空间模型
Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling 📜 文献卡 Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling作者: Liliang Ren; Yang Liu; Yadong Lu; Yelong Shen; …...
![](https://www.ngui.cc/images/no-images.jpg)
通俗易懂的ChatGPT原理简介
一、引言 随着人工智能的发展,聊天机器人已经成为我们生活中的常见工具。而在众多聊天机器人中,ChatGPT 无疑是最受关注的一个。ChatGPT 是由 OpenAI 开发的一种基于生成式预训练模型(GPT)的大型语言模型。本文将通俗易懂地介绍 …...
![](https://img-blog.csdnimg.cn/9a0b0ec5d03d4b15887a73aafb1df595.png)
你认为 AI 作图程序「MidJourney」有哪些比较好用的关键词?
玩了一段时间的MidJourney,打算把这个回答做成资源帖。也欢迎在评论区补充讨论。 MidJourney的极简指南 快速上手 装discord,或者直接打开网址 https://discord.gg/midjourney 注册用户。进入Midjourney的官方服务器后,在左侧栏找一个newb…...
![](https://www.ngui.cc/images/no-images.jpg)
9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
execute()方法用于执行SQL语句,其语法格式如下: jdTemplate.execute("SQL 语句");下面以创建数据表的SQL语句为例,来演示excute()方法的使用,具体步骤如下。 1、创建数据库 在MySQL中,创建一个名为spring的…...
![](https://www.ngui.cc/images/no-images.jpg)
正向代理和反向代理的区别
正向代理和反向代理的主要区别在于代理服务器所服务的对象不同。 正向代理(Forward Proxy):正向代理的客户端是内部网络的用户。当内部网络的用户想要访问外部网络(例如互联网)时,可以通过正向代理服务器来…...
![](https://img-blog.csdnimg.cn/direct/32e62fe26ea344e7ad9af80314894d36.png)
express入门03增删改查
目录 1 搭建服务器2 静态文件托管3 引入bootstrap4 引入jquery5 编写后端接口5.1 添加列表查询方法5.2 添加路由5.3 添加数据表格 总结 我们前两篇介绍了如何利用express搭建服务器,如何实现静态资源托管。那利用这两篇的知识点,我们就可以实现一个小功能…...
![](https://img-blog.csdnimg.cn/direct/7a4c285e59c940a690f5754629f54bf4.png)
【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/video*‘: 没有那个文件或目录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ls:无法访问/dev/video*: 没有那个文件或目录1. 问题描述2. 原因分析3. 解决方法 总结 前言 一、ls:无法访问’/dev/video*: 没有那个文件或目录 使用的这…...
![](https://img-blog.csdnimg.cn/direct/3a61fde61aa54e6c992927196adc7daf.png)
Java实现异步开发的方式
1)、继承 Thread 2)、实现 Runnable 接口 3)、实现 Callable 接口 FutureTask (可以拿到返回结果,可以处理异常) 4)、使用线程池 区别:1、2)不能得到返回值 …...
![](https://img-blog.csdnimg.cn/direct/03f07648dedb4c708330292420dbfdc4.png)
小知识点快速总结:Batch Normalization Layer(BN层)的作用
本系列文章只做简要总结,不详细说明原理和公式。 目录 1. 参考文章2. 主要作用3. 具体分析3.1 正则化,降低过拟合3.2 提高模型收敛速度,加速训练3.3 减少梯度爆炸或者梯度消失的情况 4. 补充4.1 BN层做的是标准化不是归一化4.2 BN层的公式4.…...
![](https://img-blog.csdnimg.cn/direct/f8903da1ce474711adaa85df0e26590d.png)
【SpringCloud】负载均衡(Spring Cloud LoadBalancer)
负载均衡 当服务流量增大时,通常会采用增加机器的方式进行扩容。负载均衡就是用来在多个机器或者其他资源中,按照一定的规则合理分配负载。其中的实现可以分成客户端负载均衡和服务端负载均衡。 服务端负载均衡 在服务端进行负载均衡的算法分配。 比…...
![](https://www.ngui.cc/images/no-images.jpg)
三生随记——输入法之谜
在深夜的电脑前,李浩专心致志地敲打着键盘,为他的小说写下最后一章。然而,随着他不断输入文字,他渐渐察觉到一丝不对劲。每次他尝试输入特定的词汇,输入法都会自动跳转到一些与主题毫不相关的句子,甚至有些…...
![](https://www.ngui.cc/images/no-images.jpg)
【名词解释】Unity中的3D物理系统:刚体
Unity中的3D物理系统是用于模拟现实世界中物体的运动和相互作用的一套工具和组件。刚体(Rigidbody)是Unity 3D物理系统中的一个核心组件,它允许游戏对象(GameObject)受到重力和外力的影响,并参与碰撞检测。…...
![](https://www.ngui.cc/images/no-images.jpg)
icon转svg处理
一般情况下,图标我们可以找UI或者去iconfont.cn获得一个svg格式的文件。然后再IDE中以文本的方式打开,然后格式化,就可以看到代码。代码中一般是最外层一个svg标签,里面是一个或者多个path。这个时候,我们使用h方法来实…...
![](https://img-blog.csdnimg.cn/direct/92fbcec328704bdab932934c57b326bd.png)
已成功见刊检索的国际学术会议论文海报展示(2)
【先投稿先送审】第四届计算机、物联网与控制工程国际学术会议(CITCE 2024) 大会官网:www.citce.org 时间地点:2024年11月1-3日,中国-武汉 收录检索:EI Compendex,Scopus 主办单位:四川师范…...
![](https://img-blog.csdnimg.cn/img_convert/7605506a56b469182f82e1a72850f877.png)
EasyCVR/EasyDSS无人机直播技术助力野生动物监测
近日有新闻报道,一名挖掘机师傅在清理河道时,意外挖出一只稀有的扬子鳄,挖机师傅小心翼翼地将其放在一边,扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发,野生动物及其栖息地的保护显得愈发重要。…...
![](https://img-blog.csdnimg.cn/img_convert/9da6072fe68f7b80212d6dc7217de1d0.webp?x-oss-process=image/format,png)
AI视频教程下载-ChatGPT 生产力 + 时间管理
ChatGPT Productivity Time Management. ChatGPT Productivity ChatGPT 显著提升生产力 不寻常的时间管理技巧。ChatGPT 工作,Chat GPT 自动化,ChatGPT 2023! 对关于ChatGPT的讨论感到好奇,想知道如何利用它为自己带来好处吗&a…...
![](https://img-blog.csdnimg.cn/img_convert/10a7703f102ca59282192d2d054bcaba.png)
Java 集合框架:LinkedList 的介绍、使用、原理与源码解析
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 014 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
![](https://www.ngui.cc/images/no-images.jpg)
【Ruby爬虫01】某吃瓜网站图片数据采集
介绍 由于最近在学习Ruby,写一个爬虫锻炼一下。涉及xml解析、多线程、xpath语法等基础知识。 实现代码 使用说明 使用前请先安装如下gem gem install nokogiri http openssl# nokogiri:一个解析xml和html的库,支持css、xpath语法 # htt…...
![](https://img-blog.csdnimg.cn/img_convert/fb1283290a5c9f36f0a1a358e8708d6a.png)
可以免费领取tokens的大模型服务
本文更新时间:2024年6月20日 豆包大模型 “亲爱的客户,模型提供方将在5月15日至8月30日期间,为您提供一次独特的机会,即高达5亿tokens的免费权益。这是我们对您长期支持的感谢,也是对未来合作的期待。” 在8月30日之…...
![](https://img-blog.csdnimg.cn/direct/af1618d1c7424705b4197337c99c7b1e.png)
NSSCTF-Web题目11
目录 [鹤城杯 2021]EasyP 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]numgame 1、题目 2、知识点 3、思路 [鹤城杯 2021]EasyP 1、题目 2、知识点 php代码审计 3、思路 打开题目,出现一段代码,我们对代码进行审计 这里出现了很多不懂的…...
可以做结构式的网站/sem是什么测试
使用Tomcat8.5.32和nginx14做负载均衡,登录系统时输入用户名和密码、验证码后很大概率会重新进入登录页面而不是直接进入系统,一开始怀疑是不是nginx重定向的问题,nginx.conf配置了半天仍然无效。。。后来就在登录代码里都加上打印输出语句&a…...
![](https://img-blog.csdnimg.cn/img_convert/83dde06ec8ee1cb2d372fdc4e93bc142.png)
最好的网站建设用途/seo营销外包公司
这两天,鸿蒙操作系统因为在华为合作伙伴大会上的正式亮相,再次成为公众关注的一大热门话题。但操作系统毕竟不像折叠屏手机那样,看得见、摸得着,所以对它诞生的重要意义,以及对未来5G应用的影响,需要详细地…...
![](https://images2018.cnblogs.com/blog/787623/201805/787623-20180516163141187-1770874792.png)
合肥制作网站的公司简介/品牌建设
谷歌浏览器安装jetbrains ide support 打开webstorm 新建项目 新建test.html并添加js文件 Edit Configurations--->defaults-->javascript debug-->browser-->选择chrome 运行test.html 参考:https://blog.csdn.net/happybruce8023/article/details/534…...
编程软件手机/关键词seo排名怎么选
除了是动手的程序员,我还是定制软件开发公司Teamed.io的联合创始人兼CTO。 在我们合作的所有项目中,我都扮演着技术和管理领导者的角色。 我为有兴趣雇用我和/或我的团队的人写了这篇文章。 本文将演示从第一天到项目结束时您选择与我们合作的过程 。 …...
![](http://www.idcps.com/uploadfile/2014/1103/20141103043914959.png)
不让网站在手机怎么做/进入百度app
IDC评述网(idcps.com)11月04日报道:根据百度统计的最新数据显示,10月国内浏览器市场份额情况整体呈现下降趋势,其中IE的份额为47.75%,环比上月,下降了0.70%,降幅最大。而Chrome则扭转…...
![](/images/no-images.jpg)
哪些网站免费注册企业域名/百度搜索广告投放
Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。 DDL和DML (注意DDL中可以用拼接字符串的方法用来create table或drop table,在DML中,类似于insert则不可以直接用execute imme…...