image.png
网络层 负责在不同网络之间尽力转发数据包,基于数据包的IP地址转发。如果数据包丢失,它是不负责重传的;也不负责数据报的转发顺序。

1 网络层提供的两种服务

网络层关注的是如何将分组 从源端 沿着网络路径送达 目的端

在计算机网路领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。

  • 争论的焦点是:在计算机通信中,可靠交付应当由谁来负责?是 “网络” 还是“端系统”?(端系统,也就是主机)
    • 答:应该由“端系统”负责。

两种服务:网络层应该向运输层提供怎样的服务?

  • 虚电路服务
  • 数据报服务


1.1 虚电路服务

虚电路 表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储收发方式传送,而并不是真正建立了一条物理连接

请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。

可以不写地址,因为管理员已经固定好了地址,提前配置路径。
chapter4 网络层【上】 - 图2 Rec 0001.mp4 (829.57KB)

1.2 数据报服务

网络在发送分组时不需要先建立连接。每一个分组(既IP数据报)独立发送,与其前后的分组无关(不进行编号)。

网络层不提供服务质量的承诺。既所传送的分组可能出错、丢失、重复和失序(不按顺序到达终点),当然也不保证分组传送的时限。当数量包过多的时候,超过存储承受能力的数据就会被丢弃。 Rec 0001.mp4 (2.32MB) 尽最大努力交付的好处:
chapter4 网络层【上】 - 图5

数据报服务的演示: Rec 0002.mp4 (1.96MB)

1.3 虚拟电路与数据报服务比较

对比方面 虚电路服务 数据报服务
连接的建立 必须要有 不需要
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障时 所有通过出故障的节点的虚电路均不能工作 出故障的节点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终端 到达终点时不一定按发送顺序
端到端的差错处理和流量控制 由网络负责,也可以由用户主机负责 由用户主机负责

注意,现在的互联网用的是 “数据报服务”

2 网际协议 IP

image.png

2.1 虚拟互联网

网络互连的设备:
中间设备 又称 中间系统中继(relay)系统

  • 物理层中继系统:转发器(repeater)。【能把信号放大。 如:集线器】
  • 数据链路层中继系统:网桥桥接器(bridge)。【如: 网桥 或 交换机】
  • 网络层中继系统:路由器(router)
  • 网络层以上的中继系统:网关(gateway)。【网关就是 默认路由】
    • 注意:现在,人们常说的“网关”指的是:路由器的接口,网关就是路由器接口的地址。但是正规的意思,还是上面的定义。

分组在互联网中的传送:
image.png

2.1.1 从网络层看IP数据报的传送

image.png

2.2.2 互连网络与虚拟互联网络

chapter4 网络层【上】 - 图10
虚拟网络把复杂的Internet看成一个网络,化简问题。
虚拟互联网络就是逻辑互联网络,他的意思就是互联起来的各种物理网络的异构性本来就是客观存在的, 但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络,而不用考虑具体的网络异构细节。

Rec 0001.mp4 (1.27MB)

2.2.3 网络层的协议

网络层有四种协议: IP协议、ARP协议、ICMP协议、IGMP协议。
image.png

网络层4个协议之间层次:
image.png Rec 0002.mp4 (1.34MB)

2.2 IP地址

2.2.1 IP层次结构(IPv4)

层次化IP地址将32位二进制的IP地址分为:网络ID主机ID
image.png
image.png

2.2.2 IP地址分类(IPv4)

image.png

  • A、B、C类地址都是 单播地址(一对一通信)
  • D类地址(前四位是 1110)用于 多播(一对多通信)


| image.png
以下是对应最左端的前8位二进制位:
- A类 网络号占8位,则其应在:1~127;
- B类 网络号占16位,则其应在:128~191;
- C类 网络号占24位,则其应在:192~224;

image.png | | —- |

image.png
注意,127比较特殊,指的是“我”。即每个计算机自己。

关于“127”的详细解释,请看:https://www.bilibili.com/video/BV17p411f7ZZ?p=60(从1分钟开始)

注意:
A类 理论上应该在 :0~127;但是,有特殊的原因:

  • 第一,IP 地址中的全0表示“这个(this)”。 网络号字段为全0的IP地址是个保留地址,意思是“本网络”
  • 第二,网络号为127 (即111111保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。

几个特殊的网段地址:

  • 127.0.0.1 :本地环回地址;
  • 169.254.0.0:不能自动的获得IP地址(可能是地址不够用的原因,就会分配一个这样的地址);

  • 一些保留的私网地址:这些地址没有给服务器用,可以给政府或学校等用,对于这些私网地址是不能正常的连过去的)

    • 10.0.0.0:保留的A类私网地址;
    • 172.16.0.0~172.31.0.0:(32个)保留的B类私网地址;
    • 192.168.0.0~192.168.255.0 :(256个)保留的C类私网地址;


2.2.3 互联网中的IP地址

Rec 0001.mp4 (1.41MB)

2.4 IP地址与MAC硬件地址

chapter4 网络层【上】 - 图22
Mx:代表MAC地址

  1. 交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包。
  2. 数据包在传输过程中不变,过网络设备数据帧要用新的物理层地址重新封装。
  3. MAC地址决定了数据帧下一跳哪个设备接收,而IP地址决定了数据包的起点和终点
  4. 基于MAC地址控制代理服务器只能控制本网段的计算机,不能获取其他网段计算机的MAC地址。


注意:
IP 数据报的首部中没有地方可以用来指明“下一跳路由器的IP 地址”。
当路由器收到待转发的数据报,不是将下一跳路由器的IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
- 网络接口软件使用ARP 负责将下一跳路由器的IP 地址转换成硬件地址,并将此硬件地址放在链路层的MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

2.5 地址解析协议ARP

image.png
ARP协议的作用:是将 网络层的IP地址 解析出 数据链路层的MAC地址

2.5.1 ARP协议工作原理

其实主要通过 广播

每一台主机都有一个ARP高速缓存(ARP cache)。里面有本局域网上各 主机 和 路由器 IP地址到硬件地址MAC的**映射表**。

当主机A向本局域网上的主机B发送IP数据报时,主机A查找其ARP高速缓存中是否有B的IP地址:

主机A在发送其ARP请分组时,就把自己IP地址到硬件地址的映射写入ARP请求分组。当主机B收到A的ARP请求分组时,就把主机A的这一地址映射写入主机B自己的ARP高速缓存中。【以后,主机B向A发送数据报时就很方便了】

  • 如果,就通过映射表查出对应的硬件地址,再把这个硬件地址写入MAC帧中,然后通过局域网将该MAC帧发往此硬件地址。
  • 如果没有,主机A就自动运行ARP,然后按以下步骤找出B的硬件地址:
    • ARP进程在本局域网上广播发送一个ARP请求分组;
    • 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组;
    • 主机B的IP地址与ARP请求分组重要查找的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在该ARP响应分组中写入自己的硬件地址MAC。【其他主机中的IP地址与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。】
    • 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

具体过程如下图所示:
image.png

2.5.2 使用ARP的四种典型情况

image.png
image.png

2.5.3 为何不直接使用MAC地址通信

由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。

但IP编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的

因此,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来很大的方便。

2.5.4 一些操作

操作1:查看网关的MAC地址

  • 命令:arp -a
  • 结果:可以成功查看路由器网关的MAC地址

chapter4 网络层【上】 - 图27

操作2:利用arp更改MAC地址

  • 命令:arp -s 192.168.31.1 8c-53-c3-99-87-e8(本来是e9)
  • 结果:执行了此命令之后,此计算机不再用arp协议解析MAC地址,而是直接使用关联的MAC地址通信,相当于ARP欺骗,因为使用了一个错误的地址给网关,不能正常上网了,但是和其他本网段的计算机还是通的。(此命令win10 操作失败)

chapter4 网络层【上】 - 图28

操作3:诊断arp欺骗

  • 命令:arp -a
  • 分析:对与本网段中的两台计算机可以相互ping通,但是气其中一台不能正常上网。可以判断不是物理层的问题(网线),因为可以ping通,子网掩码也没有问题,可能是发送了arp欺骗。对两台计算机查看MAC地址,如果不一样表面确实是arp欺骗;如果相同,可能是其他问题。

操作4:解决arp欺骗

  • 方法:删除发过来的MAC地址缓存便可(利用网络疑难解答自行诊断便可以实现缓存的清除),或者是重启电脑(基本万能)

2.5.5 ARP欺骗演示

https://www.bilibili.com/video/BV17p411f7ZZ?p=77

2.6 逆向ARP——RARP

已知物理地址MAC,请求得到 IP地址。【与ARP解析 正好相反】

2.7 IP数据报的格式

IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(即4字节)为单位来描述。图4-13是IP数据报的完整格式。
image.png
一个IP数据包有首部数据两个部分组成。

  • 首部:第一部分是固定长度,20字节,是所有IP数据包必须具有的。
    • 在首部的固定部分的后面是一些可选字段,其长度是可变的。


2.7.1 首部的结构

  • 版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4);
  • 首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)。因此 IP 的首部长度的最大值是 60 字节;
  • 区分服务——占 8 位,用来获得更好的服务。(着急的先过,不着急的慢慢排队,语音优先,文字可以排队)。在一般的情况下都不使用这个字段 ;
  • 总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节(2-1)。总长度必须不超过最大传送单元 MTU
  • 标识(identification)——占 16 位,它是一个计数器,用来产生数据报的标识。 不是序号,每产生一个数据包(报),就增加1;
  • 标志——占 3 位,告诉后面的数据包是不是分片的。目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF=1 表示后面“还有分片”。MF=0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF=0 时才允许分片;
  • 片偏移——占 3 位,较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。(也就是偏移等于当前字节在数据部分的第几个再除以8,因为8字节为1单位)。例如:

chapter4 网络层【上】 - 图30

  • 在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU (Maximum Transfer Unit)。 当一 个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节若所传送的数据报长度超过数据链路层的MTU值,就需要进行 分片处理
  • 在进行分片时(见后面的“片偏移”字段),数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
    • 生存时间——占 8 位,记为 TTL (Time To Live),数据报在网络中可通过的路由器数的最大值。每过一个路由器就减1,防止数据包在网络中循环。


一般来说window操作系统的TTL是128,而Linux计算机的操作系统(好像是)56。 操作1:查看到其他计算机经过路由器的个数 命令:ping 219.148.38.148 (此计算机也是window系统) chapter4 网络层【上】 - 图31 分析:可见当前计算机到219.148.38.148经过了128-113=15个路由器才到达。

操作2:限制TTL的次数观察结果 命令:ping 219.148.38.148 -i 5 (表示发包的时候指定了TTL是5) chapter4 网络层【上】 - 图32 分析:由于ping通该计算机需要15个路由器的路程,但是指定的TTL次数不够,也就是还没到达目的地数据就过期了,所以返回了一个传输失败。

操作3:跟踪路由器,查看其(路由器的)网关地址 命令:ping 219.148.38.148 -i 1/2/3/4/5… (依次类推查看) chapter4 网络层【上】 - 图33 可见,发往219.148.38.148数据经过的第一个路由器地址是10.7.86.1 chapter4 网络层【上】 - 图34 可见,发往219.148.38.148数据经过的第二个路由器地址是172.16.0.250 依次类推,就可以差错到达目的地219.148.38.148地址之间15个路由器的全部地址。可以跟踪整个的路径。(但是也可能存在中间某个路由器不让你ping的特殊情况)

  • 协议——占 8 位,字段指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程。用协议号标识数据部分是什么数据。

chapter4 网络层【上】 - 图35
image.png

  • 首部检验和——占 16位,只检验数据报的首部 是否有错误,不检验数据部分。这里不是采用CRC检验码而是采用简单的计算方法。每经过一个路由器就会检验一次。

chapter4 网络层【上】 - 图37

  • 源地址目的地址都是指 IP地址,32位,只符合IPv4。IPv6是128位。


  • 可变部分:IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。长度可变(从1~40字节不等,取决于羧酸则的项目)。增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际很少使用。


2.8 IP转发分组的流程(数据路由)

数据路由:路由器在不同网段 转发数据报(包)

  • 就像我们打长途电话一样,需要拨区号。而在不同网段的计算机之间通信,都需要路由。【即:跨网段通信的都叫路由】

网络畅通的条件:能去能回。(假如 计算机A 与 不同网段的 计算机B 进行通信)

  • 能去:沿途的路由器必须知道目标网络(B)下一跳给那一个接口;
  • 能回:沿途的路由器必须知道源网络(A)下一跳给那一个接口;

chapter4 网络层【上】 - 图38
分析:

  • 计算机PC0 ping PC1,网络要想通,要求沿途的路由器Router0,Router1,Router2和Router3都必须有到192.168.1.0/24网段的路由,这样数据包才能到达PC1.
  • PC1要回应数据包给PC0,沿途所有的路由器必须有到192.168.0.0/24网络的路由,这样数据包才能回来。


2.8.1 配置静态路由

需要管理员告诉路由器所有没有直连的网络下一跳给谁。
适合于小规模网络,不能自动调整路由。

chapter4 网络层【上】 - 图39

操作1:ping1处地址
  • 分析:对于PC0,想要ping通1处地址,是可以ping通的。因为PC0和路由器0是相连着的,所以能去能回,可以ping通。
  • 结果:ping通
    chapter4 网络层【上】 - 图40

操作2:ping2处地址
  • 分析:对于PC0,想要发数据包到2处地址(路由器1中),可以先通过路由器0,而路由器1是与路由器0相连的,所以路由器0可以将PC0发过来的数据再发给路由器1。但是路由器1不知道如何到达PC0,其只知道到达路由器0(172.16.0.0/24网段)和路由器2(172.16.1.0/24网段),所以ping 2处地址会失败,数据包没有回来。
  • 结果:ping不通
    chapter4 网络层【上】 - 图41

操作3:查看路由表
  • 命令:show ip route
  • 分析:查看路由条目
    chapter4 网络层【上】 - 图42

操作4:添加路由表(使路由器1可以找到PC0)
  • 命令:
    en
    config t
    ip route 192.168.0.0 255.255.255.0 172.16.0.1
  • 分析:路由器只关心网段,因为PC0处于192.168.0.0,而不是写PC0的具体ip地址,其子网掩码是255.255.255.0。而路由器1到达192.168.0.0网段的下一跳地址是是172.16.0.1。所以添加的路由配置路径是ip route 192.168.0.0 255.255.255.0 172.16.0.1
    chapter4 网络层【上】 - 图43
  • 结果:如上,添加这个静态路径之后,便可以ping通。
    chapter4 网络层【上】 - 图44

2.8.2 Windows上的默认路由和网关

网络地址和子网掩码均为0的路由就是默认路由。

操作1:查看路由表
  • 命令:route print 或者是netstat -r

image.png
windows计算机的网关 就是 默认路由

操作2:不设网关,添加静态路由

route add 命令详解:https://baijiahao.baidu.com/s?id=1652061477205128299&wfr=spider&for=pc

  • 命令:route add0.0.0.0 mask 0.0.0.0 192.168.0.1 (其实就是路由表的第一条,只不过是现在直接添加)【192.168.0.1 就是新添加的路由】


1. 步骤一:不设置网关
image.png

2. 步骤二:查看路由表,此时已经不能正常上网(网断了)

默认路由已经没有了

image.png

3. 步骤三: 添加静态路由便可**
image.png
(以上操作win7可以实现,不过我win10好像不能实现…不太懂)


2.8.2.1 当计算机有两个网关

注意:
计算机不能添加两个网关(或 两个网卡)【加两个网卡或网关 相当于会有两个默认路由)】,否者意味着两个静态路由,会造成一通一闭的丢包现象。

如何解决:

  • 对一个网关(网卡)上使用默认路由;
  • 对另一个网关(网卡)上添加一个指定路由;【使用route add指令】

image.png

总的来说,一个计算机上,最好只有一个网关。

2.8.3 网络负载均衡

例子:192.168.0.0/24网段和192.168.3.0/24网段有两条路①和②,需要给网路中的路由器添加路由,使这两个网段能够通过①②两条路径通信

chapter4 网络层【上】 - 图50 Rec 0001.mp4 (2.17MB)

3 划分子网划分和构造超网

3.1 子网掩码

子网掩码(subnet mask)又叫网络掩码地址掩码:

  • 它是一种用来指明一一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。
  • 子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分

例子:
对于一个IP地址是192.168.80.123,子网掩码是255.255.255.0的计算机A,想要传输数据给192.168.90.123的计算机B。

  • 将其IP地址和子网掩码都写成二进制,进行与运算,即1和1与运算得1,0和1或1和0做与运算都得0。
  • 这样经过IP地址和子网掩码做完与运算后,主机位不管是什么值都归零,网络位的值保持不变,这样就得到该计算机所处的网段为192.168.80.0。【得到计算机A的网段】
  • 然后,用A的子网掩码与B的IP地址 也进行 与运算,得到B计算机的网段为:192.168.80.0。
  • 此时得到A、B计算机的网段相同,所以它们之间通信可以直接接发数据;而不需要通过路由器等进行中转数据。

    子网掩码的与运算: chapter4 网络层【上】 - 图52

3.2 子网划分

注意:主机段部分 所在的位:不能全为0或全为1

  • 若全为0:如192.168.1.0(C类IP地址)其主机号全为0,此时它表示的是一个网段
  • 若全为1:如192.168.1.255(C类IP地址)其主机号全为1,此时表示其为一个广播

image.pngimage.png

3.2.1 C类网络等分成两个子网

视频讲解:https://www.bilibili.com/video/BV17p411f7ZZ?p=63

chapter4 网络层【上】 - 图55

将一个C类的网络等分成两部分,0-127为第一部分,128-255为第二部分。**

方法:将主机部分的位后移一位。

  • 由于主机ID不能全为0,所以第一部分最先开始的范围是1(0x00000001)。(0是本网段)。且主机ID不能全为1,所以第一部分的最后范围是126(01111110)。(127是本网段的广播地址)
  • 由于主机ID不能全为0,所以第二部分最先开始的范围是129(10000001)。(128表示本网段)。且主机ID不能全为1,所以第二部分的最后范围是254(11111110)。(255是本网段的广播地址)
  • 由于第8位现在已经当成是网络ID,所以只需要将子网掩码的第八位也置为1便可,也就是255.255.255.128(10000000)
  • 路由器一般是用本网段的第一个地址。所以第一个部分的路由器网关(地址)是192.168.0.1,第二个部分的路由器网关(地址)是192.168.0.129。

划分之后的示意图:

chapter4 网络层【上】 - 图56

3.2.2 C类网络等分成四个子网

视频:https://www.bilibili.com/video/BV17p411f7ZZ?p=64

方法:将主机部分的位后移两位。

chapter4 网络层【上】 - 图57
将一个C类的网络等分成四部分,0-63为第一部分,64-127为第二部分,128-191为第一部分,192-255为第二部分。

  • 由于主机ID不能全为0,所以第一部分最先开始的范围是1(0x00000001)。(0是本网段)。且主机ID不能全为1,所以第一部分的最后范围是62(00111110)。(63是本网段的广播地址)
  • 由于主机ID不能全为0,所以第二部分最先开始的范围是65(01000001)。(64表示是本网段)。且主机ID不能全为1,所以第二部分的最后范围是126(01111110)。(127是本网段的广播地址)
  • 由于主机ID不能全为0,所以第三部分最先开始的范围是129(10000001)。(128是本网段)。且主机ID不能全为1,所以第三部分的最后范围是190(10111110)。(191是本网段的广播地址)
  • 由于主机ID不能全为0,所以第四部分最先开始的范围是193(11000001)。(192是本网段)。且主机ID不能全为1,所以第四部分的最后范围是254(11111110)。(255是本网段的广播地址)
  • 由于第8位和第七位现在已经当成是网络ID,所以只需要将子网掩码的第八位和第七位也置为1便可,也就是255.255.255.192(11000000)
  • 当一个C类网络每除一次2,子网掩码就往后移1位。

3.2.2 C类网络等分成八个子网

视频:https://www.bilibili.com/video/BV17p411f7ZZ?p=65

方法:将主机部分的位后移三位。

chapter4 网络层【上】 - 图58

将一个C类的网络等分成八部分,0-31为第一部分,32-63为第二部分,64-95为第三部分,96-127为第四部分,128-159为第五部分,160-191为第六部分,192-223为第七部分,224-255为第八部分。

  • 第一部分的可用范围是1-30;(31是广播地址)
  • 第二部分的可用范围是33-62;(63是广播地址)
  • 第三部分的可用范围是65-94;(95是广播地址)
  • 第四部分的可用范围是97-126;(127是广播地址)
  • 第五部分的可用范围是129-158;(159是广播地址)
  • 第六部分的可用范围是161-190;(191是广播地址)
  • 第七部分的可用范围是193-222;(223是广播地址)
  • 第八部分的可用范围是225-254;(255是广播地址)
    • 由于第八位和第七位和第六位现在已经当成是网络ID,所以只需要将子网掩码的第八位和第七位和第六位也置为1便可,也就是255.255.255.224(11100000)

      3.2.3 点到点网络的子网掩码最好是252

      点对点的子网源码是252(11111100),也就是对等平分了6次,平分到成64份。

3.2.4 C类网络进行变长划分

Rec 0002.mp4 (3.44MB)可以得出:
等分划分时,每个网段的子网掩码是一样的;
变长划分时,每个网段的子网掩码就可能不一样;
**

3.2.5 B类子网划分

与C类网络子网划分方法一样。


3.3 使用子网时分组的转发

使用子网划分后,路由器必须包括以下三项内容:目的网络地址子网掩码下一跳地址

路由器转发分组算法:

  1. 从收到的分组的首部提取目的 IP 地址 D。
  2. 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
  4. 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
  6. 报告转发分组出错


3.4 无分类编址CIDR(构造超网)

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

  • B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
  • 因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
  • 整个 IPv4 的地址空间最终将全部耗尽。

当时预计前两个问题将在1994年变得非常严重,因此IETF很快就研究出采用 无分类编址 的方法来解决前两个问题。

IP 编址问题的演进
一开始使用变长子网掩码VLSM(Variable Length Subnet Mask),后来在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR (Classless Inter-DomainRouting)。


CIDR的特点:
**

  • CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。 并且在IPv6使用之前容许互联网的规模继续增长。
    • CIDR将32位的IP地址划分为前后两个部分:
      • 前一部分“网络前缀”(前缀):用来指明 网络;
      • 后一部分 用来指明 主机。

因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已经是 无分类的两级编址。其记法为:

chapter4 网络层【上】 - 图60

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

  • CIDR 把网络前缀都相同的连续的IP地址组成一个“CIDR 地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。

    例如,已知IP地址128.14.35.7/20 是某CIDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀(用粗体和下划线表示出),而前缀后面的12位是主机号: image.png> image.png> 全 0 和全 1 的主机号地址一般不使用。> image.png

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

路由聚合
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。

  • 路由聚合也称为构成超网**(supernetting)**。

CIDR 记法的其他形式

  • 10.0.0.0/10 可简写为 10/10,也就是将点分十进制中低位连续的 0 省略。
    • 10.0.0.0/10 相当于指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0,即11111111 11000000 00000000 00000000
  • 网络前缀的后面加一个星号 * 的表示方法:如 00001010 00*,在星号 之前是网络前缀,而星号 表示 IP 地址中的主机号,可以是任意值。


3.4.1 构成超网

单位K:表示1024;
“包含的地址数”中没有把全为0和全为1的主机号除外;
image.pngimage.png
从上表看出,每一个CIDR地址块中的地址数一定是2的整数次幂。除最后几行外,CIDR地址块都包含了多个C类地址(是一个C类地址的2n倍,n是整数),这就是“构成超网”这一名词的来源。


构成(造)超网:
本来计算机A和计算机B在同一个网段,可以直接的进行数据的收发,但是由于子网掩码设置错误,导致网络ID不一样。也就是机器觉得他们不在同一个网段上。

在这种情况下,A计算机到B计算机通信,必须通过路由器转发,如下图所示,这样两个子网能够通信。但是本来这些计算机物理上就是在同一个网段,还需要路由器转发,效率不高。

chapter4 网络层【上】 - 图66

所以,可以构造超网解决上面的问题。

如何构造:如何让两个子网的计算机划分在一个网段呢?

就相当于使用最长前缀匹配

  • 如图所示,将192.1 68.0.0和192.168.1.0两个C类网络合并。将IP地址第3个字节和4字节写成二进制,可以看到将子网掩码往左移动1位,网络部分就一样了这两个网段就在一个网段了

image.png
其实,就是将网段部分的第三个字节向左移动一位两个C类网络,合并)
image.png

3.4.2 合并网络的规律(C类)

image.png

3.4.3 如何判断两个网络可以合并?

  • 首先,找出网络部分不一样的那一个字节:(以C类网络为例)
    • 如:192.168.``5``.1192.168.``6``.0 可以看出它们的网络部分的第三个字节不一样;
  • 然后再看这个不一样的字节的二进制,看它们的二进制中第一个不是0(即为1)的所在地方是否相同。如果相同,则可以合并;反之,不可合并:
    • 0的二进制:0000 0101;1的二进制0000 0110,可以看出它们第一个位1的均处于第三个bit处。所以可以合并。


3.4.4 使用二叉线索查找路由表

为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。 Rec 0002.mp4 (1.38MB)