这篇文章是 网络层介绍上篇的后续部分。
为了更有效地转发 IP 数据报和提升交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
ICMP 容许主机或路由器报告差错状况和提供有关异常状况的报告。算法
虽然ICMP 报文是装在 IP 数据报中,做为其中的数据部分,可是ICMP仍然是IP层的协议,而非高层协议。
ICMP 报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。数据库
详细的ICMP报文的分类可见 维基百科
ICMP差错报告报文可分为如下几种类型segmentfault
咱们先以“终点不可达”报文为例对于ICMP差错报告报文的组成有一个比较直观的了解。网络
ICMP询问报文可分为如下几种类型session
PING (Packet InterNet Groper)用来测试两个主机之间的连通性。使用了 ICMP 回送请求与回送回答报文。
PING 是应用层直接使用网络层 ICMP 的例子,它没有经过运输层的 TCP 或UDP。分布式
咱们打开电脑的终端,即可以Ping本身想要访问的主机IP地址(域名),测试一下连通性。
好比,咱们能够ping一下segmentfault.com工具
Traceroute用来跟踪一个分组从源点到终点的路径。
它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。布局
咱们一样能够在终端测试:测试
互联网采用分层次的路由选择协议。缘由是:spa
定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以肯定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以肯定分组在 AS之间的路由。
尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其余 AS 表现出的是一个单一的和一致的路由选择策略。
“路由器”和“网关”在这里能够视做同义词。
内部网关协议 IGP (Interior Gateway Protocol)
外部网关协议 EGP (External Gateway Protocol)
路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最早获得普遍使用的协议。
RIP 是一种分布式的、基于距离向量的路由选择协议。
RIP 协议中的“距离”也称为“跳数”(hop count),由于每通过一个路由器,跳数就加 1。(这里的“距离”实际上就是指“最短距离”)
RIP 容许一条路径最多只能包含 15 个路由器。“距离”的最大值为 16 时即至关于不可达。
以目前普遍使用的RIP version2为例,简单了解一下RIP报文的组成:
距离向量算法
路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:
(1) 先修改此 RIP 报文中的全部项目:把“下一跳”字段中的地址都改成 X,并把全部的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每个项目,重复如下步骤:若项目中的目的网络不在路由表中,则把该项目加到路由表中。 不然 若下一跳字段给出的路由器地址是一样的,则把收到的项目替换原路由表中的项目。 不然 若收到项目中的距离小于路由表中的距离,则进行更新, 不然,什么也不作。(3) 若 3 分钟尚未收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
文字叙述看着有点累,不过理解了“不一样路径选短的,一样路径选新的”的思路就会很容易。
RIP只与相邻路由交换信息不可避免会带来路由更新的一类延迟,即以前提到的“好消息传得快,坏消息传得慢”。
“ 好消息传得快,坏消息传得慢”其实是信息传送延迟形成路由器的“误判”
例如:
R1本来直接链接NET-A(可直接交付),但NET-A忽然出故障,变为不可达。
R1中关于NET-A不可达的更新尚未传递给链接着R1的路由R2,此时R2仍觉得能够经过R1达到NET-A,便向R1发送<NET-A,2,R2>的路由表;
R1收到后觉得R2能够到达NET-A(其实已经不行了),便更新本身的路由表为<NET-A,3,R2>,并将更新发送出去;
R2收到更新后将本身的路由表更新为<NET-A,4,R1>,并将更新发送出去;
如此来来回回直到两个路由器的路由表跳数都更新至16才肯定了NET-A不可达。
为了克服RIP的缺点,咱们便开发出了OSPF协议。
开放最短路径优先协议,即OSPF(Open Shortest Path First),如上所述,是为克服 RIP 的缺点在 1989 年开发出来的。
发送的信息就是与本路由器相邻的全部路由器的链路状态,但这只是路由器所知道的部分信息
因为各路由器之间频繁地交换链路状态信息,所以全部的路由器最终都能创建一个链路状态数据库。
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
同时,为了使 OSPF 可以用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。
划分区域后,利用洪泛法交换链路状态信息的范围局限于每个区域而不是整个的自治系统。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其余区域的网络拓扑的状况。
OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域 (backbone area)。
主干区域的标识符规定为0.0.0.0,用来连通其余在下层的区域。
OSPF还有一点与RIP不一样,即OSPF 不用 UDP 而是直接用 IP 数据报传送。
OSPF 构成的数据报很短,这样作可减小路由信息的通讯量。
OSPF有五种分组类型
下图简单说明了OSPF的五种分组类型以及它们所能完成的操做
BGP 是不一样自治系统的路由器之间交换路由信息的协议。 默认为当前较新的版本BGP-4。
互联网的规模太大,使得自治系统之间路由选择很是困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
所以,边界网关协议BGP只能是力求寻找一条可以到达目的网络且比较好的路由(不能兜圈子),而并不是要寻找一条最佳路由。
每个自治系统的管理员要选择至少一个路由器做为该自治系统的“ BGP 发言人” (BGP speaker)。经过它与其余自治系统(中的 BGP 发言人)交换路由信息。
一个 BGP 发言人与其余自治系统中的 BGP 发言人要交换路由信息,就要先创建 TCP 链接,而后在此链接上交换 BGP 报文以创建 BGP 会话(session),利用 BGP 会话交换路由信息。
使用 TCP 链接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer)。
BGP所交换的网络可达性的信息就是要到达某个网络所要通过的一系列 AS。
当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。
在众多路由选择协议中,BGP是为数很少的 使用TCP做为传输协议的路由选择协议。
BGP有四种分组类型
路由器你们确定已经不陌生了,在概论部分便提到它是实现“分组交换”的重要工具;本章前面也花了大篇幅讨论路由路径的选择。
简而言之,路由器的工做就是将某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。 也就是咱们所说的“转发分组”。
整个的路由器结构可划分为两大部分:
由三部分组成:
“转发”(forwarding)与“路由选择”(routing)的区别
“ 转发”(forwarding) 就是路由器 根据转发表将用户的 IP 数据报 从合适的端口转发出去。
“ 路由选择”(routing) 则是 按照分布式算法,根据从各相邻路由器获得的关于网络拓扑的变化状况, 动态地改变所选择的路由。
路输入端口里面装有物理层、数据链路层和网络层的处理模块。
数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生必定的时延。
输入端口中的查找和转发功能在路由器的交换功能中是最重要的。
输出端口里面装有物理层、数据链路层和网络层的处理模块。
在网络层的处理模块中设有一个缓冲区(队列)。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。
数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
交换结构负责把分组从一个输入端口转移到某个合适的输出端口。
有三种经常使用的交换方法
下一节会介绍IPv6和虚拟专用网等相关知识,later~