计算机网络-学习路由器_路由学习-程序员宅基地

技术标签: 路由器的工作原理  路由器  计算机网络-路由器  计算机网络  

记录一下学习笔记,这篇大多参考《网络是怎么连接的》,感兴趣的同学建议直接读这本书,我这里做一些自己的笔记

  • 路由器是什么
  • 路由器的工作原理
  • 路由器是如何连上互联网的
  • 路由器和交换机的区别

路由器是什么

在这里插入图片描述
路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用。简单来说,路由器就是用来连接两个或多个不同的局域网的。即一个局域网里面的网络请求要访问外面,就需要路由器作为网关,通过路由器访问出去。

路由器就是用来连接两个或多个不同的局域网的

在这里插入图片描述

路由器的每个端口都相当一个网卡,都有IP地址,每个端口都可以连接一个局域网,而且每个端口的IP和连接的局域网是同一个网段

路由器也是特殊的计算机,可以理解为精简的计算机,专门用来处理网络层,作为网关使用,所以我们的计算机也可以作为路由器,但是我们的计算机包含的功能更多,即计算机包含路由器。
                                              在这里插入图片描述

路由器是如何工作的

路由器的基本原理

路由器的工作位于TCP/IP协议的第三层网络层,前一篇博客讲的交换机位于底层数据链路层。路由器在网络层把数据链路层的数据包接收进来,然后IP是否是给自己的,是的话就接收,不是则丢弃。
在这里插入图片描述

路由器的各个端口都具有 MAC 地址和 IP 地址

路由器转发包和上一篇的交换机转发包类似,路由器在转发包时,首先会通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术。对于以太网端口来说,就是按照以太网规范进行工作,而无线局域网端口则按照无线局域网的规范工作,总之就是委托端口的硬件将包接收进来。接下来,转发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思。这就是路由器的基本原理

再做一些补充。刚才我们讲到端口模块会根据相应通信技术的规范来执行包收发的操作,这意味着端口模块是以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例,路由器的端口具有 MAC 地址 ,因此它就能够成为以太网的发送方和接收方 。端口还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。当转发包时,首先路由器端口会接收发给自己的以太网包 ,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。这一点和交换机是不同的,交换机只是将进来的包转发出去而已,它自己并不会成为发送方或者接收方

路由表是怎么样的?

路由器是基于IP设计的,故路由器是根据IP来转发数据包的,,但是交换机是根据MAC地址转发的,里面有一张MAC地址表,所以路由器内部也有一张路由表,根据路由表里面的IP来转发相应的端口。

其实我们本地的计算机也有路由表,我们可以看看在windows按win+R输入cmd,打开命令函,输入route print可以看到本机的路由表
在这里插入图片描述
在这里插入图片描述

名称 结束
目标地址 网段,实际上这里的 IP 地址只包含表示子网的网络号部分的比特值,而表示主机号部分的比特值全部为 0,路由器会将接收到的网络包的接收方 IP地址与路由表中的目标地址进行比较,并找到相应的记录。交换机在地址表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分
子网掩码 此列显示目标地址的子网掩码,真正的网络号是通过IP地址和子网掩码与运算得出,目标地址和子网掩码是用来计算目标网络号的
网关 根据目标地址和子网掩码匹配到某条记录后,路由器就会将网络包交给接口列中指定的网络接口(即端口),并转发到网关列中指定的 IP 地址,如果网关IP为空,则目标地址就是实际的转发IP地址
接口 本路由器的出口ip
跃点数 跃点计数,它表示距离目标 IP 地址的距离是远还是近。这个数字越小,表示距离目的地越近;数字越大,表示距离目的地越远 。一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由

注:
在链路上,表示数据传输不经过其他网络和路由器,即目标地址和当前路由是在同一局域网里面,不需要再经过下一跳的路由器

描述目标地址是怎么匹配目的IP地址
这里得先简单复习一下子网掩码,子网是用来区分我们的IP地址的网络号和主机号的
例如我们查看IP地址,我们的IP地址是192.168.1.20,子网掩码:255.255.255.0,即192.168.1.20/24,那么就表示192.168.1是IP段的网络号,后面的20是这个IP段的主机号。

在匹配地址的过程中,路由器需要知道网络号的比特数,因此路由表中还有一列子网掩码,通过这个值就可以判断出网络号的比特数。匹配数据包和路由器的目标地址对上的网络号的记录即可。

为什么需要子网掩码区分网络号和主机号
就好比寄快递一样,得写明哪个小区哪个房间号,小区就像网络号,房间号就像主机号。写明了快递员就可以把东西寄到相应的小区,再由小区转发到房间号,这样分类效率大幅提高。所以我们在路由器也是这样,找到对应网络号的就转出去就可以了,如果没有网络号,路由器就要保存大量主机号的IP,数据量多时每次查询效率就会很低,如果有网络号路由器保存的记录就会减少很多。

路由聚合
有一些例外,有时地址本身的子网掩码和路由表中的子网掩码是不一致的,这是路由聚合的结果。路由聚合会将几个子网合并成一个子网,并在路由表中只产生一条记录。要搞清楚这个问题,我们还是看一个例子。如图 3.14 所示,我们现在有 3 个子网,分别为路由器会忽略主机号,只匹配网络号。10.10.1.0/24、10.10.2.0/24、10.10.3.0/24,路由器 B 需要将包发往这 3 个子网。在这种情况下,路由器 B 的路由表中原本应该有对应这 3 个子网的 3条记录,但在这个例子中,无论发往任何一个子网,都是通过路由器 A 来进行转发,因此我们可以在路由表中将这 3 个子网合并成 10.10.0.0/16,这样也可以正确地进行转发,但我们减少了路由表中的记录数量,这就是路由聚合。经过路由聚合,多个子网会被合并成一个子网,子网掩码会发生变化,同时,目标地址列也会改成聚合后的地址。
在这里插入图片描述

还有一种情况,如果子网掩码为 255.255.255.255,也就是说地址中的全部 32 个比特都为 1。这样一来,主机号部分比特全部为 0 可以表示一个子网,主机号部分比特不全部为 0 可以表示某一台计算机,这种情况表示目标地址就是实际的主机号,和路由器在同一局域网上。

路由表匹配到多条记录如何处理

如果匹配符合的记录有多个,例如192.168.1.10匹配到路由表的目标地址的两行记录:192.168.1.0/24,192.168.1.10/32,这种情况,路由器首先寻找网络号比特数最长的一条记录 。网络号比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这一规则的目的是尽量缩小范围,所以根据这条记录判断的转发目标就会更加准确。

然而,有时候路由表中会存在网络号长度相同的多条记录,例如考虑到路由器或网线的故障而设置的备用路由就属于这种情况。这时,需要根据跃点计数的值来进行判断。跃点计数越小说明该路由越近,因此应选择跃点计数较小的记录。

找不到匹配路由时选择默认路由
路由器的IP如果匹配不到,就会直接丢失,不会像交换机一样广播。但是实际我们路由表还有一行默认路由(发往更高层级的路由),目标地址为0.0.0.0,子网掩码为 0.0.0.0的记录,即匹配所有IP,如果找不到其他网络号更长的记录,就会把数据包转发到默认的路由记录上去。

路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”。

如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过ICMPA 消息告知发送方 。这里的处理方式和交换机不同,原因在于网络规模的大小。交换机连接的网络最多也就是几千台设备的规模,这个规模并不大 。如果只有几千台设备,遇到不知道应该转发到哪里的包,交换机可以将包发送到所有的端口上,虽然这个方法很简单粗暴,但不会引发什么问题。然而,路由器工作的网络环境就是互联网,它的规模是远远大于以太网的,全世界所有的设备都连接在互联网上,而且规模还在持续扩大,未来的互联网里到底会有多少设备,我们谁都说不准。在如此庞大的网络中,如果将不知道应该转发到哪里的包发送到整个网络上,那就会产生大量的网络包,造成网络拥塞。因此,由器遇到不知道该转发到哪里的包,就会直接丢弃。

为什么路由器不能找不到对应IP,不能像交换机一样广播?因为路由器连接了多个局域网,可能还连接了互联网,连接的设备数量非常大,广播会形成网络拥塞,而交换机只连接了一个局域网,里面的设备有限,所以路由器遇到找不到的IP匹配的记录,就会丢掉。

路由表的记录是如何维护的
但是默认路由是怎么配置上去的?正常是通过路由协议自动发现路由器之间的其他路由器后自动配置的。

路由表记录维护的方式和交换机也有所不同。交换机中对 MAC 地址表的维护是包转发操作中的记录MAC地址,而路由器中对路由表的维护是与包转发操作相互独立的,也就是说,在转发包的过程中不需要对路由表的内容进行维护。对路由表进行维护的方法有几种,大体上可分为以下两类。

  • (a)由人手动维护路由记录
  • (b) 根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录其中(b)中提到的路由协议有很多种,例如 RIP、OSPC、BGP 等都属于路由协议。

路由器具体的工作流程
在这里插入图片描述

来看一看路由器的整个工作过程。
首先,路由器是工作在网络层的,路由器会接收网络包。路由器的端口有各种不同的类型,这里我们只介绍以太网端口是如何接收包的。以太网端口的结构和计算机的网卡基本相同,接收包并存放到缓冲区中的过程也和网卡几乎没有区别。首先,信号到达网线接口部分,将信号转换为数字信息,然后通过包末尾的 FCS 进行错误校验,如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。如果包的接收方 MAC地址不是自己,说明这个包是发给其他设备的,如果接收这个包就违反了以太网的规则。

路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包, 遇到不匹配的包则直接丢弃。

完成包接收操作之后,路由器就会丢弃包开头的 MAC 头部。MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。

通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的MAC 地址。

然后根据包里面发送的目的地IP地址,在路由表中进行匹配,匹配到的记录,如果网关IP不为空,则网关IP是发往下一个的地址,如果网关为空,则目标地址的IP是发往下一个的地址。这里我们有了发往下一个地址的IP,但是在重新封装包的时候需要写入的下一个地址的MAC地址,这个时候我们还不知道下一个地址的MAC地址,知道对方的 IP 地址之后,接下来需要通过 ARP 根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方MAC 地址。路由器也有 ARP 缓存,因此首先会在 ARP 缓存中查询,如果找不到则发送 ARP 查询请求。

路由器也会使用 ARP 来查询下一个转发目标的 MAC 地址。

在这里插入图片描述

把查询到的MAC头部加入数据包(上一个MAC地址包被丢掉),最后网络包封装完成后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机也是相同的。如果输出端口为以太网,则发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。
在这里插入图片描述

接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包就到达了最终的目的地。

路由器是如何连上互联网的

你的电脑先在应用层打包一个 HTTP报文,然后在传输层在打包成 TCP报文,然后再根据 DNS 查到的 IP 在网络层打包成 IP数据报,然后在通过链路层打包成以太网数据帧,发送给你的交换机。交换机收到后,重新包装数据帧,再发送给路由器,路由器根据路由表查询转发的下一个路由IP,然后根据ARP协议获取下一个转发的IP的MAC地址,路由器重新封装包发给下一个路由,经过互联网的多个路由接力,随着这一过程反复执行,包就会最终到达 IP 的目的地,被服务器接收到,服务器程序处理完后返回这一网页的HTTP报文,再传输回给用户,这样用户的电脑就能看到服务器返回的网页了。

在这里插入图片描述

在这里插入图片描述

路由器和交换机的区别

要理解两者之间的关系,关键点在于计算机在发送网络包时,或者是路由器在转发网络包时,都需要在前面加上 MAC 头部。之前的讲解都是说在开头加上 MAC 头部,如果看图 3.16 大家可以发现,准确的说法应该是将 IP 包装进以太网包的数据部分中。也就是说,给包加上 MAC 头部并发送,从本质上说是将 IP 包装进以太网包的数据部分中,委托以太网去传输这些数据。IP 协议本身没有传输包的功能,因此包的实际传输要委托以太网来进行。路由器是基于 IP 设计的,而交换机是基于以太网设计的,因 此 IP 与以太网的关系也就是路由器与交换机的关系。详细的后面再总结一篇《计算机网络-路由器和交换机的区别》
在这里插入图片描述

参考:

户根勤《网络是怎样连接的》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21187515/article/details/119383038

智能推荐

python opencv resize函数_python opencv 等比例调整(缩放)图片分辨率大小代码 cv2.resize()...-程序员宅基地

文章浏览阅读1.3k次。# -*- coding: utf-8 -*-"""@File : 200113_等比例调整图像分辨率大小.py@Time : 2020/1/13 13:38@Author : Dontla@Email : [email protected]@Software: PyCharm"""import cv2def img_resize(image):height, width = image...._opencv小图等比例缩放

【OFDM、OOK、PPM、QAM的BER仿真】绘制不同调制方案的误码率曲线研究(Matlab代码实现)-程序员宅基地

文章浏览阅读42次。对于这些调制技术的误码率(BER)研究是非常重要的,因为它们可以帮助我们了解在不同信道条件下系统的性能表现。通过以上步骤,您可以进行OFDM、OOK、PPM和QAM的误码率仿真研究,并绘制它们的误码率曲线,以便更好地了解它们在不同信道条件下的性能特点。针对这些调制技术的BER研究是非常重要的,可以帮助我们更好地了解这些技术在不同信道条件下的性能表现,从而指导系统设计和优化。6. 分析结果:根据误码率曲线的比较,分析每种调制方案在不同信噪比条件下的性能,包括其容忍的信道条件和适用的应用场景。_ber仿真

【已解决】Vue的Element框架,日期组件(el-date-picker)的@change事件,不会触发。_el-date-picker @change不触发-程序员宅基地

文章浏览阅读2.5w次,点赞3次,收藏3次。1、场景照抄官方的实例,绑定了 myData.Age 这个值。实际选择某个日期后,从 vuetool(开发工具)看,值已经更新了,但视图未更新。2、尝试绑定另一个值: myData,可以正常的触发 @change 方法。可能是:值绑定到子对象时,组件没有侦测到。3、解决使用 @blur 代替 @change 方法。再判断下 “值有没有更新” 即可。如有更好的方法,欢迎评论!..._el-date-picker @change不触发

PCL学习:滤波—Projectlnliers投影滤波_projectinliers-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏8次。Projectlnliersclass pcl: : Projectlnliers< PointT >类 Projectlnliers 使用一个模型和一组的内点的索引,将内点投影到模型形成新的一个独立点云。关键成员函数 void setModelType(int model) 通过用户给定的参数设置使用的模型类型 ,参数 Model 为模型类型(见 mo..._projectinliers

未处理System.BadImageFormatException”类型的未经处理的异常在 xxxxxxx.exe 中发生_“system.badimageformatexception”类型的未经处理的异常在 未知模块。 -程序员宅基地

文章浏览阅读2.4k次。“System.BadImageFormatException”类型的未经处理的异常在 xxxx.exe 中发生其他信息: 未能加载文件或程序集“xxxxxxx, Version=xxxxxx,xxxxxxx”或它的某一个依赖项。试图加载格式不正确的程序。此原因是由于 ” 目标程序的目标平台与 依赖项的目标编译平台不一致导致,把所有的项目都修改到同一目标平台下(X86、X64或AnyCPU)进行编译,一般即可解决问题“。若果以上方式不能解决,可采用如下方式:右键选择配置管理器,在这里修改平台。_“system.badimageformatexception”类型的未经处理的异常在 未知模块。 中发生

PC移植安卓---2018/04/26_电脑软件移植安卓-程序员宅基地

文章浏览阅读2.4k次。记录一下碰到的问题:1.Assetbundle加载问题: 原PC打包后的AssetBundle导入安卓工程后,加载会出问题。同时工程打包APK时,StreamingAssets中不能有中文。解决方案: (1).加入PinYinConvert类,用于将中文转换为拼音(多音字可能会出错,例如空调转换为KongDiao||阿拉伯数字不支持,如Ⅰ、Ⅱ、Ⅲ、Ⅳ(IIII)、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ..._电脑软件移植安卓

随便推点

聊聊线程之run方法_start 是同步还是异步-程序员宅基地

文章浏览阅读2.4k次。话不多说参考书籍 汪文君补充知识:start是异步,run是同步,start的执行会经过JNI方法然后被任务执行调度器告知给系统内核分配时间片进行创建线程并执行,而直接调用run不经过本地方法就是普通对象执行实例方法。什么是线程?1.现在几乎百分之百的操作系统都支持多任务的执行,对计算机来说每一个人物就是一个进程(Process),在每一个进程内部至少要有一个线程实在运行中,有时线..._start 是同步还是异步

制作非缘勿扰页面特效----JQuery_单击标题“非缘勿扰”,<dd>元素中有id属性的<span>的文本(主演、导演、标签、剧情-程序员宅基地

文章浏览阅读5.3k次,点赞9次,收藏34次。我主要用了层次选择器和属性选择器可以随意选择,方便简单为主大体CSS格式 大家自行构造网页主体<body> <div class='main' > <div class='left'> <img src="images/pic.gif" /> <br/><br/> <img src="images/col.gif" alt="收藏本片"/&_单击标题“非缘勿扰”,元素中有id属性的的文本(主演、导演、标签、剧情

有了这6款浏览器插件,浏览器居然“活了”?!媳妇儿直呼“大开眼界”_浏览器插件助手-程序员宅基地

文章浏览阅读901次,点赞20次,收藏23次。浏览器是每台电脑的必装软件,去浏览器搜索资源和信息已经成为我们的日常,我媳妇儿原本也以为浏览器就是上网冲浪而已,哪有那么强大,但经过我的演示之后她惊呆了,直接给我竖起大拇指道:“原来浏览器还能这么用?大开眼界!今天来给大家介绍几款实用的浏览器插件,学会之后让你的浏览器“活过来”!_浏览器插件助手

NumPy科学数学库_数学中常用的环境有numpy-程序员宅基地

文章浏览阅读101次。NumPy是Python中最常用的科学数学计算库之一,它提供了高效的多维数组对象以及对这些数组进行操作的函数NumPy的核心是ndarray(N-dimensional array)对象,它是一个用于存储同类型数据的多维数组Numpy通常与SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用,用于替代MatLabSciPy是一个开源的Python算法库和数学工具包;Matplotlib是Python语言及其Numpy的可视化操作界面'''_数学中常用的环境有numpy

dind(docker in docker)学习-程序员宅基地

文章浏览阅读1.1w次。docker in docker说白了,就是在docker容器内启动一个docker daemon,对外提供服务。优点在于:镜像和容器都在一个隔离的环境,保持操作者的干净环境。想到了再补充 :)一:低版本启动及访问启动1.12.6-dinddocker run --privileged -d --name mydocker docker:1.12.6-dind在其他容器访问d..._dind

推荐文章

热门文章

相关标签