网络层

概述

  • 因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

TCP/IP协议栈

IP地址编址

点分十进制记法:

分类:

  • 由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
    IP 地址 ::= {< 网络号 >, < 主机号 >}

  • 1-126:A类地址,127是本机地址;
    128-191:B类地址;
    192-223:C类地址;
    224-240:D类地址;

  • 特殊的几个地址:
    127.0.0.1 本地环回地址;
    169.254.0.0 windows链接失败自动分配的地址;
    10.0.0.0 保留的私网地址;
    172.16.0.0 — 172.31.0.0 保留的私网地址;
    192.168.0.0 — 192.168.255.0 保留的私网地址;

划分子网:

  • 通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。

  • IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

  • 要使用子网,必须配置子网掩码。例如:一个 C 类地址的默认子网掩码为 255.255.255.0,如果 B 类地址的子网占两个比特,那么子网掩码为11111111 11111111 11111111 11000000,也就是 255.255.255.192。

注意:外部网络看不到子网的存在。

构造超网(无分类CIDR):

  • CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
  • CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。从三级编址(使用子网掩码)又回到了两级编址。
  • IP地址 ::= {<网络前缀>, <主机号>}
  • 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。路由聚合也称为构成超网(supernetting)。
  • CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。
  • 在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

计算机A到B的通信过程:

ARP协议

  • 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。

  • 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。

  • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

注意:ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

IP数据包

  • 一个 IP 数据包由首部和数据两部分组成。
  • 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。
  • 版本——占 4 位:指 IP 协议的版本:4(IPv4)和 6(IPv6)
  • 首部长度——占 4 位:可表示的最大数值,是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
  • 区分服务——占 8 位:用来获得更好的服务,在一般的情况下都不使用这个字段 。
  • 总长度——占 16 位:指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
  • 标识——占 16 位:它是一个计数器,用来产生数据报的标识。
  • 标志——占 3 位:目前只有前两位有意义。
  • 生存时间——占 8 位:记为 TTL (Time To Live),数据报在网络中可通过的路由器个数的最大值。
  • 协议——占 8 位:该字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。
  • 首部检验和——占 16 位:因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量(简单计算)。
  • 源地址和目的地址——占 32 位:都各占 4 字节。
  • 片偏移——占 312位:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位

注意:IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。

IP转发分组

  • 路由就是路由器从一个网段到另外一个网段转发数据包的过程,即数据包通过路由器转发,就是数据路由。
  • 网络畅通条件,要求数据包必须能够到达目标地址,同时数据包必须能够返回发送地址。(有去有回)
  • 这就要求沿途经过的路由器必须知道到目标网络如何转发数据包,即到达目的网络下一跳转发给哪个路由器,也就是必须有到达目标网络的路由,沿途的路由器还必须有数据包返回所需的路由。

注意:IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

网际控制报文协议 ICMP

  • ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。ICMP 不是高层协议,而是 IP 层的协议。
  • ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文
  • ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型代码检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
  • 几种常见的ICMP报文类型:
  • Ping:用来测试两个主机之间的连通性;是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP;
  • Traceroute: 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径,发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文;

路由选择协议

基本概念:

从路由算法的自适应性考虑可分为:静态路由选择策略和动态路由选择策略:

  • 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
  • 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。可以把路由选择协议划分为两大类:

  • 自治系统内部的路由选择:RIP 和 OSPF;
  • 自治系统间的路由选择:BGP

内部网关协议 RIP:

  • RIP是一种分布式的基于距离向量的路由选择协议,RIP 协议中的距离即为跳数,RIP允许一条路径最多只能包含 15 个路由器。跳数的最大值为16 时相当于不可达。可见RIP只适用于小型互联网。

  • RIP协议的三个要点:
    1.仅和相邻路由器交换信息;
    2.交换的信息是当前本路由器所知道的全部信息,即自己的路由表;
    3.按固定的时间间隔(30秒)交换路由信息;

  • 优缺点:
    优点:RIP 协议实现简单,开销小。
    缺点:但是 RIP 能使用的最大距离为 15,限制了网络的规模;并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器;同时仅基于跳数选择最佳路由也不够合理;

内部网关协议 OSPF(Open Shortest Path First)

  • 基本特点:
    1.“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的;
    2.“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF;

  • 三个要点 :
    1.向本自治系统中所有路由器发送信息,使用的方法是洪泛法。
    2.发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
    3.只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。

  • OSPF 能够用于规模很大的网,的更新过程收敛得快;

外部网关协议 BGP

BGP 是不同自治系统的路由器之间交换路由信息的协议。

  • 因特网的规模太大,使得自治系统之间路由选择非常困难;
  • 边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由;

每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。

虚拟专用网VPN

专用网段:
10.0.0.0 到 10.255.255.255
172.16.0.0 到 172.31.255.255
192.168.0.0 到 192.168.255.255

这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。

下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。

网络地址转换NAT

需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IP。

所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 IP才能和因特网连。

在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。

Internet组播管理协议 IGMP

  • 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他多播路由器。
  • 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。