1、网络层功能概述

1.1 网络层的功能

网络层提供两种主要功能: 分组转发路由选择

网络层的具体任务有:信源到信宿的传输,逻辑寻址,路由,地址转换,复用,流量和拥塞控制,网络互连。

网络层中,数据传输的单位是分组

拥塞控制

拥塞:网络或其中一部分出现过多的包,导致网络性能下降的现象。

拥塞原因主要是1)节点处理速度有限;2)链路传输速度有限。

拥塞控制方法有5种:配缓冲区,丢弃包,限制网内包数量,流量控制,阻塞包。

拥塞控制的两种方法,开环控制和闭环控制。

流量控制 :保证发送方发送的信息量不会超过接收方的接受能力。

1.2 SDN 的基本概念

网络层的主要功能是分组转发与路由选择,于是可以将网络层抽象为数据层面(也称转发层面)与控制层面,转发是数据层面实现的功能,路由选择是控制层面的功能,如下图就是一个典型的网络控制与转发图:/

image-20230319162021451

而SDN(软件定义网络)是一种新型的网络架构方式。它采用集中式的控制层面和分布式的数据层面,使两个层面相互分离,控制层面利用接口对数据层面上的路由器进行集中式控制,方便软件控制整个网络。网络由分布式控制变为了集中式控制,如下图所示:

在这里插入图片描述

SDN架构下的接口:

  • SDN控制器与转发设备建立的双向会话接口成为南向接口
  • SDN控制器对上层应用的开发者提供的接口成为北向接口

2、IPV4

img

2.1.IP数据报格式

  • 版本:4bit,指明是IPv4还是IPv6

  • 首部长度:4bit,单位为4B,表明整个首部的长度。因为首部最小为20B,因此,首部长度内数据为0101 - 1111。若首部的长度不为4的倍数,则填充为4的倍数(首部长度必为4的倍数)

  • 总长度:16bit,单位为1B,表明整个IP数据报的长度

  • 生存时间(TTL):8bit,IP分组的保质期。每经过一个路由器就-1,直到0就丢弃(防止数据包不断在网络中循环)

  • 协议:8bit,指出此分组携带的数据使用何种协议。6为TCP,17为UDP

  • 首部检验和:只检验首部

  • 源地址和目的地址:32bit,分别表示发送方的IP地址和接收方的IP地址

  • 标识:同一数据报的分片使用同一标识(接收端根据标识将相同标识的分片组成数据)

  • 标志:中间位:DF(Dont Fragment) = 1,禁止分片; DF = 0,允许分片

  • 最低位:MF(More Fragment)= 1,后面还有分片;MF = 0,最后一个分片 / 没分片

  • 片偏移:指出该片在原分组的相对位置,以8B为单位(除了最后一个分片,每个分片的大小都是8的倍数)

记忆数据表示长度:一种八片首饰(1总,8偏,首4)

2.2.IP数据包分片

2918d57097cc9f5241d895393482ce4

分片的原因:数据链路层的MTU严格限制IP数据报的长度,若大于该长度,则无法传输,因此,需要分片(过长但是不同意分片的分组,则无法传递,返回ICMP差错报文)

分片注意事项:

  1. 每一个分片的数据字段大小一定是 8B 的整数倍(偏移大小单位)
  2. MF = 1 表示该分组后还有分片,DF = 0 表示允许分片
  3. 来自同一个IP数据包的分片,每一个分片的“标识”字段均相同(如上图)

例如:原数据部分为3800B,设最长分片不超过1420B

A.首部为20B,因此,最长分片的最大数据部分为1420 - 20 = 1400B

B.3800 = 1400 + 1400 + 1000

C.0 - 1399为第一个分片:因为是第一个分片,片偏移量为0,总长度为数据部分1400B + 首部20B = 1420B,DF = 0(允许分片),MF = 1(不是最后一个分片),标识为12345

1400 - 2799为第二个分片:第一个字节为1400B,除以单位8B,片偏移量为175,总长度为数据部分1400B + 首部20B = 1420B,DF = 0(允许分片),MF = 1(不是最后一个分片),标识为12345

2800 - 3799为第三个分片:第一个字节为2800B,除以单位8B,片偏移量为350,总长度为数据部分1000B + 首部20B = 1020B,DF = 0(允许分片),MF = 0(是最后一个分片),标识为12345

2.3.IPv4地址

IP地址:标识路由器主机的接口,一个接口对应一个IP地址(<网络号><主机号>)

img

各类 IP 地址中,有些IP地址有特殊的用途,不用做主机的IP地址:

  • 主机号全 0 表示本网络本身
  • 主机号全 1 表示本网络广播地址
  • 127.x.x.x 表示为回环地址。
  • 网络号、主机号均为 0,表示本网络上的本主机
  • 网络号、主机号均为 1,表示整个 TCP/IP 网络的广播地址。

具体用法可以参考下面的图:bfd28a112fe4857663f27bd22999a84

对于是否可以作为源、目的地址有一个口诀:

00,0特 非目的(单个网络本身)

10,特1 可目的(广播)

特0 均不可

常用三种类型的IP地址使用范围:

网络类别 最大可用网络数 第一个可用网络号 最后一个可用网络号 每个网络中的最大主机数
A 2 ^ 7 - 2 1 126 2 ^ 24 - 2
B 2 ^ 14 - 1 128.1 191.255 2 ^ 16 - 2
C 2 ^ 21 - 1 192.0.1 223.255.255 2 ^ 8 - 2

每类地址中都去除全0(0、128.0、192.0.0),A类地址多去除一个127(巡回地址)

每个网络中去除主机号全为0(表示本网络),全1(广播地址)

2.4.网络地址转换NAT

在专有网连接到因特网的路由器上安装NAT软件,使其成为NAT路由器;专有网与外界进行数据交换使用的IP地址为NAT路由器的IP地址

img

例如:A给B发送数据

  1. A给NAT路由器发送数据报①:网络层:源IP地址为192.168.0.3(A的专有网内地址),目的地址为213.18.2.4(B的IP地址);传输层:端口号30000
  2. NAT路由器给B发送数据报①:将C中原来的源IP地址192.168.0.3(A的专有网内地址)替换为172.38.1.5(NAT路由器IP地址),并且端口号也从30000替换为40001,但是,目的地址不变,这样B就能识别(根据NAT转换表)例如:B给C发送数据,C为专有网内地址192.168.0.4
  3. B给NAT路由器发送数据报②:网络层:源IP地址为213.18.2.4(B的IP地址),目的地址为172.38.1.5(NAT路由器IP地址);传输层:端口号40002
  4. NAT路由器给A发送数据报②:将D中原来的目的地址172.38.1.5(NAT路由器IP地址)替换为192.168.0.4(C的专有网内地址),端口号40002替换为30001(根据NAT转换表),但是,源地址不变

需要注意的是,因为NAT路由器需要查看和转换传输层的端口号,所以 NAT 路由器工作在传输层,而普通路由器仅工作在网络层。

2.5.子网划分与CIDR

2.5.1 子网划分基本思想

  • 子网划分纯属是一个单位内部的事情,单位对外部仍然表现为没有划分子网的网络

  • 从主机号借用若干别特作为子网号:<网络号><子网号><主机号>(子网号可以没有,但是主机号至少2位)(主机号不能全0,不能全1;子网号可否全0全1看情况)

  • 子网编址意义:避免广播风暴,降低损失

  • 从其他网络发来的数据仍然送给本单位某台主机,任然是根据IP数据报的目的网络号,先找到连接到本单位网络上的路由器。然而划分子网后,路由器按照网络号和子网号找到目的子网,最终把 IP 数据报直接交付给目的主机。

2.5.2 子网掩码

子网掩码是一个32比特的数值,确定哪些位用于子网号或主机号。其中1=网络号和子网号,0=主机号。IP地址中与子网掩码的1相对应的位构成了网络号和子网号,IP地址中与子网掩码的0相对应的位构成了主机号。

A、B、C类地址的默认子网掩码为:255.0.0.0、255.255.0.0、255.255.255.0

对于子网掩码的使用有下面的约束:

  1. 一个主机在设置 IP 地址段信息时,必须设置子网掩码。
  2. 对于处于同一子网的所有主机包括路由器的端口,都需要设置一样的子网掩码
  3. 路由器的路由表中,应该包含:目的网络地址、子网掩码、下一跳地址。

2.5.3 使用子网时的分组转发

1.路由表中含有:

​ ①目的网络地址

​ ②目的网络子网掩码

​ ③下一跳地址(接下来应该将数据传到哪)

2.设路由器收到了一个数据

​ ①从IP分组的首部提取数据的目的IP地址

​ ②判断是否能够直接交付,判断方法:将目的地址逐一与该路由器的各个子网地址的子网掩码进行相与操作,若相与结果,与任一子网对应,则转发给该子网

​ 直接交付:该路由器的子网中是否含有该目的地址

​ 间接交付:该路由器的子网中并没有该目的地址,需要交付给下一个路由器

​ ③若所有子网都不符合目的地址,查看是否有和目的地址相同的特定主机路由

​ ④检测路由表中是否有路径:目的地址和路由表中的目的网络子网掩码逐一相与判断是否与其对应,对应则发送给相应路由

​ ⑤若④仍然找不到,则发送给默认路由0.0.0.0,由其转发给下一个路由,直到找到目的地址(并非无限制的转发,被生存时间所限制)

​ ⑥若生存时间用尽仍没找到,则丢弃,并报告出错(ICMP)

2.5.4 无分类编址 CIDR

1.为什么要使用CIDR

划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在1992年互联网仍然面临三个必须尽早解决的问题,这就是

  1. B类地址在1992年已分配了近一半,眼看很快就将全部分配完毕!
  2. 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)
  3. 整个IPv4的地址空间最终将全部耗尽。在2011年2月3日,IANA宣布IPV4地址已经耗尽了。

当时预计前两个问题将在1994年变得非常严重。因此IETF很快就研究出采用无分类编址的方法来解决前两个问题。它的正式名字是无分类域间路由选择CIDR( Classless Inter-Domain Routing,CIDR的读音是“ sider”)

2.网络前缀

CIDR最主要的特点有两个

(1)CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而能更加有效地分配IPv4的地址空间,并且在新的IPv6使用之前容许互联网的规模继续增长。CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀”,用来指明网络,后面部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。其记法是:

img

CIDR还使用“斜线记法”,或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。

(2)CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。例如,已知IP地址128.14.35.7/20是某CIDR地址块中的个地址,现在把它写成二进制表示,其中的前20位是网络前缀(用粗体和下划线表示出),而前缀后面的12位是主机号:img,

这个地址所在的地址块中的最小地址和最大地址可以很方便地得出:

img

当然,以上这两个特殊地址的主机号是全0和全1的地址。一般并不使用。通常只使用在这两个特殊地址之间的地址。不难看出,这个地址块共有2^1^2个地址。我们可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的最小地址块可记为
128.14.32.0/20在不需要指出地址块的起始地址时,也可把这样的地址块简称为“/20地址块”。

为了更方便地进行路由选择,CIDR使用32位的地址掩码。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。例如,/20地址块的地址掩码是:*11111111 11111111 1111*0000 00000000 (20个连续的1)。斜线记法中,斜线后面的数字就是地址掩码中1的个数。**

请注意,“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一台主机号字段,但子网的网络前缀比整个单位的网
络前缀要长些。
例如,某单位分配到地址块/20,就可以再继续划分为8个子网(即需要从主机号中借用3位来划分子网)。这时每一个子网的网络前缀就变成23位(原来的20位加上从主机号借来的3位),比该单位的网络前缀多了3位。

例题:

地址192.199.170.82/27不仅表示IP地址是192.199.170.82,而且还表示这个地址块的网络的前缀有27位(剩下的5位是主机号),因此这个地址块包含32个IP地址($2^{5}$=32)。通过简单的计算还可得出,这个地址块的最小地址是192.199.170.64,最大地址是192.199.170.95.具体的计算方法是这样的。找出地址掩码中1和0的交界处发生在地址中的哪一个字节。现在是在第四个字节。因此只要把这一个字节的十进制82用二进制表示即可。十进制82的二进制是01010010,取其前3位(这3位加上前3个字节的24位等于网络前缀的27位),再把后面5位都写成0,即01000000等于十进制的64.这就找出了地址块的最小地址192.199.170.64。再把地址的第四字节的最后5位都置1,即01011111等于十进制的95,这就找出了地址块中的最大地址192.199.170.95**。

3.路由聚合和构成超网

由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合 ,它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上千个)路由。路由聚合也称为构成超网。

4.CIDR的其他表示方法

CIDR记法有多种形式,例如,地址块10.0.0.0/10可简写为10/10,也就是把点分十进制中低位连续的0省略。

另一种简化表示方法是在网络前缀的后面加一个星号*,如:00001010 00*意思是:在星号*之前是网络前缀,而星号表示IP地址中的主机号,可以是任意值。

5.总结

下表给出了最常用的CIDR地址块。表中的K表示2^{10}即1024。网络前缀小于13或大于27都较少使用。在“包含的地址数”中没有把全1和全0的主机号除外。

img

2.6.ARP

数据链路层发送数据需要接收方IP地址和MAC地址,发送方IP地址和目的地址。但是,有时候仅有接收方的IP地址,而没有接收方的MAC地址,ARP就是通过接收方的IP地址查询其MAC地址

1.若目的主机是本网络的主机

(IP1为源主机,IP3为目的主机)

​ ①查询本机的ARP高速缓存(ARP高速缓存中本网络IP地址和MAC地址的映射)中是否有目的主机的IP地址

​ ②若有,则就可以据此查出目的主机的MAC地址,并将其写入MAC目的地址

​ ③若没有,则需要发送广播ARP请求分组目的MAC地址为FF-FF-FF-FF的帧,局域网内所有主机都将会收到这个分组(交换机能隔离冲突域,但不能隔离广播域,虽然本网络内所有主机都会收到该广播ARP请求分组,但有且仅有目的主机会响应),目的主机收到后,就会返回ARP响应分组(单播分组,局域网内其他主机无法收到),该分组含有目的主机的IP地址和MAC地址。本主机收到后,就将这个IP地址和MAC地址的映射写入ARP高速缓存中(方便下次发送)

2.若目的主机不是本网络主机

①本主机通过目的主机的IP地址与子网掩码逐位相与判断是否接收方是本网络内的主机

②若不是本网络内的主机,则寄希望于本主机的默认网关(路由器)找到目的主机的MAC地址

③本主机将会给默认网关发送广播ARP请求分组,而不是其本来想要发送的目的主机(发送方IP地址为本主机,MAC地址为本主机MAC地址,接收方IP地址为默认网关,MAC地址为FF-FF-FF-FF)

④默认网关接收到该广播ARP请求分组后,将会给本主机返回一个单播ARP相应分组(其他主机收不到),含有默认网关的IP地址和MAC地址(而非本主机本来想发送的目的主机的IP和MAC地址)

⑤本主机给目的主机发送数据,数据中的IP源地址为本主机地址,MAC源地址为本主机地址,IP目的地址为目的主机IP地址,MAC地址为默认网关的MAC地址

⑥该数据每次经过中间结点(路由器)的时候(进入新的网络环境)(每次一到下一跳都要使用一次ARP协议),都会进行解封装、封装,因此,其目的MAC地址和源MAC地址都会进行改变,但是目的IP地址和源IP地址不会因此而改变。其中,源MAC地址会变成该中间结点的MAC地址,目的MAC地址将会变成下一跳的结点的MAC地址

⑦到目的地址所属的默认网关后,目的MAC地址将会变为目的主机的MAC地址,源MAC地址为目的主机所属的默认网关的MAC地址(同样通过ARP协议查询目的主机的MAC地址),在发送的过程中源IP地址和目的IP地址从未改变

img

2.7.DHCP协议

应用层协议,使用客户/服务器方式,通过广播进行交互,基于UDP,动态分配IP地址

①功能:

1.即插即用:主机进入范围内,DHCP就可以为它进行服务

2.地址重用:设IP地址为IP1,本来由A使用,在A不再使用该地址后,B可以使用IP1

3.支持移动用户加入网络

4.在用地址续租:延长主机使用其IP地址的期限(IP地址使用有期限)

②过程:C/S,全程广播,即目的地址为255.255.255.255

1.主机广播DHCP发现报文(寻找本网络内的服务器):源地址 0.0.0.0,由主机发送,代表本网络内本主机,此时本主机并没有IP地址,故用0.0.0.0表示本主机;目的地址255.255.255.255,即广播地址

2.DHCP服务器广播DHCP提供报文(拟分配,可能有多个服务器响应):源地址为DHCP服务器地址,由DHCP服务器发送;目的地址255.255.255.255,即广播地址

3.主机广播DHCP请求报文(针对某一个服务器申请,此时仍采用广播可以告诉其他服务器,该主机已经和某服务器进行了通信):源地址0.0.0.0,由主机发送;目的地址255.255.255.255,即广播地址

4.DHCP服务器广播DHCP确认报文(正式分配):源地址为DHCP服务器地址,由DHCP服务器发送;目的地址为255.255.255.255,即广播地址

2.8.ICMP协议

网络层协议,作用是通过ICMP报文报告差错或者异常情况,ICMP报文作为IP数据报的数据部分加上首部组成IP数据报

1.ICMP差错报文:

①终点不可达:路由器或者主机无法交数据付

②源点抑制:网络内产生拥塞

③时间超过:路由器收到生存时间为0的数据或者目的主机没在预定时间内收到完整的数据报

④参数问题:首部字段出问题

⑤改变路由:更改最佳路由路径

2.ICMP询问报文

①回送请求和回答报文:测试目的站是否可达及了解状况(PING)

②时间戳请求和回答报文:用来进行时间同步和测量时间

3.不应发送的情况:

①ICMP差错报文出错

②仅对分组第一个出错数据发送ICMP差错报文,之后的分组不发送

③对于组播地址(一点对多点)不发送ICMP差错报文

④对于特殊地址(例如127巡回)不发送ICMP差错报文

3、IPv6

3.1 IPv6的主要特点

1.地址空间从ipv4的32bit提升到128bit,根本上解决地址耗尽问题(CIDR,NAT不能根本解决)

2.彻底移除检验和字段

3.将可选字段移除首部,形成扩展首部

4.即插即用,无需DHCP

5.首部长度为8B的倍数,而ipv4为4B的倍数

6.只能在主机分片,ipv4可以在路由器和主机分

3.2 IPv6 地址的表示

IPv6地址的表示遵循下面的原则:

  • 将IPv6地址中的每4位用一个十六进制数表示,并用冒号分隔每16位,例如:4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170
  • 当16位域的开头有一些0时,可以采用缩写的表示方法,但是在域中至少有一个数字。例如吧地址:4BF5:0000:0000:0000:0000:0000:BE9A:2170 可以缩写为 4BF5:0:0:0:0:0:BE9A:2170
  • 当有连续的 0 值域时,可以进一步缩写,这些值域可以使用双冒号(::)缩写,还是上面那个例子,缩写为:4BF5::BE9A:2170,需要注意的是:双冒号表示方法只能在一个 IPv6地址中使用一次。