路由器工作原理

最近生活

 今天是2022年1月17日21:40:28,现在是晚上了,自己正在进行一个番茄钟的博客撰写工作,想来这也是废话。记录下最近一周的生活,上周自己总算是完成了推理服务器的外部审查工作,为了推演和回放,自己也进行了一些开发前的准备工作,比如说为推演添加了用户名和得分字段,在任务轨迹中添加字段trace_url的重构,这涉及了之前对于PicUrlConfig的重构,总之,现在的工作琐碎,并没有什么太多的创造性,用到的东西也都是之前自己学习到的东西,非常得心应手吧。想来也没有什么挑战,只不过推理服务器的文档接二连三的要求出现,很烦。但也没有什么好的办法,所里对于课题负责人真的太压榨了,工资又没有提升,操心还不少,结果呢,也不能换来多大的提升。

 最近一直在着手专利的撰写,基于深度学习的智能安防基于NAT和虚拟网桥的推理服务器架构的实现,这两个专利的撰写真的是让我看到了自己身上的低效和拖延,甚至上周六周日还因为一直拖延,看了一天的韩剧,真是,疯了的自己,也希望亲爱的读着,你能够深刻的意识到,不受约束的放松就是放纵,请一定要先完成自己的目标和事情,然后进行有计划的放松。

 我希望啊,2022年的自己,能做到三个字,那就是不失控。在微妙的平衡中不但的前进,去掉自己的毛病和私欲,不依赖任何人,不依赖任何东西。向杜博斯太太致敬。

我想让你从她身上学些东西——我想让你见识一下什么是真正的勇敢,而不要错误地认为一个人手握枪支就是勇敢。勇敢是:当你还未开始就已知道自己会输,可你依然要去做,而且无论如何都要把它坚持到底。你很少能赢,但有时也会。杜博斯太太赢了,用她那仅仅九十八磅重的身躯。按照她的观点,她死得无怨无悔,不欠任何人,也不依赖任何东西。她是我见过的最勇敢的人。”

简介

 最近因为NAT这个专利的缘故,自己一直沉浸在网络的世界里,研究路由器、网关、交换机、数据包的变化,SNAT这些网络词汇,真的是有点崩溃,但因为自己一直觉得,网络的知识很关键很关键,所以在2021年6月的时候,完成了《网络是怎样连接的》这本书的阅读,并且在CSDN博客也发出了两个博客记录:

其中数据包在网络中的新路历程也较为详细的HTTP从客户端到服务器端的完整的过程。

但当时又忙着读其他的书了吧,很多的知识点虽然过来一遍脑子,但没能深刻的理解。所以周六那天早晨,自己和龙威去单位加班撰写NAT之前又重新过了一遍路由器章节的内容,记录如下:

微信图片_20220117221718

路由器

路由器的作用

**路由器作为网络世界中的网络设备,作用是完成IP数据包的收发。**相当于数据包从通信一端到对端转发数据包的中间设备。可以理解为日啖荔枝三百颗,不辞长作岭南人中,为贵妃送荔枝的那些快马。从一个地方到另一个地方,是马厩,也就是路由器。

 在现实世界里,网络的搭建一般是计算机连接交换机,然后经过路由器,递进到另外的路由器,通过路由器的不断接力,数据包从通信的一端到达另外一端。如下图所示,这是最常用的网络结构。

 还要明确几个概念:

路由器是基于IP设计的,而交换机是基于MAC地址设计的,基于以太网的。

 有几个问题需要事先提出:

  • Socket连接的时候,我们只知道对端的IP和端口,自己本机的IP和端口,当然自己的Mac是知道的,但数据包是怎么到达某个路由器的?
  • 数据包的接收方的MAC地址怎么生成?

路由器基本组成

图示路由器组成

路由器内部有两个模块,转发模块和端口模块。

注意:在上图中阐述了虽然包转发模块只有一个,但端口模块则有多种类型,ADSL、以太网和无限局域网等类型,当然最常见的是以太网,就是那种通过RJ45水晶头联系起来的网络。

路由端口模块是要处理数据包的,在工作上是把数据包缓存下来,

端口与网卡

 实际路由器的端口模块,承担了网卡的工作,会接受协议栈的委托,把数据包发送出去。

  • 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。
  • 协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。
  • 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的
  • 此外 IP 中还包括 ICMP 协议和 ARP 协议。ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
  • IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作

我们要确认的是,端口模块会根据相应的通信技术规范来执行包收发的操作,这意味着端口模块是以实际的接收方或者发送方来收发网络包的,所以路由器的端口具有IP地址和MAC地址,它与计算机网卡是一样的。

 当转发包时, 首先路由器端口会接收发给自己的以太网包 , 然后查询转发目标, 再由相应的端口作为发送方将以太网包发送出去(这表明发送和接受是以源MAC和目的MAC地址)。 这一点和交换机是不同的, 交换机只是将进来的包转发出去而已, 它自己并不会成为发送方或者接收方 。

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

 重点来了,完成包接受操作之后,路由器会直接丢弃包开头的MAC头部,MAC头部的作用就是将包送到路由器。其中接收方MAC地址就是路由器端口的MAC地址。

路由器工作原理

 路由器端口如上所示,作为数据包的真实发送方和接受方而存在。这部分主要是描述转发模块的工作原理,其包括了转发模块运行依赖的数据结构,以及这些数据结构如何维护

路由表

 关于路由表需要明确的一个问题是,在普通的Linux服务器或者计算机上(使用route -n命令可以查看具体路由表信息)包含路由表,在路由器上也包含路由表,但两处路由表的作用不是特别一样的。在普通的PC上的路由表是用来确定使用哪个网卡发出数据包的,主要用来确定发出数据包的网卡。路由器上的路由表则主要是用来确定转发的。

 路由器路由表的数据结构如下所示:

 路由表中的数据可以经过路由聚合,多个子网会被合并成一个子网,子网掩码会发生变化,目标地址会被修改为聚合后的地址。

跃点数表示距离目标IP地址的距离是远还是近,数字越大,越远。

路由表的作用方式
PC中路由表的作用

下面是在探究!一个数据包在网络中的心路历程 中作者阐述路由表匹配的工作方式

举个例子,根据上面的路由表,我们假设 Web 服务器的目标地址是 192.168.10.200。

 上述的工作方式也比较简单,首先查处路由表的中的所有条目,然后把数据包的目标地址IP与每个条目的子网掩码取&,然后判断Destination是否匹配。

 路由规则:

 判断首先先和第一条条目的子网掩码(Genmask)进行 与运算,得到结果为 192.168.10.0,但是第一个条目的 Destination 是 192.168.3.0,两者不一致所以匹配失败。

 再与第二条目的子网掩码进行 与运算,得到的结果为 192.168.10.0,与第二条目的 Destination 192.168.10.0 匹配成功,所以将使用 eth1 网卡的 IP 地址作为 IP 包头的源地址。

 那么假设 Web 服务器的目标地址是 10.100.20.100,那么依然依照上面的路由表规则判断,判断后的结果是和第三条目匹配。

 第三条目比较特殊,它目标地址和子网掩码都是 0.0.0.0,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行。并且后续就把包发给路由器,Gateway 即是路由器的 IP 地址。

 路由器的匹配方式如上图所示。

路由器中的路由表

 一般数据包是先经过交换机到达路由器的,交换机并不会作为数据包的收发方,而是仅仅把数据包进行转发。到达路由器之后,路由器的端口模块把数据包缓存下来,然后根据数据包的类型进行正确的解析。然后通过查询路由表,确定要用那个端口发出,并且还要确定该数据包的目的地,由于路由器是工作在三层,基于IP地址的,所以路由器中的路由表核心的数据结构就是IP地址和端口的信息。

 路由器完成数据包收发之后,根据路由表获取条目中的候选转发目标,这个时候有一个微妙的知识点。路由表中的网关跃点数Metric

 判断转发目标的第一步,就是根据包的接收方 IP 地址查询路由表中的目标地址栏,以找到相匹配的记录

 路由匹配和前面讲的一样,每个条目的子网掩码和 192.168.1.100 IP 做 & 与运算后,得到的结果与对应条目的目标地址进行匹配如果匹配就会作为候选转发目标,如果不匹配就继续与下个条目进行路由匹配。

之所以为候选转发目标是因为有可能会有多个匹配条目,因此路由器要选择最佳的路由条目,会根据跃点数Metric进行判断。

 如第二条目的子网掩码 255.255.255.0 与 192.168.1.100 IP 做 & 与运算后,得到结果是 192.168.1.0 ,这与第二条目的目标地址 192.168.1.0 匹配,该第二条目记录就会被作为转发目标。实在找不到匹配路由时,就会选择默认路由,路由表中子网掩码为 0.0.0.0 的记录表示「默认路由」。

 接下来就会进入包的发送操作

 首先,我们需要根据路由表的网关列判断对方的地址。

 - 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。

 - 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说明已抵达终点

​ 知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。

arp缓存

arp缓存是通过广播获得一个IP的地址的Mac地址的,因为我们填写数据包的IP头部的时候,需要填写源IP和目标IP、源MAC和目标MAC,目标IP一般在数据包的层递过程中不会发生变化,源IP在内网环境中一般不发生变化,而源MAC和目的MAC地址则是要在每次端到端的发送中不断的再变化的。这个过程可以详见 跨网段的ip数据包在传送过程中的变化

下图展示了主机通过arp协议广播扫描局域网内IP的MAC地址的图示过程。

网关的作用

网关也是一个重点的问题点:

网关转发解释

路由表的维护

路由表的维护是通过路由协议或者手动维护的,而交换机的地址表则是后向学习的。

route命令学习

总结

 本文说是要介绍路由器,结果由于数据包的发送在网络世界中,网卡、协议栈、路由器、交换机、路由表、arp缓存这些东西又是密不可分的,所以没有好的办法,大体上也是串联了一下。不过本文的核心还是路由表。

 那就这样了,路由器、数据包、交换机这些鬼东西是真的抽象,本来都是读书时代的名词,没想到到了工作五年之后还依然困惑着我,真的是,疯了。像孔子说的,温故而知新,可以为师矣,这个文章也就先这样了,不再过多的阐述了。因为我工作之后,一直觉得这些网络知识非常的关键,想想在网络上投入了这么多的时间,也是挺奇怪的一件事情。

 另外一个好消息就是,笔者在12月20日曾经制定的目标,就是每天22:30睡觉,终于也是成功达成了这个Flag了,生活是很奇妙的事情,工作时各种抱怨的自己,在抱怨之后,还是会抱怨自己的抱怨,真的是令人纠结沮丧的事情,但我们还是满怀着对于未知的恐惧和期待继续向前走吧。希望2022年能够有充满期待的礼物,至少在达成这个目标之后,虽然在京东上拍了iwatch7之后,又退掉了,但等到合适的时候,比如说春节有活动的时候在拍吧。接下里就是要尽快完成

  • RocketMQ源码分析
  • 贝佐斯传
  • 过年的时候还要做一些变成题目

 诸如此类的事情了,希望2022年,自己能够发一两篇专利和论文,让自己这充满不幸的30年人生,绽放一些烟花吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值