网络层的组成——两个平面

网络层主要由 数据平面控制平面 两个部分组成的:

  • 数据平面 :局部的性质,是指每一个交换机内部决定从入口的每一个包应该转发到哪一个出口上
  • 控制平面 :整个网络规模的逻辑概念,决定每一个路由器应当如何导航

两种平面的交互

  • 传统方法:在每一个路由器里面各自实现
  • software-defined nerworking(SDN) :在远程有一个服务器来决定如何转发
    这两种方法的区别如下图:
    传统方法

网络的服务模型

服务模型表示了这个网络的组成方式提供了哪些保证,下面列出了一些服务模型提供的保证:

Best Effort Model

  • 机制非常简单,便于广泛使用
  • 对于绝大多数时间和绝大多数任务提供足够的带宽,包括即时通话和视频传输任务
  • 可以分布式部署,易于复制,可以利用数据中心等技术,从多个位置提供服务
  • 弹性的拥塞控制

路由器模型的综述

路由器的一般模型如下:

路由器会通过读数据头的信息来决定转发给哪个出口

最长前缀匹配

路由器通过匹配最长前缀的方法来决定数据包应该转发到哪一个口里面,例如下图所示的路由表:

当一个数据包到达的时候,路由器会依次尝试匹配最长的可被匹配的前缀,并且去查表,决定转发的出口

switching fabric(交换网络)

在理想的情况下,如果一个路由器有N个入口和N个出口,其中每个口的传输速率为 那么它理想的交换速率应该是

而中间的交换网络有以下几种常见的模型:

前两种是早起的版本,现在版本更多使用第三种全连接的形式,第三种的可并行化程度更高

Queuing Delays(排队延迟是如何产生的)

Input Port Queuing(入口排队)

如果转发的速率比所有入口的传入速率只和要小,那么在入口处会发生排队的情况,最常见的是Head-of-the-Line (HOL) blocking 的情况,即某个入口的第一个包被阻塞了,导致后面的包即使希望传输给其他的出口也无法立即进行转发:

在上面的途中,绿色的包的出口是空闲的,但是必须要等待前面的红色的包完成传输,才能轮得到转发这个绿色的包,这个时候就会出现 queuing delay

输出端口的排队

在输出端口的地方,如果转发的速率为 ,某一个输出端口的上载速率为 那么当很多包都转发到这个端口的时候,一旦速率超过 就需要在出口进行排队,并且当缓冲区满的时候会进行丢包

  • 由于有缓冲区,所以如果发生了网络拥塞和buffer太少,都会丢包
  • 调度的原则是转发表现最好的包,整体表现为优先调度,而网络层是中立的

多少缓冲区是足够的

假设每一条链路的容量是 一共有 条链路,那么需要的缓冲区大小为:

上面的是经验公式,比理论公式更有实用性

缓冲区控制

缓冲区控制主要解决两个问题;

  • 当缓冲区满的时候什么包应该被丢弃
  • 什么样的包标志着拥塞的产生

包调度方法

包调度主要解决应该把哪一个包从缓冲区里面拿出来发出去,一般采用如下的原则:

  • first come, first serve
  • priority
  • round robin
  • weighted fair queueing
    其中的 first come, first serve 又称为First-in-first-out(FIFO) 抽象的数据结构就是一个queue

IPv4

IPv4数据报格式

在IPv4数据报中,包含以下关键字:

  • 数据报版本号
  • 首部长度:一般为20,标识这个报的头有多长
  • 服务类型:例如FTP、IP电话通信
  • 数据报长度:注意这里的长度是包含报文头的,是头+内容的长度 ,由于该字段的长度为16比特,所以一个IP数据报能容纳的最长长度为65535字节,然而数据报很少有超过1500字节的
  • 标识、标志、片偏移
  • 寿命(TTL):这个是用来保证没有数据报会在网络中循环,每次路由器处理数据报,都会把这个字段的值-1。如果这个字段的值达到0那么这个数据报应当被丢弃
  • 协议:标识最终送达的时候,这个数据报应当被交给哪一个特定的传输层协议,例如6标识数据应当交给TCP而17标识应当交给UDP 区分这里的协议字段和服务类型字段
  • 首部校验和:对这个头做checksum
  • 源和目标地址的ip
  • 可选项
  • 数据(有效载荷)

书上有这样一段话非常重要,要注意区分IP数据报的首部和TCP数据报的首部,如果是一个TCP/IP 的数据报,那么它的首部长度一共是40个字节,包括20个字节的IP首部和20个字节的TCP首部

IPv4数据报分片

把链路层里面每一次能够传输的最大的帧的大小称为 MTU 这个值会限制每一个IPv4的数据报的大小。如果在传输过程中一个数据报的长度超过了下一段链路层的大小,那么就需要进行分片处理,这里就会用到上面提到的标识、标志和片偏移这个字段来标识当前的分片属于是整个数据报中的哪个部分的

IPv4编址

每个IPv4地址的长度都是32比特,四个字节,一般分为四段,每段一个字节,用十进制表示,中间用.隔开