资讯专栏INFORMATION COLUMN

网络协议 6 -路由协议

liangzai_cool / 3557人阅读

摘要:动态路由协议基于链路状态路由算法的开放式最短路径优先协议,广泛应用在数据中心的协议。基于距离矢量路由算法的针对网络之间的路由协议,称为外网路由协议,简称每个数据中心都有自己的路由配置。

    前面例子中,我们都是在一个局域网内折腾。今天就让我们扩大范围,在多个局域网甚至到广阔的互联网世界中遨游,看看这中间会发生什么。

    这个过程中,跨网关访问是我们要了解的第一个内容。

跨网关访问

    当我们要了解跨网关访问时,就牵扯到 MAC 地址和 IP 地址的变化,因此,我们先来看下 MAC 头和 IP 头的细节。

MAC 头和IP 头的细节

    如图,在 MAC 头里,先是目标 MAC 地址,然后是源 MAC 地址,最后是协议类型。

    在 IP 头里,最重要的就是源 IP 地址和目标 IP 地址。除此之外,还有版本号,也就是我们常说的 IPv4 和 IPv6、服务类型 TOS(表示数据包优先级)、TTL(数据包生存周期)以及标识协议(TCP 和 UDP)

    当我们访问博客园时,经过的第一个网关应该就是我们配置的默认网关。当本机访问默认网关时,还是走局域网内部访问的步骤:

将源地址和目标 IP 地址放入 IP 头;

通过 ARP 协议获得网关的 MAC 地址;

将源 MAC 地址和网关的 MAC 地址放入 MAC 头中,发送给网关。

    而我们的网关,一般就是指家里的路由器,是一个三层转发的设备。它会把 MAC 头和 IP 头都取下来,然后根据里面的内容,看看接下来把数据包转发到哪里。

    很多情况下,人们把网关叫做路由器。其实并不准备,用这个比喻应该更为恰当些:

路由器是一台设备,它有五个网口或者网卡,相当于有五只手,分别连着五个局域网。每只手的 IP 地址都和局域网的 IP 地址有着相同的网段,每只手都是它握住的那个局域网的网关。

    任何一个想发往其他局域网的包,都会到达其中一只手,被拿进来,拿下 MAC 头和 IP 头,然后根据自己的路由算法,选择另一只手,加上 IP 头和 MAC 头,然后扔出去。

    注意,在上面这个过程中,有出现路由算法。接下来,我们就来认识下它。

路由算法

    路由算法,又名选路算法,是提高路由协议功能,尽量减少路由时所带来的开销的算法。

    路由算法可以根据多个特性来加以区分,找到到达目的地的最佳路由。

路由算法的区分点有很多,有

静态与动态

单路径与多路径

平坦与分层

主机智能与路由器智能

域内与域间

链接状态与距离向量

    这里主要介绍静态与动态路由算法。

静态路由

    静态路由算法,实质上是由网关配置好的映射表。

    我们家里的路由器,可能会有这样的路由配置

访问博客园,从 2 号口出去,下一跳是 IP2;
访问百度,从 3 号口出去,下一跳是 IP3。

    类似上述这样的规则就是静态路由,按照一定的语法保存在路由器里。

    每当要选择从哪个口抛出去的时候,就一条一条的匹配规则,找到符合的规则,就按规则办事,从指定口抛出去,找下一跳 IP。

过网关的“变”与“不变”

    之前我们了解到,MAC 地址是一个局域网内才有效的地址。因此,MAC 地址只要过网关,就肯定会改变。而 IP 地址在过网关后 ,就不一定会改变了。

    经过网关 A 后,如果IP 地址没有改变,那 A 就是转发网关,否则,就是NAT网关

转发网关

    如上图,服务器 A 要访问服务器 B,要经过过程:

1)服务器 A 到 网关 A

检查 B 的网段,发现不在同一个网段,因此发给网关

由于网关的 IP 地址是已经配置好了,因此发送 ARP 获取网关的 MAC 地址

发送包

而最后发送包的内容主要有:

源 MAC:服务器 A 的 MAC

模板 MAC:192.168.1.1 网关的 MAC

源 IP:192.168.1.101

目标 IP:192.168.4.101

    数据包到达 192.168.1.1 这个网口后,网口发现 MAC 地址是它的,就将包收进来,然后开始“思考”往哪里转发。

    这时候,路由器 A 中配置了规则 A1:

要访问 192.168.4.0/24,就从 192.168.56.1 这个网口出去,下一跳是 192.168.56.2

2)网关 A 到 网关 B

    于是,路由器 A 匹配了 A1,要从 192.168.56.1 这个口发出去,发给 192.168.56.2。于是,又开始了这个过程:

检查 B 的网段,发现在同一个网段, ARP 获取 MAC 地址

发送包

数据包的内容是:

源 MAC:192.168.56.1 的 MAC

模板 MAC:192.168.56.2 的 MAC

源 IP:192.168.1.101

目标 IP:192.168.4.101

    数据包到达 192 .168.56.2 网口,网口发现 MAC 地址是它的,就将包收进来,然后去检查路由规则。

    路由器 B 配置以下规则 B1:

想访问 192.168.4.0/24,就从 192.168.4.1

    而路由器 B 发现,它的右网口就是目标地址网段的,因此就没有下一跳了。

3)网关 B 到 服务器 B

路由器 B 匹配上 B1。从 192.168.4.1 出口,发给 192.168.4.101。数据包内容:

源 MAC:192.168.4.1 的 MAC

模板 MAC:192.168.4.101 的 MAC

源 IP:192.168.1.101

目标 IP:192.168.4.101

    服务器 B 收到数据包,发现 MAC 地址是它的,就把包收进来。

    通过上面的过程可以看出,每到一个新的局域网, MAC 地址都是要变的,而 IP 地址则都不变。在 IP 头里面,不会保存任何网关的 IP 地址。

    而我们说的下一跳,就是某个 IP 要将这个 IP 地址转换为 MAC 放入 MAC 头

NAT 网关

    NAT 网关,也就是 Network Address Translation。

    由于各个局域网都有各自的网段,很容易出现 IP 冲突的情况。如上图,美国服务器 A 的 IP 地址和 法国服务器 B 的 IP 地址都是 192.168.1.101/24,从 IP 上看,好像是自己访问自己,但实际上从美国的 192.168.1.101 访问法国的 192.168.1.101。

    如何解决这个问题呢?既然局域网之间没有商量好 IP 分配,各管各的,那到国际上,也就是中间的局域网里面,就需要使用另外的地址,就像出国后,我们要改用护照一样。

    首先,目标服务器 B 在国际上要有一个国际的身份,我们给它一个 190.168.56.2.在网关 B 上,我们记下来,国际身份 192.168.56.2 对应国内身份 192.168.1.101.凡是要访问 192.168.56.2 的,网关都要转成 192.168.1.101。

    于是,源服务器 A 要访问目标服务器 B,目标地址就变成国际 IP 地址 192.168.56.2。过程如下:

1)源服务器 A 发数据包到网关 A

检查服务器 B IP,不在同一网段

ARP 获取网关 MAC 地址

发送包

数据包的内容是这样的:

源 MAC:服务器 A 的 MAC

目标 MAC:192.168.1.1 这个网口的 MAC

源 IP:192.168.1.101

目标 IP:192.168.56.2

    路由器 A 中 192.168.1.1 这个网口收到数据包后,检查 MAC 地址一致,将包收进来。

    在路由器 A 中配置了规则:

想访问 192.168.56.2/24,就从 192.168.56.1 网口发出去,发给 192.168.56.2,没有下一跳。

    由于路由器的右网口(192.168.56.1) IP 地址和目标 IP 地址在同一网段,因此没有下一跳。

2)网关 A 到网关 B
当网络包发送到中间的局域网时,服务器 A 也需要有个国际身份。因此,源 IP 地址 192.168.1.101 要改成 192.168.56.1,所以数据包的内容是:

源 MAC:192.168.56.1 的 MAC

目标 MAC:192.168.56.2 的 MAC

源 IP:192.168.56.1

目标 IP:192.168.56.2

    包到达 192.168.56.2 这个网口后,发现 MAC 一致,就将包收进来。

    而路由器 B 是 NAT 网关,它上面配置了,国际身份 192.168.56.2 对应国内的 192.168.1.101,于是目标地址改为 192.168.1.101。

    同样的,路由器 B 中配置了规则:

想访问 192.168.1.101,就从 192.168.1.1 网口出去,没有下一跳。

    于是,数据包就从 192.168.1.1 这个网口发给 192.168.1.101。

3)网关 B 到服务器 B
数据包从 192.168.1.1 网口发出后,同样经过这些步骤:

检查服务器 B 的 IP,在同一网段

ARP 获取服务器 B 的 MAC 地址

发送包

这时的数据包就变成了:

源 MAC:192.168.1.1 的 MAC

目标 MAC:192.168.1.101 的 MAC

源 IP:192.168.56.1

目标 IP:192.168.1.101

    服务器收到包后,检查 MAC 地址一致,就将数据包收进来。

    从服务器 B 接收的数据包可以看出,源 IP 为 服务器 A 的国际身份,因而发送返回包的时候,也发给这个国际身份,由路由器 A 做 NAT,转换为国内身份。

动态路由
动态路由算法
距离矢量路由算法

1)基本思路

基于Bellman-Ford 算法。每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,从哪条线出去,另一个是到目标路由器的距离

2)存在问题

a. 好消息传得块,坏消息传的慢

新加入的路由器能够很快的新路由器信息广播出去。但是如果一个路由器挂了,挂的消息没有广播。每个经过这个宕机节点的路由器,无法得知该节点一宕机,而是试图通过其他的路径访问,直到试过了所有的路径,才发现这个路由器已经宕机了。

示例:

b. 每次发送消息,要发送整个全局路由表

    上面的两个问题,限制了距离矢量路由的网络规模,仅适用于小型网络(小于 15 跳)。

链路状态路由算法

1)基本思路

基于Dijkstra 算法。当一个路由器加入网络是,首先是发现邻居,给邻居说 hello,邻居都回复。然后计算和邻居的距离,发送一个 echo,要求马上返回,除以 2 就是距离。接着将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器。

    这种算法中,每个路由器都能在自己本地构建一个完整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。

    不像距离矢量路由协议那样,更新时发送整个路由表。链路状态路由协议只广播更新的或改变的网络拓扑,这使得更新信息更小,节省了宽带和 CPU 利用率。而且一旦一个路由器挂了,它的邻居都会广播这个消息,可以使得坏消息迅速收敛。

动态路由协议
基于链路状态路由算法的 OSPF
OSPF(Open Shortest Path First, 开放式最短路径优先)协议,广泛应用在数据中心的协议。由于主要用在数据中心内部,用于路由决策,因此称为内部网关协议(Interior Gateway Protocol,简称 IGP)

    内部网关协议的重点就是找到最短路径。当存在多个最短路径时,可以在这多个路径中进行负载均衡,这常常被称为等价路由

    等价路由不仅可以用来分摊流量,还可以提高容错率,当一条路径不通时,还可以通过另外一条路到达目的地。

基于距离矢量路由算法的 BGP
针对网络之间的路由协议,称为外网路由协议(Border Gateway Protocol,简称 BGP)

    每个数据中心都有自己的路由配置。例如,哪些外部 IP 可以让内部知晓,哪些内部 IP 可以让外部知晓,哪些可以通过,哪些不能通过。

    因此,在各个数据中心进行交互时,需要一种协议,通过这种协议,可以知道相邻数据中心的路由配置,从而找到数据中心之间最好的路由。

    BGP 协议就是这样的协议。它不着眼于发现和计算路由,而在于控制路由的传播和选择最好的路由。

总结

数据包要离开本局域网,就要经过网关,网关就是路由器的一个网口;

路由器是一个三层设备,理由有如何寻找下一跳的规则;

经过路由器之后的 MAC 头肯定会变。如果 IP 不变,就是 转发网关,否则就是 NAT网关

路由分静态路由和动态路由,动态路由可以配置复杂的策略路由,控制转发策略;

动态路由主流算法有两种,距离矢量算法和链路状态算法。基于两种算法产生两种协议,BGP 协议和 OSPF 协议。

参考:

百度百科

刘超-趣谈网络协议系列课;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108759.html

相关文章

  • Confluence漏洞或致大规模网络攻击 客户群体包括近6万家公司和组织

    摘要:重要的是,分析人员已经调查了该漏洞,他们发现互联网上有超过个暴露和易受攻击的服务器。数据显示,的网络攻击事件都与漏洞利用相关,由此可见安全漏洞在网络攻击中起到至关重要的作用。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;c...

    TwIStOy 评论0 收藏0
  • [ResNet系] 007 SENet

    摘要:前面层中的以类别无关的方式增强可共享的低层表示的质量。通过调整网络各层间的连接机制来提升深层网络的学习和表示性能。基本都是常规处理和训练设置。根据输入动态调整各通道的特征,增强网络的表示能力。 SENet Squeeze-and-Excitation NetworksJie Hu, Li Shen, Gang Sun 摘要 卷积神经网络顾名思义就是依赖卷积操作,使用局部感受区域(loc...

    huashiou 评论0 收藏0
  • 初学者怎么选择神经网络环境?对比MATLAB、Torch和TensorFlow

    摘要:本报告面向的读者是想要进入机器学习领域的学生和正在寻找新框架的专家。其输入需要重塑为包含个元素的一维向量以满足神经网络。卷积神经网络目前代表着用于图像分类任务的较先进算法,并构成了深度学习中的主要架构。 初学者在学习神经网络的时候往往会有不知道从何处入手的困难,甚至可能不知道选择什么工具入手才合适。近日,来自意大利的四位研究者发布了一篇题为《神经网络初学者:在 MATLAB、Torch 和 ...

    yunhao 评论0 收藏0
  • 私有灾备云解决方案

    摘要:灾备服务支持本地灾备异地灾备公有云灾备两地三中心等多种服务方式,可根据业务特点和需求,灵活选择灾备方式,保证业务的和。公有云灾备架构公有云灾备服务支持多种业务部署方式,为云平台业务提供不同指标,控制云平台业务灾备成本。UCloudStack 云平台通过分布式存储系统保证本地数据的安全性,同时通过远程数据备份服务,为用户提供远程数据备份和容灾备服务,可以将本地云端数据统一归档、备份至远程云...

    youkede 评论0 收藏0
  • Python3网络爬虫实战---36、分析Ajax爬取今日头条街拍美图

    摘要:上一篇文章网络爬虫实战数据爬取下一篇文章网络爬虫实战动态渲染页面抓取本节我们以今日头条为例来尝试通过分析请求来抓取网页数据的方法,我们这次要抓取的目标是今日头条的街拍美图,抓取完成之后将每组图片分文件夹下载到本地保存下来。 上一篇文章:Python3网络爬虫实战---35、 Ajax数据爬取下一篇文章:Python3网络爬虫实战---37、动态渲染页面抓取:Selenium 本节我们...

    Leck1e 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<