路由器是怎么运作的?

一、路由器

 

 

1.路由器是什么

  我们现在基本上每个家庭都会有一个路由器,如果我们仔细去观察路由器,就会发现路由一般会有两种以上的接口,这里我们挑其中两种来讲,wan口以及lan口。wan口负责的是接入互联网,就是我们一般花钱接的宽带。lan口一般有多个,通过网线来连接我们各种网络设备,我们手机则是通过wifi的方式接入lan口,而不是通过网线的方式。

  在这里我们需要提到另外一个设备——交换机,交换机就是在同个子网内,把消息发送到对应的端口上的机器。通过交换机的转发功能,同一个子网的计算机可以相互访问。关于交换机的知识可以看我的另一篇博客

https://www.cnblogs.com/carryup/p/13876153.html

  这里要说的是,如果我们将上面的路由器的wan口忽略,那么它就成为了一台交换机,现在的交换机和路由器的界限不是很明确了,三层交换机就具备路由功能。这里稍微扩展了一下,我有做电力监测系统的朋友,听他说他们工作的时候就经常会用到交换机,他们是通过交换机接入信号(比如光纤),交换机对信号进行处理再转发到接入交换机的各台设备。当需要的时候,他们会把交换机的每个lan接口独立开来(称之为网络隔离),此时有点像多孔插座上插上的各个设备,各设备间不影响。举个例子,当在做地铁设备的时候,他们通过光线或者其他信号源与交换机对接,地铁接触网、磁浮接触轨的可视化接地等产品接入交换机,实现对各个产品的控制,如果是交换机上的每个lan口独立的话,就是避免产品间通讯或者互相影响。

2.路由器做了什么

  上面我们提到,路由器的wan口接入的是我们花钱买来的宽带,那么路由器的作用就是使我们的设备能够有访问Internet的功能。用比较简洁的语言来描述的话就是,路由器将连接上它的所有设备赋予一个公网ip,我们所有设备都是通过这个公网ip跟外网的通信。这里我们假设一个场景,小明通过电脑A与远程的小红通信,小红使用的电脑为B,小明发送一个数据“你好”,这个数据包通过路由器是发送到小红的流程如图所示。

  观察上面的图我们可以看到,中间有一段很多路由器组成的一个跳转网络,当电脑A发送数据包给到电脑B时,需要经过这段复杂的跳转网络,那么此时这个数据包应该选择哪个路径呢,这里会用到很多种算法来计算出最优的路线,这里太多就不展开了,有些同学在大学中应该有学到dijkstra算法,即从一个顶点到其余各顶点的最优路线算法,解决的是有权图中最短路径问题(但其实真正使用中并不是这个算法)。此时你可能会问,那为什么要经过那么复杂的跳转路由呢,不能直接从A发送到B吗?这是因为在TCP/IP协议中规定,不同子网间不能直接通信,所以需要通过许多个路由跳转,跳转到与电脑B处于同一个子网下的路由器时,数据包才能发送给电脑B。所以这里我们就能回答“路由器做了什么?”电脑发送数据到互联网的动作,需要路由器当任网关来转发,此行为称之为“路由”。

3.SNAT

那么数据包又是怎么知道它需要跳转到哪台路由器上呢?数据包是根据目标ip地址进行路由的,当电脑A发送数据包出去的时候会携带源目标ip地址以及自己的mac地址(下图隐藏了mac地址)。

 

 

 而这里的“源目标ip地址”的值是内网的ip地址,此时路由器会通过SNAT(源目标地址转换技术)将该内网ip地址改为路由器对应的公网ip,需要注意的是,一般接入一台路由器的设备不止一台,为了能区分到具体某一台数据,这里会加入“端口”的概念,同个ip下的不同接口则对应的是你接入的不同网络设备。(从生活中看就是我们接入了宽带,此时宽带的运营商就会给我们一个可以对外访问的公网ip,这个ip地址只有你,使用该宽带上网的你在使用,所以千万不要在网上乱发东西,你在网上的所有记录都可以根据你这个ip地址查询到你,还可以通过运营商直接找到你的所在地。)

 4.DNAT

DNAT和SNAT相反,类推我们可得知,DNAT就是目标地址转换技术。

5.NAT的局限性

  NAT是地址转换技术,不管是SNAT还是DNAT,都是会修改到下一层的网络地址,但此时已经违反了网络分层结构模型的设计原则。因为在传统的网络分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。但NAT还是一直在使用,主要的原因就是因为IPV4地址设计的缺陷,IPV4地址数量紧缺,主地址池在2011年2月3日耗尽。当大量的内部主机只能使用少量的合法的外部地址,就需要使用NAT把内部地址转化成外部地址。

(1)NAT违反了IP地址结构模型的设计原则。IP地址结构模型的基础是每个IP地址均标识了一个网络的连接。Internet的软件设计就是建立在这个前提之上,而NAT使得有很多主机可能在使用相同的地址,如10.0.0.1。
(2)NAT使得IP协议从面向无连接变成面向连接。NAT必须维护专用IP地址与公用IP地址以及端口号的映射关系。在TCP/IP协议体系中,如果一个路由器出现故障,不会影响到TCP协议的执行。因为只要几秒收不到应答,发送进程就会进入超时重传处理。而当存在NAT时,最初设计的TCP/IP协议过程将发生变化,Internet可能变得非常脆弱。
(3)NAT违反了基本的网络分层结构模型的设计原则。因为在传统的网络分层结构模型中,第N层是不能修改第N+1层的报头内容的。NAT破坏了这种各层独立的原则。
(4)有些应用是将IP地址插入到正文的内容中,例如标准的FTP协议与IP Phone协议H.323。如果NAT与这一类协议一起工作,那么NAT协议一定要做适当地修正。同时,网络的传输层也可能使用TCP与UDP协议之外的其他协议,那么NAT协议必须知道并且做相应的修改。由于NAT的存在,使得P2P应用实现出现困难,因为P2P的文件共享与语音共享都是建立在IP协议的基础上的。
(5)NAT同时存在对高层协议和安全性的影响问题。RFC对NAT存在的问题进行了讨论。NAT的反对者认为这种临时性的缓解IP地址短缺的方案推迟了Ipv6迁移的进程,而并没有解决深层次的问题,他们认为是不可取的。

二、网卡与mac地址

  我们的设备都是需要有网卡驱动才可以有上网的功能。这里你可能会想起来,我们的笔记本电脑如果你去买一张网卡插到电脑里面,你就不需要连网线或者wifi就可以上网了,十分方便,但听说特别贵,这里其实就像是我们的手机卡,这里你也可以把手机卡当做网卡,而你的手机号码就是这里的mac地址,它是唯一的,就好比不可能有人的手机号码和你的手机号码一样。

  每一个网卡对应的都有一个mac地址,这个mac地址是独一无二的,mac地址里面是6个16进制的数字组成的,前三位表示的是网络硬件厂商编号,后三位表示的是网卡的序列号。当你的电脑发送请求到外网的时候,你的网卡就会去请求交换机,而交换机根据你接入的接口去记录你的mac地址映射,你的每一次请求都会携带mac地址,所以能够准确地找到是谁在请求,从而准确地返回数据。这里可以扩展到我们搭建虚拟机时,它会让你选择协议,如果你把DHCP关掉的话,你就需要自己设置你的ip地址和网关、子网掩码、DNS服务器等。

 

(交换机维护的就是mac地址表,交换机只会关心数据包上的mac地址,不关心ip地址)

因为上面我们提到的mac地址是独一无二的,mac地址的数量是十分庞大的,mac地址表上不可能存放着所有的mac地址,所以当交换机找不到mac地址的映射端口时,这时会向所有的接口群发,这种行为称之为“泛洪”。这里也不做展开了,详情可以自己去搜索一下。

三、总结

根据我们上面举的例子,小明通过电脑A向小红的电脑B发送一个数据包“你好”,此时这个数据包的传输过程如下图所示:

①交换机

电脑A通过网线等方式接入交换机(这里可以是路由器的lan接口),交换机上就记录着电脑A的mac地址与端口的映射表;

②路由器

   DHCP:电脑A询问路由器,“我的ip地址是什么”,路由器通过DHCP答复告知电脑A被分配到的ip地址,从而形成一个完整的数据包;

   网关转发:路由器根据目标ip地址向外广播电脑A的数据包,数据包在由很多路由器组成的一个跳转网络里面传播,根据特殊的算法计算出最优的路径,将数据包传播到电脑B所属的路由器

③arp协议

电脑B发送的数据包已经到达小红家的路由器了,但此时并不知道小红使用的是哪个设备,所以路由器或者说是交换机就会根据目标ip地址向接入交换机的所有设备发出广播,也就是arp请求,此时小红的电脑B响应了这个请求,并返回了自己的mac地址,有了mac地址,这个数据包就可以准确地发送到小红那里了。

 

 

 

posted @ 2022-09-04 18:31  拿着放大镜看世界  阅读(360)  评论(0编辑  收藏  举报