[重要笔记]路由器的包转发操作

本文总结的是网络包经过路由器的传输过程(其中也涉及到了路由器的知识和路由器与交换机的区别)。以下是个人学习总结,记录的是较为重要的部分,看完之后即可清楚路由器的相关知识。

目录

认识下路由器

路由器的基本原理

路由表中的信息

路由器的包接收操作

路由器具体是如何根据IP来确定转发目标的?(*)

找不到匹配路由时选择默认路由

包的有效期

路由器的维护

路由器的发送操作和计算机相同


网络包经由集线器和交换机后会到达路由器,并且根据情况会继续转发到网关(下一跳)

计算机的网卡除了以太网和无线局域网之外很少见到支持其他通信技术的品种,而路由器的端口模块则支持除局域网之外的多种通信技术,如 ADSL、FTTH,以及各种宽带专线等。

路由器转发的工作原理和交换机类似,也是通过查表判断包转发的目标。不过在具体的操作过程上,路由器和交换机是有区别的。因为路由器是基于 IP 设计的,而交换机是基于以太网设计的。

认识下路由器

路由器是一台设备,它有五个网口或者网卡,相当于有五只手,分别连着五个局域网。每只手的 IP 地址都和局域网的 IP 地址相同的网段,每只手都是它握住的那个局域网的网关。任何一个想发往其他局域网的包,都会到达其中一只手,被拿进来,拿下 MAC 头和 IP 头,看看,根据自己的路由算法,选择另一只手,加上 IP 头和 MAC 头,然后扔出去。

路由器的基本原理

路由器包括转发模块端口模块两部分其中转发模块负责判断包的转发目的地端口模块负责包的收发操作换句话说路由器转发模块和端口模块的关系就相当于协议栈的 IP 模块和网卡之间的关系路由器在转发包时首先会通过端口将发过来的包接收进来这一步的工作过程取决于端口对应的通信技术对于以太网端口来说就是按照以太网规范进行工作而无线局域网端口则按照无线局域网的规范工作总之就是委托端口的硬件将包接收进来接下来转发模块会根据接收到的包IP 头部中记录的接收方 IP 地址在路由表中进行查询以此判断转发目标路由器是基于IP工作的,而交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的然后转发模块将包转移到转发目标对应的端口端口再按照硬件的规则将包发送出去也就是转发模块委托端口模块将包发送出去的意思

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

路由表中的信息

路由器的路由表和计算机的路由表的结构相同。

查表判断转发目标 这一点上 ,路由器和交换机的大体思路是类似的 不过具体的工作过程有所不同 交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的 而路由器则是根据 IP 头部中的 IP 地址 来判断的
 

路由器会将接收到的网络包的接收方 IP地址与路由表中的目标地址进行比较并找到相应的记录交换机在地址表中只匹配完全一致的记录而路由器则会忽略主机号部分只匹配网络号部分。例如路由器在转发包的时候只看接收方地址属于哪个区,×× 区发往这一边,×× 区发往那一边

在匹配地址的过程中路由器需要知道网络号的比特数,因此路由表中还有一列子网掩码,通过子网掩码就可以判断出网络号的比特数。即:路由器会忽略主机号,只匹配网络号。

路由器的包接收操作

路由器的端口有各种不同的类型以太网端口为例,以太网端口的结构和计算机的网卡基本相同接收包并存放到缓冲区中的过程也和网卡几乎没有区别

首先信号到达网线接口部分其中的 PHYMAU模块和 MAC 模块将信号转换为数字信息然后通过包末尾的 FCS 进行错误校验,如果没问题则检查 MAC 头部中的接收方 MAC 地址看看是不是发给自己的包,如果是就放到接收缓冲区中否则就丢弃这个包如果包的接收方 MAC地址不是自己说明这个包是发给其他设备的,如果接收这个包就违反了以太网的规则

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

 

路由器具体是如何根据IP来确定转发目标的?(*)

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

接下来路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作转发操作开始:

查询路由表确定输出端口并判断转发目标如果在路由表中无法找到匹配的记录路由器会丢弃这个包,并通过ICMP消息ICMPInternet Control Message Protocol,Internet 控制报文协议。当包传输过程中发生错误时,用来发送控制消息)告知发送方

如上面的图,假设地址为 10.10.1.101 的计算机要向地址为 192.168.1.10 的服务器发送一个包,这个包先到达图中的路由器。判断转发目标的第一步,就是根据包的接收方 IP 地址查询路由表中的目标地址栏找到相匹配的记录。这个匹配并不是匹配全部 32 个比特,而是根据子网掩码列中的值判断网络号的比特数来匹配相应数量的比特。看第 3行,子网掩码列为 255.255.255.0,就表示需要匹配从左起 24 个比特。网络包的接收方 IP 地址和路由表中的目标地址左起 24 个比特的内容都是192.168.1,因此两者是匹配的,该行记录就是候选转发目标之一。按照这样的规则可能会匹配到多条候选记录,图中345 行都可以匹配其中路由器首先寻找网络号比特数最长的一条记录(“最长匹配”原则)网络号比特数越长说明主机号比特数越短也就意味着该子网内可分配的主机数量越少即子网中可能存在的主机数量越少这一规则的目的是尽量缩小范围所以根据这条记录判断的转发目标就会更加准确。

3 192.168.1.0/255.255.255.0 表示一个子网4 192.168.1.10/ 255.255.255.255 表示一台服务器。 相比服务器所属的子网来说,直接指定服务器本身的地址时范围更小,因此这里应该选择第 4 行作为转发目标 。

路由聚合概念多个子网会被合并成一个子网子网掩码会发生变化同时目标地址列也会改成聚合后的地址样也可以正确地进行转发

找不到匹配路由时选择默认路由

子网掩码为 0.0.0.0一行的作用就相当于把所有目标都配置好了子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址的匹配中需要匹配的比特数为 0换句话说就是根本不需要匹配。只要将子网掩码设置为 0.0.0.0那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了。

注意:由于匹配的比特数越长优先级越高(最长匹配原则),因此子网掩码为0.0.0.0 的记录优先级是最低的,只有当找不到其他匹配的记录时,才会选择这条记录。只要在这一条记录的网关列中填写接入互联网的路由器地址,当匹配不到其他路由时网络包就会被转发到互联网接入路由器。因此这条记录被称为默认路由这一行配置的网关地址被称为默认网关

在计算机的 TCP/IP 设置窗口中也有一个填写默认网关的框意思是一样的计算机上也有一张和路由器一样的路由表,其中默认网关的地址就是我们在设置窗口中填写的地址

包的有效期

从路由表中查找到转发目标之后网络包就会被转交给输出端口,并最终发送出去但在此之前路由器还有一些工作要完成

第一个工作是更新 IP 头部中的 TTLTime to Live生存时间)字段TTL 字段表示包的有效期,包每经过一个路由器的转发这个值就会减 1当这个值变成 0 就表示超过了有效期,这个包就会被丢弃。这个机制是为了防止包在一个地方陷入死循环。如果路由表中的转发目标都配置正确应该不会出现这样的情况但如果其中的信息有问题,或者由于设备故障等原因切换到备用路由时导致暂时性的路由混乱,就会出现这样的情况。发送方在发送包时会将 TTL 设为 64 128,也就是说包经过这么多路由器后就会失去“生命”。现在的互联网即便访问一台位于地球另一侧的服务器最多也只需要经过几十个路由器因此只要包被正确转发,就可以在过期之前到达目的地

路由器的维护

对路由表进行维护的方法有几种,大体上可分为以下两类:

1,由人手动维护路由记录

2,根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录, 其中第二条中提到的路由协议有很多种例如 RIPOSPCBGP 等都属于路由协议.

路由器的发送操作和计算机相同

这一步操作取决于输出端口的类型如果是以太网端口,则按照以太网的规则将包转换为电信号发送出去如果是 ADSL 则按照 ADSL 的规则来转换以此类推

以太网的包发送操作是根据以太网规则来进行的即便设备种类不同, 规则也是相同的也就是说其基本过程和协议栈中的 IP 模块发送包的过程是相同的在包前面加上 MAC 头部设置其中的一些字段,然后将完成的包转换成电信号并发送出去

首先为了判断 MAC 头部中的 MAC 地址应该填写什么值,我们需要根据路由表的网关列判断对方的地址如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址。知道对方的 IP 地址之后,接下来需要通过 ARP(地址解析协议,根据 IP 地址查询 MAC 地址的协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方MAC 地址路由器也有 ARP 缓存因此首先会在 ARP 缓存中查询,如果找不到则发送 ARP 查询请求

接下来是发送方 MAC 地址字段这里填写ben输出端口的 MAC 地址。 还有一个以太类型字段填写 0080十六进制)。 网络包完成后接下来会将其转换成电信号并通过端口发送出去

 

 

黄昏时偷来你的肋骨酿酒,百年后醉得有血有肉

 

发布了167 篇原创文章 · 获赞 101 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/HYZX_9987/article/details/103877330
今日推荐