科大计网之:网络层——数据平面

chp4-1 导论

网络层的目标主要是在主机和主机之间传送段,在发送端将段封装到数据报中,在接收端将段上交给传输层实体,网络层在每个路由器中都有

  • 数据平面:每个路由器如何决定从输入端口到达的分组转发到合适的输出端口(聚焦于单台路由器)
  • 控制平面:决定数据报如何在路由器之间路由,巨鼎数据报从源主机到目标主机之间的端到端路径(聚焦于网络范围)
  • 传统方式:一个路由器维护一个基于目标地址的转发表;在路由器中被计算和实现
  • SDN方式:基于多个字段的流标来决定转发防线;在远程的服务器中实现,传给路由器来执行

网络层应该提供什么样的服务模型?

  • 单个数据报:可靠传送、延迟保证
  • 数据报流:保证顺序、保证流的最小带宽、分组之间的延迟差(延迟的差,为0表示和发送节奏一致)

网络层连接建立:涉及到路由器的两个主机之间的网络层连接

chp4-2 路由器组成

输入端口功能解读:(输出端口类似)

  • 物理层将物理线路的物理信号转换成数字信号
  • 数据链路层执行链路层的协议并且对数据解封装以传送给网络层
  • 网络层队列(输出端口也有)
    • 根据IP信息或者加上其他信息来寻找合适的输出端口
    • 设置队列一般是为了防止输入端口传出数据时的排队等待导致数据链路层传来的数据丢失,一般传出输入端口的速率大于链路层传入网络层的速率
    • 最长前缀匹配:传统路由匹配方式是一个IP范围对应一个输出端口,目标IP和哪个表中IP项具有最长的共同前缀,就选择其对应的输出端口
      交换结构三种方式解读:
  • 通过内存交换每次只能转发一个分组,将数据转发到内存中后转发给对应的输出端口,这样的问题是数据经过总线bus2次
  • 通过总线交换,交换速度受限于总线,比通过内存好
  • 通过互联网络(crossbar)交换,同时转发多个分组,调节开关短接连通的路线,可以设计将数据报分片为信元进行交换

输出端口排队调度机制:

  • FIFO先进先出策略,丢弃策略另外设置
    • tail drop:丢弃刚到达的分组
    • priority:丢弃低优先级的分组
    • random:随机
  • 优先权调度:根据头部片段分为几个优先级的队列,先出高优先级队列,队列内FIFO
  • Round Robin多类无优先级顺序调度队列策略:每种队列依次发送各自一个周期内的分组后再发送别的队列的分组,无优先级
  • WFQ(Weighted Fair Queuing):对RR方法加了权重,每个队列分配到的服务时间和权重成正比

chp4-3 网际协议IP

IPv4数据报格式
  • 版本号:IPv4和IPv6,决定不同的IP数据报剩下部分的格式
  • 首部长度:IP数据报头部部分的长度,一般是20字节
  • 服务类型:不同类型的IP数据报的区分,比如实时数据报与非实时数据报等,可以用于设置排队处理策略
  • 标识、标志、位偏移:由于各种链路支持的数据报大小不一致,因此可能会出现大数据报被迫拆成小数据报(称为)的情况,需要用标识(identifier)来标记同属于一个源数据报、标志(flag)为0是末尾片为1是非末尾片、位偏移确定片在原数据报的偏移情况,这样可以可靠保序重组
  • TTL:每经过一个路由-1,为0时被抛弃
  • 协议:IP数据报的数据应该交给TCP还是UDP还是别的传输层协议
  • 首部检验和:同TCP
IPv4数据报分片

由于链路层每种协议有各自的MTU(最大传输单元),因此有可能是需要将进入的大片IP数据报拆成小片的数据报来完成输出的,由上面讲述的标识、标志、偏移量来确定分片后的重组信息,可以看下面的例子

IPv4编址

IPv4地址是一个32位的标示,对主机或者路由器的接口编址,接口是指主机/路由器和物理链路的连接处,一个IP地址对应一个接口,而非主机/路由器

这些接口会通过“以太网交换机”互联,这样他们仍然能够保留相同的最小子网,因为没有通过路由器

一个子网内的节点,它们的IP地址的高位部分相同,子网内各个主机无需路由器介入就可以在物理上互相直接到达,如下图的223.1.1.0/24就是一个子网地址

特殊的IP地址:

  • 子网部分全部为0,表示本网络
  • 主机部分全为0,表示本主机
  • 主机部分全为1,表示发送的时候往这个网络的所有主机进行广播
  • 127.0.0.1表示本地计算机的IP地址,可以用localhost来表示;127开头的地址称为环回地址,源地址为环回地址的IP数据报会由本机的协议软件进行处理,而不会将其发向任何网络
  • 内网IP地址:用于供专用的子网使用作为内部通信,只在局部网络中有意义,不被路由器转发
    • A类:10.0.0.0-10.255.255.255
    • B类:172.16.0.0-172.31.255.25
    • C类:192.168.0.0-192.168.255.255
  • 子网掩码:位1标识子网部分,位0表示主机部分
  • 子网部分可以在任意的位置,地址格式为a.b.c.d/x,其中x为地址中子网号的长度,比如之前的202.16.0.0/16表示校园网的地址,而/32表示单个IP地址无子网
  • 转发表和转发算法:若 (IP报头目标地址 & 某表项中子网掩码)== 该表项目标地址,则路由到相应的输出端口;若都无则转发到默认端口

无类别域间路由选择(CIDR)用于因特网的地址分配策略:

  • 主机接口如何获得IP地址?从DHCP服务器中动态获得一个IP地址,以及租用期、子网掩码、默认网关等
  • 如何获取一块地址作为网络的子网络?通过从网络的IP分片,比如从/20的网络分得一个/23的子网
  • 谁给ISP提供一个IP地址?通过ICANN来统一管理
  • DHCP服务器可以放在一个子网中,被路由器连接的相邻子网的接口也可以通过和其联系获得自己的IP地址,假如自己的子网内并无DHCP服务器
  • 流程分为4步:
    1. 新接入子网中的接口以0.0.0.0为源地址,255.255.255.255为目标地址发送DHCP discover报文,通过广播的方式期望获得多个服务器的响应
    2. 接收到响应的DHCP服务器以自身IP地址和255.255.255.255为目标地址发送DHCP offer报文,能传给目标主机;携带了租用期、子网掩码、默认网关、向客户推荐的IP等信息
    3. 目标主机选择一个合适的服务器给的IP,仍然广播DHCP request,但是有携带目标服务器IP和推荐IP的信息
    4. 目标服务器接受后ACK
  • 并非完美:移动的主机意味着移动的IP,这不是一个稳定的TCP连接

网络地址转换NAT:使用内部地址和统一对外的接口来分别进行内部交互和对外交互

  • 通过子网内主机IP和端口号,在对外路由上分配一个NAT转换表的表项,两者的IP和端口互相对应,方便进出对外路由的寻址
  • 问题:违反了网络层不涉及端口的原则
IPv6

由于32位的IPv4地址将会在不久的将来被用完,所以考虑用128位的IPv6地址来代替

  • 流量类型(pri):类似于IPv4的服务类型,标示这个报文是什么服务的
  • 流(flow):可能是用来标识数据报的优先级的
  • 去除“分片重组”机制:分片和重组是耗时的,IPv6会在数据报太大的时候直接丢弃数据报,并反馈给发送方让其缩小数据报

如何从IPv4平移到IPv6?隧道机制
可以在有IPv4路由器的路径上,将带有IPv6的数据报封装为“数据”并添加IPv4的头,协议号字段设置为41表示该IPv4数据报的数据是一个IPv6数据报

chp4-4 通用转发和SDN(可能没听完)

传统的控制平面是由路由器自己实现的,路由器会根据自己内部的算法来生成转发表,从而交给数据平面来转发;但是这样相当于控制平面和数据平面是高度耦合的,不利于更新换代

简单来说SDN就是由远程SDN控制器来生成流表,传给路由器让其根据流表转发IP数据报