网络层(Network Layer)有两个主要的功能:

  • Forwarding

    Move packets from router’s input to appropriate router output

  • Routing

    Determine route taken by packets from source to destination

IP

网际协议(Internet Protocol),又称互联网协议。

Datagram format

关于 fragmentation 和 reassembly:

Addressing

IP 地址是对于 host 和 router interface 的 32-bit 标识。

Subnet

在同一子网中的设备的 IP 地址具有相同的前缀。

子网掩码(subnet mask)是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络地址以及哪些位标识的是主机地址的位掩码。

CIDR

无类别域间路由(Classless Inter-Domain Routing)使得 IP 地址的子网标识部分可以为任意长度,即子网掩码长度可变。

地址格式:a.b.c.d/x,其中 x 表示子网标识部分的位数。

DHCP

动态主机设置协议(Dynamic Host Configuration Protocol)使得设备能够动态地获得 IP 地址。

NAT

网络地址转换(Network Address Translation)是用于解决子网下所有设备仅有一个公网 IP 这一情况的技术。

NAT 设备需要:

  • 对于传出的数据:将(源 IP 地址,port #)替换为(NAT IP 地址,新 port #)

  • 记录:所有(源 IP 地址,port #)至(NAT IP 地址,新 port #)的转换对

  • 对于传入的数据:将(NAT IP 地址,新 port #)替换为(源 IP 地址,port #)

IPv6

前文主要叙述的是 IPv4。相对于 IPv4,IPv6 有更大的地址空间,更快更安全。

ICMP

互联网控制消息协议(Internet Control Message Protocol)被用于在网际协议中发送控制消息,提供可能发生在通信环境中的各种问题反馈。

可以在 cmd 中尝试下列命令:

1
2
ping wu-haitao.github.io
tracert wu-haitao.github.io

Routing

路由算法

路由算法是用于寻找最小花费路径的算法。

Dijkstra’s algorithm

路由器需要有完全的拓扑和链路费用信息。

Distance Vector Algorithm

The Bellman-Ford Algorithm

Distance Vector 算法是基于 Bellman-Ford Equation 的:

  • Define distances at each node x

    • dx(y) = cost of least-cost path from x to y
  • Update distances based on neighbors

    • dx(y) = min{c(x, v) + dv(y)} over all neighbors

具体做法为:

  • 每一节点

    • 知道自己与邻居节点之间的路径花费

    • 维护自身的距离向量(包含自身到所有其它节点的路径费用估计值)

    • 维护邻居节点的距离向量

  • 节点会定期向邻居发送自己的距离向量

  • 当一个节点收到来自邻居的新的距离向量时,将其保存并通过 Bellman-Ford Equation 更新自己的距离向量,更新完毕后发送给每一个邻居

  • 最终距离向量会收敛至最小路径

DV 算法是迭代(iterative)、异步(asynchronous)且分布式(distributed)的。

路由器仅需邻居以及与邻居的链路费用的信息。

路由协议

Intra-AS Routing

Interior Gateway Protocols (IGP)

  • RIP: Routing Information Protocol (Distance Vector)

  • OSPF: Open Shortest Path First (Link State)

Inter-AS Routing

Border Gateway Protocol (BGP)