网络层
网络层的设计问题
数据报子网(datagram network):网络层提供无连接的服务,所有的数据包都被独立地注入到网络中,并且每个数据包独立路由,不需要提前建立任何设置。
虚电路子网(virtual-circuit network):网络层提供面向连接的服务,在发送数据包之前,必须首先建立起一条从源路由到目标路由器之间的路径。
路由算法
路由算法(routing algorithm):网络层软件的一部分,它负责确定一个入境数据包应该被发送到哪一条输出线路上。
最优化原则(optimality principle):如果路由器 J 在从路由器 I 到路由器 K 的最优路径上,那么从 J 到 K 的最优路径也必定遵循同样的路由。
汇集树(sink tree):作为最优化原则的一个直接结果,从所有的源到一个指定目标的最优路径的集合构成了一棵以目标节点为根的树。
最短路径路由:每一个节点都标出了从源节点沿着已知的最佳路径到达本节点的距离。初始时,所有的路径都不知道,因此所有节点都被标记为无限远。随着算法的不断进行,陆续有一些路径被找到,于是节点的标记可能发生变化,以便反映出更好的路径。每个标记可能是暂时时,也可能是永久的。初始时,所有的标记都是暂时的。当发现一个标记代表了从源节点到该节点的最短可能路径,该标记就变成永久,以后不再改变。
距离矢量路由:每个路由器维护一张表(即一个矢量),表中列出了当前已知的到每个目标的最佳距离,以及所使用的链路。这些表通过邻居之间相互交换信息而不断被更新,最终每个路由器都了解到达每个目的地的最佳链路。
无穷计算问题:当某个路由器 A 停机或者与其他所有路由器之间的链路断了,因为无法收到来自 A 的任何信息,其他路由器在进行信息交换时会不断增大到 A 的距离。
链路状态路由:
每一个路由器必须完成以下的事情:
- 发现它的邻居节点,并了解其网络地址。
- 设置到每个邻居节点的距离或者成本度量值。
- 构造一个包含所有刚刚获知的链路信息包。
- 将这个包发送给所有其他的路由器,并接收来自所有其他路由器的信息包。
- 计算出到每个其他路由器的最短路径。
距离矢量路由和链路状态路由的比较:相比距离矢量算法,链路状态路由算法需要更多的内存和计算。对于一个具有 n 个路由器的网络,每个路由器有 k 个邻居,那么,用于存储输入数据所要求的内存与 kn 成正比,这至少与列出全部目的地的路由表一样大。而且,计算时间的增长快过 kn,即使采用最有效的数据结构,在大型网络中运行这个算法依然是个问题。不过,在许多实际场合,链路状态路由算法工作得很好,因为它没有慢收敛问题。
层次路由:路由器被划分成区域,每个路由器知道如何将数据包路由到自己所在区域内的目标地址,但是对于其他区域的内部结构毫不知情。
广播路由:同时给全部目标地址发送数据包。
移动主机路由:使人们有可能利用固定的家乡地址来发送数据包,无论他们在哪里都能有效地把数据包送到。
拥塞控制算法
随机早期检测(RED,Random Early Detection):为了确定何时开始丢弃数据包,路由器要维护一个运行队列长度的平均值。当某条链路上的平均队列长度超过某个阈值时,该链路就被认为即将拥塞,因此路由器随机丢弃一小部分数据包。
服务质量
资源预留协议(RSVP):主要功能是预留资源,发送数据则需要使用其他协议,它允许多个发送方给多个接收组传送数据,也允许接收方自由地切换频道,并且在消除拥塞的同时优化带宽的使用。
缓冲:当一个数据包抵达时,它通常被保留在路由器的缓冲区直到可以从选择的输出线路上发送出去。
抖动(jitter):延迟的变化(即标准方差)或者数据包到达时间的变化。
漏桶算法:每个主机在连接到网络的接口中包含一个漏桶。为了向网络发送数据包,必须有可能往漏桶中灌入更多的水。如果漏桶满时来了一个数据包,那么该数据包必须排入队列等漏桶空出来时再接纳,或者被丢弃。
令牌桶:把网络接口想象成一个漏桶,正在往里灌水。为了发送一个数据包,我们必须能够从桶内掏出水或令牌,而不是往桶内注水。桶内只可累积固定数量的令牌,不可能有更多数量的令牌。如果桶是空的,我们必须等更多的令牌到达才能发送另一个数据包。
网络互联
隧道技术应用场景:源主机和目标主机所在网络的类型完全相同,但它们中间却隔着一个不同类型的网络。
Internet 的网络层
IPv4 协议:每个 IP 数据报包含两部分,一个头和一个正文,正文部分也称之为有效净荷。头由一个 20 字节的定长部分和一个可选的变长部分组成。
IP 地址:是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
子网:分隔一个大型网络得到的一系列结果网络,比如以太网。
子网掩码:因为前缀长度仅从 IP 地址无法推断出来,路由协议必须把前缀携带给路由器。前缀长度相当于网络部分中 1 的二进制掩码,它可以与一个 IP 地址进行 AND 操作,以便提取出该 IP 地址的网络部分。
子网划分:在内部将一个网络块分成几个部分供多个内部网络使用,但对外部世界仍然像单个网络一样。
无类域间路由(CIDR):当一个数据包到达时,路由器扫描路由表以便确定目的地是否在前缀的地址块内。有可能多个具有不同前缀的表项得以匹配,在这种情况下,使用具有最长前缀的表项。
路由聚合技术:把多个小前缀的地址块合并成一个大前缀的地址块。
网络地址转换(NAT):ISP 为每个家庭或公司分配一个或少量 IP 地址,用这个 IP 地址来传输 Internet 流量。在客户网络内部,每台计算机有唯一的 IP 地址,该地址主要用来路由内部流量。然而,当一个数据包需要离开客户网络,发向其他 ISP 时,它必须执行一个地址转换,把唯一的内部 IP 地址转换成那个共享的公共 IP 地址。
Internet 控制消息协议(ICMP):当路由器在处理一个数据包的过程中发生了意外,可通过该协议向数据包的源端报告有关事件。
地址解析协议(ARP)工作过程:
- 首先,每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
- 当源主机要发送数据时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机的 IP 地址、源主机 MAC 地址、目的主机 IP 地址。
- 当本网络的所有主机收到该 ARP 数据包时,首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
- 源主机收到 ARP 响应包后,将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
动态主机配置协议(DHCP):每个网络必须有一个 DHCP 服务器负责地址配置。当计算机启动时,它有一个嵌入在 NIC 中的内置以太网地址或其他链路层地址,但没有 IP 地址。像 ARP 一样,该计算机在自己的网络上广播一个报文,请求 IP 地址。当 DHCP 服务器收到请求,它就为该主机分配一个空闲的 IP 地址并为它指定一段固定的时间。在时间到达前,主机必须请求 DHCP 续订,如果没有提出续订请求或请求被拒绝,主机或许不能使用以前分配给它的 IP 地址。
最短路径开放优先(OSPF):一种内部网关路由协议,用一个图来表示实际的网络,然后每个路由器使用链路状态方法计算从自身出发到所有其他节点的最短路径。有可能协议会发现多个同样短的路径,在这种情况下,OSPF 记住最短路径集合,并在报文转发期间把流量分摊到这些路径上。
外部网关路由协议(BGP):是一个在自治系统网络中两个邻近的网关主机间交换路由信息的协议。