网络层 Network Layer

网络层 Network Layer

分组交换技术 Switching

广域网WAN有两种交换技术,第一种是分组交换Packet Switching(connectionless 无连接服务),又称作存储转发分组交换技术(Store-and-Forward Packet Switching),所有的分组都被独立地上传到子网(数据报子网 Datagram Subnet)中,并且独立于路由,且不需要建立其他任何辅助设备。 它将所接受的分组暂时存储下来,在目的方向路由上排队,当它可以发送信息时,再将信息发送到相应的路由上,完成转发。

第二种是电路交换Circuit Switching(connection-oriented 面向连接的服务),通信之前要在通信两方之间建立一条被两方独占的路径,这个连接被称为虚电路VC(Virtual Circuit),且子网被称为虚电路子网(virtual-circuit subnet)。

首先来看数据报子网,如下图所示,假如计算机H1要发送一段很长的信息给H2,它的长度是分组最大长度的4倍,那么网络层就要将原信息分为四个分组,H1现将这四个分组传输到路由器A上暂时储存起来,然后根据路由算法(routing algorithm)将这四个分组依次传输到H2

再来看虚电路子网,它不像上图那样每次为一个分组设置新的路径,而是当一个连接被建立之后,一条从源机器到目标机器到虚电路也被建立起来并保存到沿途的路由器中,对于所有在这个连接上通过的分组,都使用这条路径。

虚电路子网与数据报子网都比较:

路由算法 routing algorithm

路由算法是网络层软件的一部分,它负责确定一个进来的分组应该被传送到哪一条输出线路上。如果子网内部使用了数据报,那么路由器必须针对每一个到达的数据分组重新选择路径,因为最佳的路径可能已经改变了。如果子网内部使用了虚电路,那么只有当一个新的虚电路被建立起来的时候,才需要确定路由路径。

路由算法可以分为两大类,静态路由(static)动态路由(dynamic),静态路由是指由用户或网络管理员手工配置的路由信息,他不会根据当前的情况来调整它的路由策略;相反,动态路由会自我调整路由策略。

最短路径路由 Shortest Path Routing

建立一个网图,每个节点代表一个路由器,每条边代表一条通信线路,为了在一对路由器之间选择最短的路由路径,只需在这对节点中找到最短路径即可,如使用Dijkstra算法,见此

距离矢量路由 Distance Vector Routing

这是一个动态路由算法,它是这样工作的:每个路由器维护一张表,表中注明了到每个目标到最佳距离 (延迟)和线路,通过不断与邻居交换信息来更新表。如下图所示,前四列是路由器J收到邻居的信息,包含了邻居到各个节点到延迟,通过这些数据可以得到第五列J自身的表。 

链路状态路由 Link State Routing

Each router must:

  1. Discover its neighbours and learn their network addresses.
  2. Measure the delay or cost to each neighbour. 
  3. Construct a packet telling all that it has just learned, and send this packet to all neighbouring routers.
  4. Compute the shortest path to other routers

抖动控制 Jitter Control

对于音频流或者视频流这样的应用,只要传输时间是固定的,它就不会在乎到底是20ms还是30ms才将分组传输给目标主机;分组到达时间的标准偏差称为抖动(Jitter)。比如,有些分组20ms到达而有些分组30ms到达,这就使音频或视频的质量很不稳定。通过计算分组每一跳的预计传输时间就可以对抖动进行控制,比如说一个分组到达路由器对时间比预期时间要早,那么它会尽可能地多停留一段时间,反之亦然。下图A为高抖动对情况,B为低抖动对情况。

服务质量 Quality of Service (QoS)

一些服务对质量的要求

获得好的服务质量所用对技术

  • Over-provisioning 过度提供资源: provide so much bandwidth and buffer space that packets fly through the network. Expensive!
  • Buffering 缓存以消除抖动: Flows buffered on the receiving side (client) before being delivered to the application.
  • Traffic Shaping 流量整形以调整平均传输速率: smoothing out traffic at the server rather than at the client.
  • Leaky bucket and Token bucket algorithms 漏桶算法: for regulating flow.

  • Resource reservation 资源预留: reserve bandwidth, buffer space, etc. for specific applications
  • Proportional routing 比例路由: split traffic over multiple paths; etc.

Internet上的网络层

Internet中的通信过程如下所述。传输层接收数据流,并且将数据流分装到数据报中。理论上,每个数据报最多可容纳64kB,但是实际上数据报通常不超过1500给字节(因为它们正好可被放到一个以太网帧中)。每个数据报被传输到Internet上,在途中它们有可能被分成更小到单元。当这些分片最终到达目标机器的时候,它们又被网络层重新组装起来,恢复成原来的数据报。然后,该数据报被递交给传输层,传输层将它插入到接收进程到输入流中。

The Internet Protocol(IP协议)

每个IP数据报包含一个头部和正文部分,头部有一个20字节(byte)的定长部分和一个可选的变长部分。IPv4协议头部如下:

  • 版本(Version)域:记录了数据报属于哪一个版本的协议(如IPv4,IPv6);
  • IHL域:记录了数据报头部的长度;
  • 服务类型(Type Of Service)域:用途是区分不同的服务种类,如文件传输,语音服务;
  • 总长度(Total Length)域:记录了数据报的总长度,最大为65535字节;
  • 标识(Identification)域:目的是让目标主机确定一个新到达的分段属于哪个数据报;
  • 1位DF(Don’t fragment)域:让路由器不要切割数据报;
  • 1位MF(More fragment)域:除了最后一个分段其他分段都必须设置此位,表示还有更多的fragmnts
  • 分段偏移(Fragment Offset)域:指明了当前分段在数据报的什么位置上。
  • TTL(Time to Live)域:一个用于限制分组生存期的计数器,最大为255秒,当它递减到0时,分组被丢弃。
  • 协议(Protocol)域:当网络层组装完成一个完整的数据报后,此域指明了应该将它交付给哪个传输进程(如TCP, UDP);
  • 头部校验和(Header checkSum)域:用于检验头部;
  • 源地址(Source address)域和目标地址(Destination address)域:记录地址;
  • 可选项(Option)域:允许实验人员进行新的实验;

IP地址

Internet上每台主机与路由器都有一个IP地址,IP地址包含主机(Host)号和网络(Network)号,并且,这种组合是唯一的:Internet上的两台电脑不会有相同的IP地址。所有的IP地址都是32位长,如下图所示,IP地址分类中也支持多播(D类),即数据报被直接发送给多台主机;E类为保留地址。

特殊的IP地址:

  • 0.0.0.0:当前主机
  • 255.255.255.255;本地网络上的广播地址
  • 127.x.x.x:回环地址

子网

允许将一个网络分成多个部分供内部使用,但是对于外部世界仍然像单个网络一样,如下图所示。

当分组到达主路由器当时候,要将它交给哪个子网呢?一种办法是使用子网掩码(Subnet mask),比如说内网中192.168.1.199d的前三组是网络号,后一组是主机号,子网掩码就是255.255.255.0。

考虑四个网段:

  • 192.168.1.0 – 192.168.1.63
  • 192.168.1.64 – 192.168.1.127
  • 192.168.1.128 – 192.168.1.191
  • 192.168.1.192 – 192.168.1.255

这四个网段可以表示为

  • 192.168.1.0/26
  • 192.168.64/26
  • 192.168.128/26
  • 192.168.1.192/26

其中,/26表示子网掩码 255.255.255.192,也代表着子网掩码网络段的长度。下图的情况应表明为/L

那么子网掩码是如何使用的呢?我们可以将二进制的子网掩码和二进制的IP地址进行AND操作,得出的即是网络段。如,192.168.1.63  的二进制为11000000.10101000.00000001.00111111,子网掩码255.255.255.192的二进制为11111111.11111111.11111111.11000000(\26),那么它们进行AND操作后的二进制为11000000.10101000.00000001.00000000,即192.168.1.0(Nework Portion),它就可以表示192.168.1.0 – 192.168.1.63

再比如说给到网段192.168.64/26,如何判断起始结束呢?我们知道子网掩码的Network Portion长度为26,那么Host Portion的长度就是32-26 = 6,因此六位二进制数能表示的数字总共有\(2^{6} = 64\)种组合方式,因此此网段就是 192.168.1.64 – 192.168.1.127。

再比如给到IP地址192.168.1.77和其子网掩码255.255.255.194,怎么判断它的网段呢?因为前面有3个255因此网段前三个也应该和IP地址一样就是192.168.1.x(因为255代表八个1,AND操作过后就是原IP);77的二进制是01001101,194的二进制是1100000,AND操作得出01000000,也就是64;因此网络段为192.168.1.64/26。