第四章 网络层

#计算机网络 #应试笔记与八股

4.1 网络层的功能

网络层的主要任务是把分组从从源端传送到目的端,向上层提供简单的、无连接的、尽最大努力交付(可出错)的数据报服务,其主要功能如下:

  1. 路由选择与分组转发:
    1. 路由选择:即在多条路由路径中选择一条较优路径
    2. 分组转发:将分组从源端正确传给目的端方向
  2. 实现异构网络互联
  3. 拥塞控制
    • 拥塞和流量控制的区别:
      1. 拥塞是指所有节点都来不及接收分组导致的需要丢弃大量分组的网络状态,是全局性的状态,一般由网络负载过重引起。
      2. 流量控制是指当发送方发送速率太快,接收方来不及接受时所需要进行的操作。
      • 其实现方法主要有:
        1. 开环控制(静态控制方法)
        2. 闭环控制(动态控制方法)

其中,网络互连主要依靠中继系统完成,各个网络层级的中继系统可以分为:

  1. 物理层中继系统:转发器、集线器
  2. 数据链路层中继系统:网桥、交换机
  3. 网络层中继系统:路由器
  4. 网络层以上的中继系统:网关

4.1.1 SDN的基本概念

根据网络层的基本任务,可以将网络层抽象地划分为2个平面,即 控制平面数据平面 ,划分示意图如下:
Pasted image 20240314181028.png
其中,

  • 控制平面主要负责转发表的计算和路由表的生成(路由选择算法)
  • 数据平面的主要功能是根据转发表进行转发;转发表存储与数字平面中,会根据分组首部找到对应的输出端口。

SDN即Software-Defined Networking,即软件定义的网络,而传统路由器和SDN的区别主要在于控制平面,传统路由器每台路由器都有自己的路由选择算法,而SDN将若干台路由器的路由选择算法均集成到一个远程控制器中,远程控制器负责计算并分发转发表,路由器原来的路由选择处理器负责与远程控制器通信并接收表项。
Pasted image 20240314175906.png
远程控制器可能运行在高可靠性的远程数据中心中,或由ISP提供。

而SDN控制平面可以继续细分为:

  1. 网络控制应用程序,负责监视、控制下层的网络设备
  2. SDN控制器,负责维护准确的网络状态信息
    Pasted image 20240314181212.png
    在这两层之间产生了两层API,即北向API和南向API,用"上北下南"即可进行记忆
    北向API由网络控制层应用程序调用,南向API由SDN控制器调用。

4.2 路由算法

路由算法主要是负责若干路由器之间通信时,应当选择怎样的路由线路的一个算法。
通常"最佳路由"是由分组从当前节点到目标节点所经过的路由器数(跳数)最少的一个路径。

路由表是通过路由选择算法产生的一个使用目标IP查询下一跳IP和接口的一个表,如下所示:
Pasted image 20240314183055.png

4.2.1 静态路由与动态路由

路由算法主要可以分为:

  • 静态路由算法:其指由网络管理员手动配置的路由信息,但是当网络拓扑结构发生变化时其需要网络管理员重新手动配置。通常应用于小范围、高稳定性要求的军事网络与商用网络。
  • 动态路由算法:路由器间和与其相互连接的路由器间交换信息,并依靠算法优化得到的路径表。其会按照一定频率自动更新,可以适应不断变化的网络拓扑。
对比
静态路由算法
动态路由算法
优点 简单、可靠,适用于负载稳定、拓扑不变的高安全要求的网络。
适用于小型网络。
路由更新快,适用于大型网络,可以及时响应网络拓扑变化
缺点 路由更新慢,不适用于大型网络。 算法复杂,增加网络负担。

而路由选择协议可以进行分层设计,由于网络规模大,且部分单位的网络拓扑有保密需要,故可以将整个网络划分为若干自治系统(AS)。

总的来说,路由算法可以按照如下方式划分:

  • 按照每个路由掌握的信息可以划分为:
    • 全局性动态路由算法:每个路由器都掌握完整的网络链路拓扑和链路费用信息,如OSPF协议。
    • 分散性动态路由算法:每个路由器只掌握物理相连的邻居及其拓扑费用,如RIP协议。
  • 按照自治系统内外可以划分为:
    • 内部网关协议IGP:一个AS之内使用的路由选择协议,如RIP、OSPF协议
    • 外部网关协议EGP:AS之间使用的路由选择协议,如BGP协议(BGP-4)

4.3 IPv4

4.3.1 IPv4分组

IP协议主要规定了其数据传送的基本单元及其确切的数据格式,并规定如何处理分组、如何控制错误等。其数据报格式如下:
Pasted image 20240314190134.png
其中:

  • 首部可以分为固定部分和可变部分,固定部分共20Byte,通常不使用可变部分。
  • 数据部分主要为传输层的报文段
  • 首部长度 共占用4位,范围[0, 15],其单位为 4Byte 。实际由于固定部分的存在,其最小值为 20Byte 。
  • 填充字段 当可选字段不为4Byte的整数倍时,使用填充字段填充到4Byte的整数倍。
  • 区分服务 用于强调数字报的优先级,一般不使用。
  • 总长度 为整个IP数据报的长度,最大值为 65535,单位为Byte。一般不会过大,否则超过MTU长度时会被分片。
  • 标识 IP数据报的标识同一IP数据报的多个分片的标识一致。一般是一个计数器,统计IP数据报号。
  • 标志 长度为3位,但是最高位保留,各位含义如下:
最高位 中间位DF(Don't Fragment) 最低位MF(More Fragment)
保留 是否允许分片,
DF=1,禁止分片
DF=0,允许分片
后续是否还有分片,
MF=1,后续还有分片
MF=0,后续无分片(即已是最后一片)
  • 不存在DF=1,MF=1的情况
  • 片偏移 该分片在原分组中的相对位置,单位为8Byte除最后一个分片外,每个分片长度已定位8Byte的整数倍拆分时会将一个IP数据报拆分为多个IP数据报从每个小IP数据报的数据部分开始,到原数据报的位置的距离就是片偏移的大小
    • 具体拆分规则:

      IP数据报拆分规则
      IP数据报拆分时,会将一个长数据报拆分为多个短IP数据报这些数据报的标识符相同,并使用MF、DF等标志位进行标记。

    • 具体偏移量计算规则:

      片偏移计算规则
      在上述拆分规则下,以数据载荷为偏移量起始计算位置。
      Pasted image 20240314205737.png
      例如以MTU为1500,首部大小20Byte计算,则第二个数据报的偏移地址为1480Byte,偏移量为 则有各IP分片的参数为:
      Pasted image 20240314210455.png

  • 生存时间(TTL,Time To Live):即IP分组在网络当中的寿命,每经过一个路由器就会减一,当变为0时会被丢弃,并发送ICMP超时报文。防止无法交付的数据报无限制的在网络中兜圈大部分(取决于版本)Windows下默认(即可修改)为128,Linux下默认为64。
  • 协议字段 用于区分数据部分的协议,对应表如下:
    Pasted image 20240314191711.png
    主要记忆TCP为6、UDP为17。(TCP很 6 、UDP会被 17 (遗弃))
  • 首部检验和 仅检验首部字段,不检验数据部分。由于生存时间会被逐级递减,故每经过一级路由器,首部和首部检验和均会变化。
  • 源地址目的地址 :存储IPv4地址,共32位。
  • 可选字段 长度0-40Byte,可有可无。用于排错、测量、安全等措施。
  • 填充字段0
回忆一下最大传送单元MTU的概念:

封装成帧:
第一章 计算机网络体系结构 > 1 2 2 ISO OSI参考模型和TCP IP模型所述,数据链路层会对网络层传来的IP数据报添加头部 H2 和尾部 T2
Pasted image 20240304133752.png
其中帧的数据部分就是最大传送单元(MTU),而首部和尾部的重要作用就是帧定界


通常以太网的MTU为1500Byte。如上图所示(和下图),数据链路层在传输IP数据报时,会将IP数据报放入大小为MTU的最大传送单元中:
Pasted image 20240314192526.png
当IP分组长于MTU时,则需要对IP分组进行分片。IP分组并不是一定支持分片若长于MTU且不支持分片的IP分组出现时,会被返回错误ICMP报文
对IP数据报分片时,会使用上述 标识标志片偏移 等机制进行分片,会将一个IP数据报拆分为多个IP数据报,例如:
Pasted image 20240314193349.png
对于以太网,MTU通常为1500,IP数据报首部通常为20Byte,故每个MTU可以传送IP报文的1480Byte。

IP数据报拆分规则
IP数据报拆分时,会将一个长数据报拆分为多个短IP数据报这些数据报的标识符相同,并使用MF、DF等标志位进行标记。

片偏移计算规则
在上述拆分规则下,以数据载荷为偏移量起始计算位置。
Pasted image 20240314205737.png
例如以MTU为1500,首部大小20Byte计算,则第二个数据报的偏移地址为1480Byte,偏移量为 则有各IP分片的参数为:
Pasted image 20240314210455.png

4.3.2 IPv4地址与NAT

基本概念:

  • IPv4地址:给连接到网络的每台主机的每个网络端口分配的一个32Byte的唯一标识符,即IP地址。

IP地址分段及其规则:

  1. IP地址的至多前4位用于区分网络类别(前缀编码):
    1. 0 开头为A类网络,对应网络号长度为8位
    2. 10 开头为B类网络,对应网络号长度为15位
    3. 110 开头的C类网络,对应的网络号长度为22位
    4. 1110 开头为多播地址
    5. 1111 开头为预留的E类网络。
      具体如下图所示:
      Pasted image 20240314211418.png
  2. 上述各类网络中,有一些特殊IP地址,具体如下:
网络号 主机号 作为IP分组源地址 作为IP分组目的地址 用途 举例说明
全0 全0,即0.0.0.0 可以 不可以 本网范围内表示主机,路由表中用于表示默认路由
(表示整个Internet网络)
一般用于接受本机的全部连接
全0 特定值 可以 不可以 表示本网内某个特定主机
全1 全1,即255.255.255.255 不可以 可以 本网的广播地址(路由器不转发) 用于在本网内进行广播
特定值 全0 不可以 不可以 网络地址,用于代指当前网络不可连接 例如 192.168.1.0/8 就表示这个局域网
特定值 全1 不可以 可以 直接广播地址,对特定网络上所有主机进行广播
127(属于A类网络) 非全0或1的数,例127.0.0.1 可以 可以 本地软件回环测试用地址,称为回环地址 用于自己连接自己(而0.0.0.0不行)
  1. 此外,还有一些私有IP地址,用于各类局域网:
    Pasted image 20240314213402.png
    网段个数即网络号的数量。路由器对目的地址为私有IP地址的数据报一律不转发
  2. 因此,各类网络的最大可用网络数、最大可用网络号等结论如下:
    Pasted image 20240314213754.png
    其中,最大主机数减2是因为:
    • 全0代表网络号
    • 全1代表广播地址
      B、C类最大网络号减1是因为:
    • 网络号全0时不可指派
      A类最大可用网络数减2是因为:
    • 网络号全0时不可指派
    • 127回环地址

NAT地址转换:
NAT:Network Address Translation,一般用于将若干个专用网(局域网)的IP转换为一个外部IP地址。NAT一般由路由器负责。

NAT主要依靠于NAT转换表完成,即将外网的IP地址和端口号和内网的IP地址和端口号进行绑定与转发:
Pasted image 20240314214934.png
在NAT技术下,外网设备将无法主动连接NAT中内网的设备,只能由内网设备主动连接外网IP。当内网中设备发送连接请求后,NAT应用将会分配一个外网端口并,建立映射并记录到NAT转换表中。

4.3.3 子网划分与子网掩码、CIDR

子网划分是对上述A、B、C、D类网络一个网络号所对应的大的网络划分成若干个小子网的一个技术。一个大子网划分成若干个小子网后,对外界依旧表现为一个大子网,外界不知道其内部如何分配IP。

其方法是将主机号的高几位拿来当做 子网号 ,并将"两级IP地址"转化为"三级IP地址",如下图所示:
Pasted image 20240314222119.png

子网掩码
将网络号和子网号对应的位置设置为1,主机号设置为0,对应的十进制码就是子网掩码。

将子网掩码和目的IP地址进行与位运算,即可得子网网络地址。对于应试教育,应当背诵子网的二进制和十进制对应表:

[点击查看]

无分类编址CIDR
无分类编址CIDR取消了原先A、B、C类网络的划分,将子网掩码的思想合并为可变长度的网络号的设计,如下图所示: Pasted image 20240315113633.png
随后其在IP地址后添加斜杠 / 和网络前缀长度,例如 128.14.32.0/20
随后主机号:

  • 0 表示网络号
  • 1 表示广播地址
    并将 网络号/长度128.14.32.0/20 称为CIDR地址块

则有如下特性:

  • CIDR的地址掩码规则和子网掩码一致。
  • 最小地址的网络号全0,表示网络号
  • 最大地址的网络号全1,表示广播地址

CIDR的应用:

  1. CIDR可以用于将若干子网合并,构成超网
    假设网络拓扑如下:vlc_P0x685cFMH.png
    其中路由器R2的若干个网口下定义了若干个子网(例如上图红色箭头所表示的两个端口和子网),则此时路由器R1在传递R2的信息时,需要维护若干行的路由表:Pasted image 20240315114807.png
    造成了大量无意义的路由表表项,则此时可以通过CIDR技术将若干子网重新合并为一个大的"超网"(此时网络前缀长度缩短)。
    本质只是将若干长前缀子网合并为短前缀网络;或者说将短前缀网络划分为若干长前缀子网...
  2. 最长前缀匹配:
    回忆一下路由表: Pasted image 20240314183055.png
    在收到数据包后,路由表会根据目的IP地址查表,但是目的网络地址不一定在表中,因此会将当前数据包的目的网络地址和表中所有已知目的网络地址进行与运算,找出重合度最高的表项,并从对应接口发出。
    例如给定路由表,尝试转发目的地址为 132.19.137.5 的地址:
    Pasted image 20240315120208.png
    则有:
    • 132.0.0.0/8 重合长度为8位(最多匹配到前缀长度,可以与下一项对比)
    • 132.0.0.0/11 重合长度为11位
    • 132.19.232.0/22 重合长度为17位,但是不满足22位的子网前缀要求,故舍弃
    • 0.0.0.0/0 表示默认网关,只有当所有表项均不匹配时会走此项,此时该数据包会被交付给其他路由
      故转发至R2。

4.3.4 ARP、DHCP与ICMP

回顾一下七层网络协议的通信过程:

至此,则不难理解在OSI模型下,两台电脑间互相通信的过程图为:
Pasted image 20240205010846.png

现在思考应用层如何发起和建立连接:

  1. 主机A的应用程序通过指定主机B的IP地址申请建立socket接口。
  2. 在传输层会被重新封装为IP数据报,到网络层时需要将IP数据报封装为数据链路层的报文,且需要指定下一跳主机的MAC地址。而如何确定下一跳主机的MAC地址就是ARP地址解析协议(Address Resolution Protocol)负责完成的。

ARP协议的主要工作流程:
0. 若在ARP缓存中找到目的IP的MAC地址,则会以该MAC地址为目标进行发送。

  1. 当ARP缓存中找不到目标IP的MAC地址时,会使用MAC地址为 FFFF-FF-FF-FF-FF进行ARP广播使得该局域网的所有主机都收到此请求(交换机在接收到广播MAC地址的报文后,会向所有端口转发该报文)。该数据帧结构如下:
    Pasted image 20240315211026.png
  2. 当目标地址为局域网内主机时,局域网内的目的主机会向源主机发送ARP响应分组该分组包含目标主机的IP地址和MAC地址的映射关系(不然只有响应,源主机也不知道是谁响应的),当源主机收到ARP响应后即会把IP地址和MAC地址的映射关系加入ARP缓存中。此过程路由器也会发送包含上述映射关系的ARP响应分组以协助局域网内目的主机通信。此时该响应ARP分组是单播分组(区别于广播分组)。含有目的IP地址和目的MAC地址的帧结构如下:
    Pasted image 20240315211256.png
  3. 当目标地址不在局域网内时,路由器会执行代理ARP操作,并发送含有目标IP地址和路由器MAC地址映射关系的分组,以告诉发送主机后续该IP地址可直接发送给路由器。通常主机在查询ARP缓存前,会先检查目的IP是否为局域网内设备,若不是局域网内设备,则会直接发送给网关(即路由器)
  4. 源主机在查询网关的MAC地址时所使用的操作类似于步骤1、2。

ARP的四种典型情况

  1. 主机A要给局域网内主机B发送数据:此时主机A会用ARP找到目标主机的MAC地址。
  2. 主机A要给外网设备发送数据:此时主机A会用ARP找到网关,并将数据发送到网关。
  3. 路由器要给局域网内主机B发送数据:路由器使用ARP找到主机B的MAC地址。
  4. 路由器要给外网设备B发送数据:路由器通过ARP找到可以与设备B通信的另一网关的MAC地址。(对于树形拓扑,则会找到第一个父节点;对于总线型拓扑则会找到B的父节点)

ARP缓存通常10-20min更新一次。

DHCP协议(Dynamic Host Configuration Protocol):
负责分配网络内主机的IP地址。

DHCP协议的性质(红色要考):

  • 是应用层协议
  • 使用C/S模式
  • 基于UDP
  • 客户端与服务端之间使用广播方式进行交互,对应UDP地址为 255.255.255.255
  • 允许地址重用:
    • 当IP地址对应的主机离开网络后,该IP地址可以给一个新的设备重新使用
  • IP地址支持租用期,支持在用地址续租

DHCP工作流程:

  1. 申请获得动态IP的主机发送一个DHCP发现报文,申请DHCP服务器的服务
  2. DHCP服务器广播DHCP提供报文,DHCP服务器为主机拟分配一个IP
  3. 主机广播DHCP请求报文,确认使用
  4. DHCP服务器广播DHCP确认报文,同意使用

使用广播的好处:

  1. 对于多DHCP服务器的情况,使用广播可以使各服务器之间同步。
  2. 由于使用UDP协议,在DHCP工作完成之前,主机没有可用IP,故无法使用单播。

ICMP协议(Internet Control Message Protocol,网际控制报文协议):
ICMP是一种网络层协议,用于在 IP 网络中传递控制信息和错误消息。

ICMP协议的性质:

  1. 是网络层协议ICMP报文会成为IP数据报的载荷
    Pasted image 20240315221920.png
  2. 主要负责传递控制信息和错误消息、网络探寻等。
  3. ICMP差错报文有:
    1. 终点不可达
    2. 源点抑制:由于路由器或者主机发送拥塞而丢弃报文时,就可以向源点发送源点抑制报文,降低源数据发送速率(已取消,基本不用)
    3. 超时报文:路由器收到TTL=0的数据报时,除了丢弃该数据报以外,还要向源点发送超时报文。
    4. 参数问题:首部字段有问题的IP数据报会被返回该报文
    5. 重定向报文:路由器希望主机下一次将IP数据报发送给别的更好的路由时使用该报文(你是一个好主机,你值得一个更好的路由)。
      ICMP差错报文的格式通常为:
      Pasted image 20240315220403.png
      其会保留原IP数据报的首部和载荷部分的前8个字节。
  4. 不应当发送ICMP差错报文的情况:
    1. 对ICMP差错报文出错时再发送ICMP差错报文
    2. 对一个IP数据报的分片的后续分片不再发送ICMP差错报文
    3. 对具有组播地址的IP数据报不再发送ICMP差错报文
    4. 特殊地址(不可作为源地址的特殊地址)不再发送ICMP差错报文,例如 0.0.0.0127.0.0.0 ,选择题会考察。
      Pasted image 20240315220728.png
  5. ICMP询问报文和回答报文:
    主机或路由器向特定主机发送询问报文,则该主机应当回复回答报文。常见的询问报文有:
    1. 回送请求报文和回答报文:例如上图的Ping
    2. 时间戳请求报文和回答报文,用于询问某个主机其当前时间,用来测量和同步时间。
    3. 掩码地址请求和回答报文,已不再使用
    4. 路由器询问和通告报文,已不再使用
  6. 基于ICMP的常用应用有:
    1. ping 命令,工作在应用层基于ICMP询问报文
    2. tranceroutetrancert工作在网络层基于ICMP超时差错报文(一点点的增加TTL)

4.4 IPv6 TODO

4.5 路由协议 TODO

4.6 IP组播

4.7 移动IP

4.8 网络层设备