本篇开始关注网路协议中的”网络层“,TCP/IP协议中在网络层中采用标准化的IP协议。网络层的主要任务就是就是通过路由选择算法,为数据报分组通过通信子网选择最合适的路径,将将数据报分组及时送达。

具体来说,网络层的功能有三点:

  1. 路由选择与分组转发:通过各种路由算法,为数据报通过通信子网选择最合适的转发路径。
  2. 异构网络互联:IP 协议屏蔽了下层物理网络的差异,为上层提供统一的 IP 数据报。
  3. 拥塞控制:防止所有节点来不及接收分组而造成大量丢弃的机制。

本篇仅作网络层的基本介绍,后续有关路由选择的具体介绍见后续文章。

IP 数据报结构

IP 报文头

IPv4

RFC 971 defines the fields of the IPv4 header on page 11 using the following
diagram: ("Figure 4")
   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |Version|  IHL  |Type of Service|          Total Length         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Identification        |Flags|      Fragment Offset    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Time to Live |    Protocol   |         Header Checksum       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Source Address                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Destination Address                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Options                    |    Padding    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

主要关注的几个字段有:

  • 总长度:首部+后接的数据部分,单位是字节B
  • 区分服务:指示期望获得哪种类型的服务
  • 生存时间(TTL):IP分组的保质期。经过一个路由器-1,变成0则丢弃
  • 协议:数据部分的协议
  • 首部检验和:只检验首部
  • 源IP地址和目的IP地址:32位

IPv6

RFC2460 section 3
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Version| Traffic Class |               Flow Label              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |         Payload Length        |  Next Header  |   Hop Limit   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                         Source Address                        +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    +                                                               +
    |                                                               |
    +                      Destination Address                      +
    |                                                               |
    +                                                               +
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

值得关注的有:

  • Next Header: Pv6报文是由IPv6标准头+扩展头+负载Payload组成,Next Header字段就指定了扩展头的类型
  • Payload Length: IPv6 报文头之后的数据长度,单位是字节
  • Hop Limit: 与IPv4 报文头中的Time to Live类似,每经过一个转发节点减一,为0便丢弃。
  • 128 bit的IPv6地址

分组转发

转发(forwarding)一般指网络中的路由器转发IP分组的物理传输过程与数据报转发机制,用于(根据路由表/转发表FIB)决定数据报分组从哪个路径(端口)发送出去。至于如何决定哪些IP地址的报文该从哪个端口进行转发,则是由路由算法进行决定的。

拥塞控制

拥塞,在网络中的各个层都会发生。在网络层上,节点来不及接收分组便会发生拥塞。拥塞控制机制主要关心在传输超过网络能够在合理的报文传输延时范围内传输的数据量时发生的情况,是一个网络上的全局性的问题,包含网络中的各个主机与路由器。在网络层上亦有负载均衡/流量调节的机制来防止数据报分组的转发发生拥塞。

值得注意的时,在网络层上的拥塞控制主要关注的是“路径”,在某个链路负载大时通过降低源节点的发送速率(流量调节)或将流量引导到其他链路转发到目标节点(负载均衡),从而保证传送的数据不超过链路的容量。