网络层被设计成“向上提供简单灵活的,无连接的,尽最大努力交付的数据报服务”的特性,即所传输的分组没有保证,可能出错,丢失,重复,失序,或超时。

但这样设置好处是:网络的造价大大降低(比如路由器),运行方式灵活,能够适应多种应用(即在网络层之上的传输层可以基于灵活的网络层作很多拓展工作)

异构网络互联

  • 不同协议的网络子系统通过**中间设备(中继设备)**相互连接起来,形成更大的系统。(P135)
    • 中继设备:
      • 物理层:中继器,集线器(Hub)
      • 数据链路层:网桥或交换机
      • 网络层:路由器
      • 网络层之上:网关

路由与转发

  • 路由器的两功能:路由选择(确定哪一条路径 => 构建和维护路由表)和分组转发(当一个分组到达时要完成的动作 => 查询,转发以及队列管理和任务调度等)。

拥塞控制

  • 网络进入拥塞状态的方法:观察网络吞吐量和负载的关系
    • 如果随着网络负载的增加,网络的吞吐量明显小于正常吞吐量(或者不增反降),则说明可能(一定)进入了拥塞状态。(注意:正常情况下,负载越高,吞吐量越大)

拥塞控制和流量控制(联系到链路层的流量控制)的区别

  • 流量控制是在发送端和接受端点对点通信时的数据传输控制,它数局部性控制,且是接收端来控制发送端
  • 而拥塞控制则是一个全局性的问题,它确保的是一个子网内的数据能够成功传输到彼此。
拥塞控制的方法
  1. 开环控制:静态的预防方法,系统启动后,设置的控制调度算法不能改版。
  2. 闭环控制:动态方法,采用监测网络系统去监视,及时检测哪里发生了拥塞,然后将拥塞的信息传输到合适的地方,以便调整网络系统的运行。

路由算法

  1. 静态路由算法 => 网络管理员手动配置的路由信息,它不能适应网络状态的变化
  2. 动态路由算法 => 通过路由器之间相互传递信息并且根据一定的算法,实时更新路由表的信息

动态路由算法的两个主要算法

  1. 距离-向量路由算法 => 实现协议RIP(路由信息协议) => 应用层协议,使用了UDP传送数据
    • 所有结点定期地将它们的**整个路由选择表(下面统称为路由表)**传送给其所有的相邻结点。
    • 每个结点从相邻结点拿到路由表信息后,迭代计算到每个结点的最短距离,并实时更新自己的路由表。
  2. 链路状态路由算法 => 实现协议OSPF(开放最短路径优先) => 网络层协议,使用ip数据包传递数据
    • 每个结点(路由器)向本自治系统的所有节点发送自己和自己相邻路由器之间的链路状态,即先把信 息发送给相邻的路由器,然后通过相邻的路由器再次发送给它的相邻路由器,这样不断迭代传递,最终所有结点都能获得发送结点的相邻链路状态。 => 泛洪法
    • 最后每个路由器都能获得自治系统内所有节点的相邻链路状态,然后按照一定的算法,更新自己的路由转发表。
    • 所以该算法要求每个参与算法的结点都具有完全的网络拓扑信息

层次路由

  • 设想一下,如果对网络中众多的路由不分层次,则会使得每次转发的路由表(或链路信息)异常庞大,无论是更新还是查阅都会非常消耗性能,其次灵活性也不高,因为没有分层,导致整个路由系统必须统一协议标准,而不能“因地制宜”
  • 所以考虑把整个互联网划分为较小的自治系统(每个自治系统有多个局域网),每个较小的自治系统可以设置自己的路由协议,同时也需要自治系统间的协议来屏蔽不同路由协议自治系统的通信
  • 自治系统内使用的路由选择协议叫做内部网关协议(IGP) => 例如RIP,OSPF等
  • 自治系统间使用的路由选择协议叫做外部网关协议(EGP) => 例如BGP等。

ipv4

  • ipv4分组格式如下所示

ipv4分组格式

注意:有些描述存储大小的字段是有单位的,比如首部长度,总长度等,这些会在下面单独说明

  1. 首部长度单位: 32位(4Byte)
  2. 总长度:首部加数据段的总长度,单位:Byte
  3. 片位移:由于MTU的限制,ip数据报如果过长会被分片,那么该字段则表示该片段在原分组的相对位置,用于之后在目的地拼接。长度单位:8Byte,所以每个分片的长度一定是8B的整数倍(除最后一片)

网络地址转换(NAT)

  • 将专门网络地址转换为公用地址,从而隐藏内部管理的IP地址。这样做的好处是可以增多主机的ip分配,一个局域网的主机可以用多个内网ip标识,而它们的公网地址则只需要用一个ip标识即可,而NAT就做的是这其中的转换工作

  • 即一台主机可以用 一个公网ip + 一个内网ip 唯一标识。

  • 实现了NAT协议的路由器也叫做NAT路由器,其中维护着NAT表。

    • NAT转换表存放着**「本地ip地址:端口」 : 「全球ip地址」:端口**的映射。

ipv4几种分类方式(概述)

传统分类(A,B,C,D,E)两级分类

  • 每个ip地址分成网络号(第一级)和主机号(第二级)两部分。根据网络号占用的位数不同,以及网络号首几位的数值不同可以分为A-E五个类别。
  • 从上述描述可以看出,这种分类方式灵活性很差,每一类占用的网络号是固定的,如果按照网络号占用的位数来分类,实际上只能分成三类(即A,B,C三类常用ip地址)

子网划分

  • 两级ip地址的空间利用率有时候很低,因为网络号的位数是固定的,当给一个物理网络分配网络号后,路由表就会变得很大而使网络性能变差。
  • 所以考虑引入子网号字段,使二级ip地址变为三级ip地址,这种做法也叫做子网划分。
  • 子网号是从主机号中借用若干bit而形成的,所以就出现了「<网络号>,<子网号>,<主机号>」这样的结构。
  • 需要注意的是:子网划分是一个单位内部的事情,它对于外部表现是透明的,即对外部仍然表现为没有划分子网的网络。此时需要下面描述的子网掩码来解决子网掩码的识别问题。

子网掩码

  • 为了告诉外界主机或路由器对A,B,C类网络进行了子网划分,使用了子网掩码来表示子网号对主机号的借位。借位的位数可以通过子网掩码上的**“1”**来进行判断,即如果没有借位,则默认子网掩码为255.0.0.0,255.255.0.0,255.255.255.0.

CIDR 无分类域间路由选择(CIDR)

  • 消除了传统A,B,C类网络划分,可以更有效地分配IPv4的地址空间。
  • CIDR分类中的IP格式:「<网络前缀>,<主机号>」,或者使用“斜线记法”: IP地址/网络前缀。其中网络前缀对应于网络号的部分(位为1的部分)。

ARP协议 => 将ip地址转化为MAC地址

  • 当某路由器获得下一跳路由器的ip地址时,不是通过ip地址去直接访问的,而是通过ARP将ip转化为MAC地址再去访问对应的路由器地址。

DHCP 动态主机配置协议

  • 用户主机动态地分配IP地址,它提供了即插即用的联网机制。

ICMP 网际报文控制协议

  • 网络层使用ICMP来让主机或路由器来报告差错和异常信息。