Jerry's Blog

Recording what I learned everyday

View on GitHub


22 January 2020

Network(1) -- Network Layer

by Jerry Zhang

网络层

网络层不像应用层和传输层,它存在于网络中的每一个主机和路由器。

网络层可以分成:数据层面和控制层面, data plane and control plane

第四章讨论数据层面:每个路由器的功能,探讨网络层是如果决定一个到达路由器的数据包是如何被转发出去的。这一章会包括传统的IP转发和一般化的转发。IPv4和IPv6。

第五章讨论控制层面的功能:全网范围内的控制逻辑,确定一个数据包是如何从起点被转发到终点的。包括路由算法,以及路由协议,比如OSPF和BGP。

Software-defined networking (SDN) 明确地分开了数据层面和控制层面。

如果从host1发送数据到host2,首先,h1的网络层会从传输层接收数据包(segments),包装成datagram,然后发送到附近的路由器R1。对于每一个路由器,数据层面的基本任务就是转发datagram。而控制层面的基本任务是指导这个路由器的转发行为,从而使这些数据包能够从起点经过一些路径,最终传输到终点。

网络层最基本的任务就是把一个数据包从一个主机发送到另一台主机,所以它的两个重要功能就是:

  1. 转发:当一个数据包到达一个路由器的输入口时,路由器要决定把它转给正确的输出连接。

  2. 路由:网络层要确定从发送者到接收者,要走哪条路径。计算这个路径的算法叫做路由算法。

转发和路由这两个词经常被混用。在本书中,转发是指在路由器内部,数据包从输入接口转移到输出接口的过程。一般用硬件实现。路由是指在全网范围内确定端到端路径的过程。一般用软件实现。

路由器的一个关键组件就是它的转发表,forwarding table。路由器查看包的head中的值,然后用这些值去查转发表。

控制层面:传统方法

那么转发表一开始是怎么配置的呢?路由算法决定了转发表的内容。传统的方法是,路由算法在每个路由器中都要运行一次,每个路由器中既有转发又有路由的功能。

在一个路由器中的路由算法函数与另一个路由器中的路由算法函数沟通,来计算出转发表中的值。通过什么沟通呢?通过路由协议!

控制层面:SDN方法

新的方法是,通过一个物理上分开的远程的控制器来计算和分发转发表。路由器和远程控制器是怎么沟通的呢?通过交换包含转发表和其他路由信息的消息。软件定义的网络,software-defined networking (SDN), 之所以叫这个名字,是因为负责计算转发表和与路由器交互的控制器,是由软件定义的。

网络服务模型

当发送端的传输层发送一个包到网络层时,它能依赖网络层把这个包送达目的地吗?当多个包被发送时,它们能按顺序到达吗?两个连续的包的发送时间间隔和接收到的时间间隔一样吗?网络层会反馈网络的拥堵吗?网络层的服务模型回答了这些问题,定义了端到端传输的特征。下面来思考网络层可能提供哪些服务:

事实上,Internet的网络层只提供了一项服务:best-effort service, 尽最大努力服务。既不能保证数据包的顺序,也不能保证它最终一定被送达。既不能保证端到端的延时,也不能保证最小带宽。所谓“尽最大努力”服务,其实就是“没有服务”的一种委婉的说法。

tags: Network