目录
- 概述
- 物理层
- 数据链路层
- 网络层 (1) 基础知识
- 网络层 (2) IP地址设计和用尽问题
- 网络层 (3) 网络层分组的传输流程
- 网络层 (4) 网络层多播等应用
- 运输层 (1) 可靠传输和TCP/UDP
- 运输层 (2) 拥塞控制和握手挥手
- 应用层 (1) HTTP和万维网
路由器的构成
由两部分组成,路由选择部分和分组转发部分,使用路由表和转发表。
路由选择部分
使用路由选择处理机,根据路由选择协议构造出路由表,定期同步和其他路由器的关系。
路由转发部分
由交换结构和输入/输出端口组成。他按照转发表操作,通过路由获取的信息,通过他正确的发送出去。
转发表和路由表的不同
路由表是存储了整个网络的拓扑结构,存储目的网络和下一条地址的映射,而转发表是从路由表得出的,只涉及一个路由器,回存储硬件信息,输出端口等信息。路由表是通过软件实现的,而转发表是通过硬件实现的。过程就是路由表更新也会更新转发表,分组过来就会根据硬件的转发表做转发。但是数据传入的速度是比处理速度快的,这就需要缓存来等待处理数据。
路由表怎么形成的
其中就要使用路由选择协议,从是否能动态的调节分类,有两类分别是
静态路由选择协议
开销很小并且简单,但是不能适应网络的变化,对于很小的网络,就可以采用这种方式,有人工配置每一条路由。
动态路由选择协议
实现起来比较复杂,开销比较大,适合比较大型的网络。
互联网采用的是分布式的动态的路由选择协议,因为互联网很大,如果都集中起来,那么路由表的项目会爆炸,并且有些网络不想被连接其内部的选择的协议。所以互联网被划分成了很多小的自治系统,他们之间是相互独立的,互联网把路由选择协议分为两大类:
内部网关协议IGP:
是在自治系统中使用的,和其他系统选择什么没有关系,具体的就是RIP和OSPF。
外部网关协议EGP
由于每个自治系统可能使用不同的协议,所以他们之间传输数据时,就需要做转化,这就是外部的网关协议。具体的是BGP。
具体协议
RIP:
它是一种分布式的基于距离向量的路由选择协议,最大的优点就是简单。它的距离值跳数,每经过一个路由器,就加一。它的路由表会存储3个值:目的网络 跳数 下一条地址。它规定最大的跳数是15,如果大于15就定义为不可达。可见他只适应小网络。由于是分布式的,所以每一个路由器都需要不断的和其他路由器交换信息,RIP只与周围的路由器交换信息,并且交换整张路由表,按照固定的时间间隔交换。 如果一个表示空的,经过几次交换,他就会知道这个系统中到所有的路由器的跳数信息了。它使用的算法是距离向量算法。简单说就是收到信息,如果本路由表没有这个目的地址,就加入自己的路由表,并把距离加一。如果存在,判断距离的多少,做更新。它的主要缺点就是坏消息传的慢,好消息传得快。可以自己思考下为什么
OSPF
开放最短路径优先,他是在RIP之后,克服了他的缺点开发出来的。它使用了最短路径算法SPF,它的主要原则也是找到一条最短l路径。最主要的特点就是使用了分布式的链路状态协议,而不是RIP的距离向量。不同点它是向所有的路由器发送信息,也叫洪泛法,发送的信息是本路由相邻所有路由的状态,状态有是否可达和度量,这里度量有很多选项,比如时延,距离,费用等等。什么时候发送呢,只有当路由器的链路状态变化才会触发。 经过这种同步,这个系统上的所有路由器都知道全网的结构图了,都会建立一个链路状态数据库。OSPF还可以划分区域,这样可以使效率更高,减少了通信量。 相邻的路由器10秒就回交换一次问候分组,看对方是不是活着的,如果有的状态发生了变化,就发送洪范的信息。他没有坏消息传播慢的问题。
BGP
由于互联网是相当大的,如果使用上面的两周协议,传输的数据和创建的拓扑数据库将相当庞大,效率是相当底下的。并且每个自治系统的关注点是不同的。不能统一的去用一个变量选择他们。有的是金钱,有的是距离等。不同的自治系统是有很大差别的,有的不希望通过自己传输其他系统的数据,有的愿意让他们经过。比如治安和经济等问题,都是要考虑的。 所以边界网关协议只能力求一条能够到达目的网络且比较好的路由。 每个自治系统的边界路由器就需要运行内部和外部两种协议了。他作为BGP发言人,同样他也要传递一些信息,包括到达某个网络所要经历的一些列自治系统。他的节点数量是自治系统的量级,所以数量回少很多,存储目的网络前缀,下一条路由器,到达目的网络要经过的自治系统序列。序列是为了防止兜圈子吗。自己在里面肯定回传回自己。
可以看出自治系统内部力求找到一条最短代价的路径传输数据,而外部力求找到一条可以到达的并考虑了好多其他因素的路径传输。
一些场景和规则
子网掩码的分组转发
1. 提取目的地址
2. 看看是不是直接交付:查看和路由器直连的网络的网络号和子网掩码做并,如果和目的地址的网络前缀相同,那么直接交付。找到硬件地址
3. 如果没有直接交付的,看有没有目的地址的特定主机路由,如果有直接交付
4. 查看路由器的路由表的每项的网络前缀(和子网掩码并),如果有相同的,跳转到下一条地址
5. 还没有看看有没有默认路由,如果有也直接交付
6. 都没有报告错误
本文使用 mdnice 排版