网络之路由器工作原理

网络

Q:网络是什么?
网络是实现在各终端设备进行通信的数据载体;终端应用通过网络实现了资源的共享。

网络三元素
OSI定义了网络的网络通信的三元组:

  • 终端 :包含PC Printer 等。
  • 中间系统:主要是网络设备路由器(Router),交换机(Switch)。
  • 传输介质:包括有线线缆,双绞线,光纤 ,NIC网卡,无线接入点(AP)。

网络设备分类

一个网络中,网络设备可以分为两大类:

  • A类:OSI 2层或2层以下的设备, 交换机(Switch),集线器(Hub)。
    • 2层设备属于傻瓜型设备,接上电,终端连接上设备接口就能通信。
    • 使用交换机(Switch)的接口,连接终端设备形成一个星型网络。
    • 使用集线器(Hub)的接口,连接终端设备形成一个总线型网络。
  • B类:OSI 3层或3层以上的设备,路由器(Router),双层路由(MLS),防火墙(Firewall),PC
    • 终端通过3层设备网络接口进行通信,除了通电,还得必须有一个全球唯一3层身份标识,就是IP地址。

IP地址初探

现在所使用的IP地址可以分为两类:

  • IPV4地址
  • IPV6地址

现在大多数设备上所使用的都是IPV4地址。IPV6是面向未来网络所使用IP地址。

IPV4地址

IPV4地址,4个十进制数采用点分十进制表示法,表示一个网络地址,X.X.X.X,每一个X占8bit,一共占32bit, 例如192.168.0.1

32bit位分为高位和低位:

  • 高位表示网络位 192.168.0
  • 低位表示主机位 1

在同一个网络中,所有主机的IP地址,网络位是相同的。

子网掩码:表示计算机网络中的高多少位表示网络位,低多少位表示主机位。

网关:一个网络的出口。

网关

一个网络中的所有终端设备,可以做网络内的通信,但是往往只做网络内的通信是不够的,还要进行网络间通信;比如去访问Google,baidu,是在访问其他网络的服务器,你的PC肯定没和Google,baidu的服务器在同一个网络中。要访问Google,baidu,得把先数据发出本地网络,这个网络数据的出口就是一个网关。

网关Gateway): 一个网络的出口,该网络的出口节点,就是本网络的网关。

早期网关就是指路由器(Router),路由器(Router)的每个接口都可以分配一个网络。
路由器(Router)连接一个网络的接口,就是该网络内所有节点的出口。该网络内任意主机想要访问其他网络,都必须先把数据发给路由器(Router),然后路由器(Router)查表转发到其他网络。

在这里插入图片描述
PC1网络配置如下:

  • IP地址:10.1.1.1
  • 子网掩码:255.255.255.0
  • 网关:10.1.1.254

子网掩码上全为1的位表示网络位,全为0的位表示主机位
对于PC1来说高24位表示网络位,低8位表示主机位

255转成二进制是11111111

PC1所在网络可用的IP地址

  • 网段中包含的IP地址范围:10.1.1.0 - 10.1.1.255
  • 第一个IP地址10.1.1.0表示网络号,最后一个IP地址10.1.1.255表示广播号,不能分配给主机作为IP地址使用。
  • 可用的IP地址范围是 10.1.1.1 - 10.1.1.254

网络号10.1.1.0 主机位全为 0IPV4地址表示网络号。用来标识这个网络本身
广播号10.1.1.255 主机位全为 1IPV4地址表示广播号。用来标识这个网络内的所有节点。

IPV4中一般会把网段中最后一个可用地址,也就是10.1.1.254作为网关地址。

网关检测工具PING

PING 命令可以检测节点之间的3层往返连通性。如果节点的3层连接可以PING通,则说明网络通信没没问题,如果有问题可能是应用程序的问题。
界定一个网络问题是系统工程师,还是网络工程师去解决的最好的方法就是PING,PING一下如果能通网络工程师就可以甩锅了。

PCA PING PCB

  1. PCA 发送Echo Request 回声请求
  2. PCB 应答Echo Reply 回声应答

PING 请求是以数据帧Frame的形式发送的,格式类似于这样"Ethernet2|IPV4|ICMP|FCS" 。使用的协议是ICMP

ping 192.168.1.1
正在 Ping 192.168.1.1 具有 32 字节的数据:
来自 192.168.1.1 的回复: 字节=32 时间=11ms TTL=64
来自 192.168.1.1 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.1.1 的回复: 字节=32 时间=3ms TTL=64
来自 192.168.1.1 的回复: 字节=32 时间=1ms TTL=64
192.168.1.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 11ms,平均 = 4ms

网络通信的前提

组建一个网络,不是有交换机,路由器,连接上PC,这个网络就能通信,想要网络通的话,还得有两个前提条件:

  1. 需要给这个网络上的所有节点,分配IP地址。
  2. 而且还得保证所有节点的IP地址不能冲突;并且在同一网络内,所有节点IP地址的网络位必须相同,主机位要彼此不同。

路由器(Router)的职责

在组网的时候,一般不会把路由器(Router),作为接入设备。原因是什么呢?

  1. 路由器(Router)接口真的是很少。相比集线器,交换机,接口密度非常低。
  2. 路由器(Router)的每一个接口,都是一个节点,只连线是不能通的,必须配置IP地址。
  3. 路由器(Router)的每个接口都要分割一个网络,直接拿路由器接口来连接计算机入网的话,那每台PC都属于一个独立的网络。两台PC不在同一个网络,那有些需要在同一个网络内通信的应用就没有办法正常工作了。
  4. 如果将Router作为接入设备部署,还会导致大量数据IP浪费。

正是基于以上原因,路由器一般不做接入设备,只负责网络间通信,互联多个网络;作为网络间中心设备负责数据转发。

路由器(Router)转发数据

路由器(Router)收到一个数据包,发现是发送给网络内的某个设备的,那么路由器(Router)就会直接丢弃数据包,不做转发。路由器(Router)只关心网络间的数据通信,只会做网络间的数据转发。

路由器(Router)既然负责网络间的数据转发,肯定得知道数据要发给谁对吧。知道要发给谁之后,再根据接收者所在网络路径信息,沿着这个自由路径,把数据发走,这样端到端的通信就可以通。那么问题来了。

Q:路由器收到一个数据,怎样才能确定将数据发送到那个网络的那台主机呢?

两个网络中的主机进行通信,主机发送的数据包含两组源目地址信息:

  • 源目MAC地址
  • 源目IP地址

为什么通信需要两种地址标识呢?它们又有什么区别呢?

MACIP都是主机身份标识。作用却不一样。

MAC和IP本质区别:

  • MAC地址: MAC地址作为一个2层地址,唯一作用就是通过MAC地址,在网络中区别不同节点;不能标识一个节点属于那个网络。
  • IP地址:IP地址不仅能在一个网络内来彼此区分节点,而且还能在整个Internet互联网上标识一个节点;告诉因特网上的其他节点,我在那个网络中。

知道了MACIP的作用,那么路由器收到数据帧以后,到底是根据那种地址,来确定数据发给谁的呢?

一个节点通过一根网线连接到一个以太网,接口标识符,既有 IP地址,又有MAC地址。
在这里插入图片描述
PC1PC2进行网络内通信,数据帧头包含2层源目MAC地址,3层源目IP地址。

  • IP地址:PC1IP地址。
  • 目的IP地址:PC2IP地址。
  • MAC地址:PC1MAC地址。
  • 目的MAC地址:PC2的MAC地址。

很好理解,那么PC2PC3进行网络间通信,数据帧头目的MAC地址是PC3MAC地址吗?
在这里插入图片描述
在两个网络中,A网络中的PC2MAC地址,对于B网络中PC3MAC地址完全没有意义。暂且不说PC2PC3发送消息,源目MAC地址到底是什么。最起码要有一个概念:PC2想要在网络A中发送数据,不管你想要把数据发给谁,源目MAC都应该是A网络内的某个节点地址。

无论是网络间通信,还是网络内通信。源目IP标识的都是通信双方,但是源目MAC永远都只能使用该网络内的节点地址。

PC2PC3各属不同网络,因此PC2发送数据到PC3目的MAC地址肯定不是PC3MAC地址。

Q: 路由器(Router)收到数据帧以后,到底是根据目的IP,还是目的MAC,来确定数据包的最终去向?

根据以上的分析,显然是IP地址

以太网规定,网络中的任何节点,使用任何应用,产生任何数据,不管是什么内容,如果想发送数据,就必须添加一个2层帧头和帧尾,进行数据封装。

任何一个网络节点,不管是PC还是路由器(Router),收到一个数据帧后,只有确定这个数据帧是要发给自己的时候,才有权利解封装,拿到3IP数据报。

Q:一个节点什么情况下才能确定收到的数据帧是自己的呢?

很简单,看以太网(Ethernet)帧头的目的MAC地址。如果这个目的MAC就是接收端接口MAC地址,那么这个数据就是发给我主机这个接口的,没必要再看帧头帧尾了,把帧头帧尾去掉,拿到3IP数据报。
如果目的MAC和接收端接口的MAC地址不符,说明数据不是发给我的,不能数据解封装,也就拿不到数据3层地址,无法做数据转发了(臣妾做不到啊)。

路由器数据转发规则

路由器(Router)作为网关,只有它接收到一个发往自己的数据的时候,才有能力转发。也就是说路由器接收到一个数据帧,只有这个数据帧目的MAC地址,是接收端接口的MAC地址时,才先假定这个数据帧是发给自己的,去掉帧头帧尾,拿到3层报头,查看目的IP地址。发现这个帧其实不是发给我的,是发给网络B内的主机C的;去网络B的路径我知不知道?如果知道就沿着去往网络B的最优路径信息,去做数据转发。这就是在网络间通信的规则。

Q:PC2真要拿PC3的MAC地址作为目的MAC地址去做数据封装,和PC3通信,能直接通信吗?
答案肯定是不可以的,为什么呢?

  1. PC2PC3发送数据。
  2. PC2发送的数据帧到达Switch1Switch1并不知道PC3MAC地址,所以要进行数据泛洪。
  3. 路由器(Router)接收到泛洪消息,发现数据帧目的MAC地址,并不是自己的网络接入接口的MAC地址,就会丢弃。

经过以上流程,PC3永远也接收不到数据。为什么MAC地址被称为一个网络内的有效地址就是因为这个。

Q:那么PC2想要访问网络2的某个节点,该拿谁的MAC地址作为,目的MAC地址呢?

答案是应该拿网关的MAC地址,作为目的MAC地址。

端到端的数据通信规则

  • 如果是网络内通信,源目2层地址和源目3层地址标识的都是通信双方。
  • 如果是网络间的通信,源目3层地址标识通信双方,源目2层地址是每跨越一层网关设备,目的MAC地址都会改变。

一台主机从A网络向B网络的主机发送数据,都不能将对方的MAC地址,作为目的MAC地址封装装数据。
数据帧每跨越一个网络,其2层帧头的2层源目MAC地址都会改变,3层报头的源目3IP地址维持端到端一致性。

PC为什么要指网关啊?

PC指网关的目的就是,当PC在网络间通信的时候,需要通过网关这个IP,找个网关对应的MAC地址。拿到网关的MAC地址之后,就可以使用网关的MAC地址作为目的MAC地址来封装数据,PC发出数据帧,总会被网关收到,并且会被网关误以为数据帧是发给它自己的,网关把2层数据帧头帧尾去掉,就能拿到3层目的IP地址。之所以让路由器(Router)看到IP,就是想让它知道,这个数据包的真实去向,它会去查询一张叫路由表的表,来做一次网络间精确数据转发。

Q:那么PC是怎样知道网关的MAC地址的呢?
答案是通过ARP地址解析协议。

ARP地址解析过程:

  1. PC通过网关的IP地址10.1.1.254,向网关发送一个ARP请求。
  2. 网关(Gateway)收到这个请求后会把网关的MAC地址返回。
  3. PC拿到网关MAC地址以后就把他存在本地的ARP表中。

PC再将网关的MAC地址作为目的MAC地址进行封装数据,发送给网关,网关再做进一步的数据转发。

网内通信VS网间通信

做网络间通信的时候,需要网关做数据的转发。目的主机在哪里,不知道,目的主机离你有多少跳也不知道。终端主机只知道本地网络的出口是网关路由器(Router)的3IP地址。

那么问题来了主机只知道网关IP地址,怎么确定PC1PC4两台主机进行数据通信,是网络内通信呢,还是网络间通信?

这时候子网掩码的作用就尤为突出了,方法很简单。

  • PC1IP地址和子网掩码,做逻辑与运算,网络位不变,主机位全部置0。
  • 再用PC4IPPC1的子网掩码做逻辑与运算。
  • 两个结果如果一致,就说明两台主机在同一个网络,不一致则两台主机分属不同的网络。

例如
PC1 IP:10.1.1.1
PC4 IP:20.1.1.1
PC1 子网掩码:255.255.255.0
PC1和PC1的子网掩码与运算的结果:10.1.1.0 正好是网络号
PC2和PC1的子网掩码与运算的结果:20.1.1.0
两个结果不一致,说明PC1和PC4没有在同一个网络。

这就是为什么我们在配置IP的时候也要配一个子网掩码,配子网掩码的目的就是让你的计算机在和其他终端通信的时候,来确定两台机器是否在同一个网络,

路由器的控制层面

什么是路由器控制层面?
简单一句话路由器如何获取去往目的网络的路径信息。如何在路由表中,产生一条去往目的网络的路由条目。

路由:去往一个目的网络的路径,

路由器(Router)为了做网络间的转发,必须靠一张路由表,来记录每一个网络在哪里。
每台路由器针对IPV4的单播流量,必须要有路由表,被称之主动路由表,路由表中每一个路由表项都指向一个目的网络,路由器通过该表项,就能找到去往该目的网络的路径地址。

路由表(TCAM) VS Hub CAM表

  • 路由表(TCAM)相较于交换机(Hub )的CAM表更加重要。
  • 交换机每次我收到一个数据帧的时候,都会根据目的MAC地址,来查看CAM表,来确定一个路径转发信息;交换机能不能找到MAC地址表项,都不影响它进行数据转发,找到了进行精确数据转发,找不到进行泛洪转发。
  • 路由器(Router)是做的网络间转发,路由表中必须得有路由条目才能转发,没有路由条目,就不能转发数据,直接丢包,是不可能进行泛洪转发的。

网络间有多大?
整个因特网有多大,它就有多大,它不像交换机,只做网络内的转发,一个网络内主机数量二三百台也就上限了,就算以泛洪的方式来转发数据,充其量也只能影响到一个网络内的所有节点,影响有限。但是路由器不行,一个路由器收到一个数据帧,一看目的IP不知道去往哪。没有去往该网络的路径信息,这个时候你想效仿交换机进行泛洪转发,是不可能的,因为如果路由器进行泛洪转发,影响的是整个因特网。

路由中有一个非常独立的控制体系,得先让这个体系运行完毕,再得基于这个体系,获取相应的路由之后,才能完成数据转发。
路由器是先有控制层面,再有数据层面。先有控制层面,才会知道一个一个网络怎么走,知道网络怎么走之后,再基于数据层面,接收数据,查读路由表,来进行数据转发。

路由的两种分类:
在这里插入图片描述
直连路由:路由器直接连接,一个直连网络,如图R1,这种路由就被称之为直连路由。

直连网络:
所谓直连网络,就是路由器有一个接口直接始于该网络。

直连路由,只要满足两个条件,路由器路由表就可以自动学习。

  • 路由器连接该网络的接口要拥有IP地址和子网掩码。
  • 该路由器连接该网络的接口状态是upup。

非直连路由:路由器直连是一个非直连网络,如图R2,这种路由就被称之为非直连路由。

非直连路由,添加路由器路由表方式:

  • 静态路由,当路由个数多的时候,人工手动配置费时费力。
  • 通过动态路由协议,相邻的几个路由可以相互同步共享路由表项,

路由器的数据层面

路由器(Router)收到一个数据帧,先检查帧头的目的MAC地址,是不是自己接口的MAC地址,如果是我的数据,去掉帧头帧尾,露出3层报头,检查目的IP

Q:IP地址通常指向一个网络的主机地址,而路由器路由表的条目是指向的一个一个的网络。那么用什么来标识一个网络呢?

答案是网络号,也就说路由条目的IP地址都是一个网络号;网络号虽然都是一个IP地址,但是主机位都为0

路由器怎样确定目的IP所指向的网络号呢?

  1. 路由器(Router)拿数据报的目的IP地址,和路由条目的子网掩码,逐一去做逻辑与运算。
  2. 得到的结果,再和此路由条目中网络号去做对比,如果一致,就代表命中,没命中接着匹配。

使用的最长匹配原则,属于模糊匹配 ,别小看这个匹配过程,会导致路由器转发数据的效率明显低于交换机。因此端到端连接尽量用交换机少用路由器。

交换机在转发数据的时候也是基于源目MAC地址查表,但是因为数据帧的源目地址是一个MACCAM表项里也是MAC地址,所以不会进行模糊匹配,精确匹配。

结语

  • 在网络间通信中,路由器(Router)扮演的就是一个中间人的角色。
  • 所谓的网关,就是路由器的一个接口连接一个网络;网络内的主机想要进行网间通信的出口。
  • 路由器只做网络间转发,使用IP地址,来确定这个数据帧到底是要去到那个网络。

路由器要查看IP的前提是要去掉帧头帧尾;去掉帧头帧尾的前提是这个数据是发给我自己的;确定数据帧是不是发给自己的前提,是收到数据帧的目的2层地址,必须是路由器接收接口的MAC地址,这就是计算机为什么要指网关,指网关的目的是要获取到网关的MAC地址。

当路由器判断出和我通信的主机跟我不在一个网络的时候,我能通过网关的MAC地址, 来封装数据,让网关做一个网络间的网络转发协助。

为什么计算机要有IP地址,还要有子网掩码,子网掩码能描述我们的IP地址,高多少位是网络位,低多少位是主机位;通过子网掩码跟目的主机的IP做与运算,就能得知目的主机和我在不在同一个网络。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章