LV06-02-网络基础-04-IP地址与IP协议

注意有公式

本文主要是网络基础——IP地址的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、IP地址简介

1. 什么是IP地址?

Internet上,每一个节点都依靠唯一的IP地址相互区分和相互联系,IP地址用于标识互联网中的每台主机的身份,设计人员为每个接入网络中的主机都分配一个IP地址(Internet Protocol Address),只有合法的IP地址才能接入互联网中并且与其他主机进行网络通信,IP地址是软件地址,不是硬件地址,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址(MAC)的差异。硬件MAC地址是存储在网卡中的,应用于局域网中寻找目标主机。

2. 为什么使用IP地址?

在单个局域网网段中,计算机与计算机之间可以使用网络访问层提供的 MAC 地址进行通信。如果在路由式网络中,计算机之间进行通信就不能利用 MAC 地址实现数据传输了,因为 MAC 地址不能跨路由接口运行;即使强行实现跨越,使用 MAC 地址传输数据也是非常麻烦的。这是由于内置在网卡里的固定 MAC 地址不能在地址空间上引入逻辑结构,使其无法具备真正的地址来表示国家、省、市、区、街道、路、号这类层次。因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址。

3. IPv4IPv6是什么

IPv4IPv6都是表示IP协议。IPv4采用32位地址长度,只有大约43亿个地址,IPv6的全称是Internet Protocol version 6,是互联网协议第6版,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将影响互联网的进一步发展,这也是IPv6出现最主要的原因。IPv6地址使用以冒号分隔的十六进制数字,它分为816位块,构成一个128位地址方案,其地址数量号称可以为全世界的每一粒沙子编上一个地址。

4. IP地址与MAC地址

IPTCP/IP 四层模型模型中处于第二层,也就是网络层。网络层的主要作用是实现主机与主机之间的通信,也叫点对点(end to end)通信。MAC位于网络接口和物理层,按照七层模型来说,应该位于数据链路层。

MAC 的作用则是实现直连的两个设备之间通信,而 IP 则负责在没有直连的两个网络之间进行通信传输。

其实生活中有个例子,可以很好解释这个,比如说我们要去某个景点旅游,我们首先要查一查行程,做好路线规划,我们一查,发现,需要转两次车,我们现在在地点A,首先只能坐飞机到地点B,然后转乘汽车到达地点C,可是前边还有一段距离,我们又需要乘坐公交车才能到达终点D,也就是说我们的路线是这样的:

image-20220528140116547

每种交通工具只能在自己的区间内运行,飞机票,汽车票,公交车票都是只能到特点地点,只能在某个区间内移动,这里的区间内就好比是网络中的数据链路。在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好比源 MAC 地址,目标地点好比目的 MAC 地址。整个旅行的行程表,就相当于网络层,充当远程定位的功能,行程的开始好比源 IP,行程的终点好比目的 IP 地址。(当然不管是路线还是网络数据传输,这里都不应该是单向,这样画只是便于理解)对应到网路,上图大概应该是这样的:

image-20220528141809608

同时呢,我们如果只有行程表而没有车票,就无法搭乘交通工具到达目的地。相反,如果除了车票而没有行程表,恐怕也很难到达目的地。因为我们不知道该坐什么车,也不知道该在哪里换乘。也就是说,没有IP,我们就不知道数据要发往哪里,没有MAC,我们就不知道怎么把数据发过去。

因此,只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。同样的,计算机网络中也需要数据链路层和网络层这个分层才能实现向最终目标地址的通信。

我们可以发现,旅行途中我们虽然不断变化了交通工具,但是旅行行程的起始地址和目的地址始终都没变。其实,在网络中数据包传输中也是如此,源IP地址和目标IP地址在传输过程中是不会变化的,只有源 MAC 地址和目标 MAC 一直在变化。

5. IP地址(IPv4)的编址方式

互联网中的每一台主机都需要一个唯一的IP地址以标识自己的身份,那么IP地址究竟是怎样的,如何去定义一个IP呢?

传统的IP地址是一个32位二进制数的地址,也叫IPv4地址,由48位字段组成。除了IPv4之外,还有IPv6IPv6采用128位地址长度,816位字段组成。

在网络通信数据包中,IP地址以32位二进制的形式表示;而在人机交互中,通常使用点分十进制方式表示,下边的xxx表示一个十进制整数,范围为0~255

1
2
3
xxx.xxx.xxx.xxx 
/* 例如 */
192.168.1.1
192.168.0.0/24是啥个意思嘞?

上一篇笔记中,我们了解路由表的时候,提到过这种写法:

1
192.168.0.0/24

192.168.0.0192.168.0.24之间的IP地址?不,可不是这样理解的,虽然刚开始我也是这样理解的。其实这是无分类地址 CIDR的写法,到后边的1.9节专门会说这个。

192.168.0.0/24这是IP地址的一个规范写法,前面是IP地址,后面跟一个斜杠以及一个数字,这条斜杠及后面的数字称为网络掩码network mask),斜杠后面的数字表示有意义的比特位的个数(从左到右)

所以192.168.0.0/24中的24表示从左到右的24位(也就是前24位)有效,那么剩下的8位可以是任意数值,可以是0-254之间的任一地址(255为广播地址,后边会写)。同样192.168.0.0/32也很好理解,就是上述IP地址的前32位有效,也就是所有的位都是有效的,即为192.168.0.0

IP地址中的32位实际上包含2部分,分别为网络地址和主机地址,也可以叫网络号和主机号,可通过子网掩码来确定网络号和主机号分别占用多少位。

  • 网络号:用于识别主机所在的网络,网络号的位数直接决定了可以分配的网络数量。
  • 主机号:用于识别该网络中的主机,主机号的位数则决定了网络中最大的主机数量。

二、IP地址分类

1. 概述

1.1 分为哪几类?

互联网诞生之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。

image-20220528145305606

【说明】图中的几类IP地址,深灰色部分为固定用于分类的位,对于ABC三类来说,绿色部分为网络号可变部分,蓝色部分为主机号。

ABC 分类地址最大主机个数是如何计算的呢?最大主机个数,就是要看主机号的位数,计算方式为:
$$
最大主机数 = 2^{主机号位数}-2
$$
为什么计算主机数要减2?这个问题看后边的的广播地址的笔记就会得到答案啦。

1.2 优缺点

1.2.1 优点

不管是路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。其他几类地址也是按照这个方式,进行判断即可。这种分类地址的优点就是简单明了、选路(基于网络地址)简单

1.2.2 缺点

  • 缺点一

同一网络下没有地址层次,比如一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能,所以这就缺少地址的灵活性

  • 缺点二

ABC类有个尴尬处境,就是不能很好的与现实网络匹配C 类地址能包含的最大主机数量实在太少了,只有 254 个。而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就很浪费了。

2. 各类IP

2.1 AIP地址

image-20220528154801652

一个AIP地址由2个字节网络号和3个字节主机号组成,网络号最高一位必须为0,因此可知,第一个字节取值范围为0~127,一共$2^7=128$个网络号,每个网络号可以容纳$2^{24}-2=16777214$个主机。

  • A类地址范围为:0.0.0.0 ~ 127.255.255.255
  • A类地址中有私有地址和保留地址:
10.0.0.0~10.255.255.255是私有地址,所谓私有地址就是在互联网中不能使用,而被用在局域网中使用的地址。
127.0.0.0~127.255.255.255是保留地址,用作循环测试使用。
  • 一般来说,A类保留给政府机构。

2.2 BIP地址

image-20220528155331417

一个BIP地址由2个字节的网络号和2个字节的主机号组成,网络号的最高两位必须是10,因此,网络地址第一个字节的取值范围为128~191,一共拥有$2^{14}=16384$个网络号,每个网络号能容纳约$2^{16}-2=65534$个主机。

  • B类地址范围:128.0.0.0 ~ 191.255.255.255
  • B类地址中有私有地址和保留地址:
172.16.0.0~172.31.255.255私有地址
169.254.X.X是保留地址,如果我们的IP地址是自动获取IP地址,而我们在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。
  • 一般来说,B类分配给中等规模的公司。

2.3 CIP地址

image-20220528160334288

一个CIP地址由3个字节网络号和1个字节主机号组成,网络号最高三位必须为110,因此CIP地址的第一个字节的取值范围为192~223,每个网络号能容纳$2^8-2=254$个主机。

  • C类地址范围为:192.0.0.0 ~ 223.255.255.255
  • C类地址中有私有地址:
192.168.X.X是私有地址(192.168.0.0~192.168.255.255)。
  • 一般来说,C类分配给任何需要的人。

2.4 DIP地址

image-20220528163352491

DIP地址第1个字节以1110开始,它是一个专门保留的地址,它并不指向特定的网络,目前这一类地址被用在多点广播(多播,Multicast),多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。

  • D类地址范围:224.0.0.0 ~ 239.255.255.255

【注意】DIP无主机号,不可用于作为主机IP

2.5 EIP地址

image-20220528163519185

EIP地址以1111 0开始,为将来使用保留。全零(0.0.0.0)地址对应于当前主机。全1IP地址255.255.255.255)是当前子网的广播地址。

  • E类地址范围:240.0.0.0 ~ 255.255.255.255

【注意】EIP无主机号,不可用于作为主机IP

3. 特殊IP

3.1 私有地址和保留地址

在进行 IP 地址分配时,有一些 IP 地址具有特殊含义,不会分配给互联网的主机。例如,保留了一些 IP 地址范围,用于私有网络(局域网LAN),这些地址被称为私有地址;保留一部分地址用于测试,被称为保留地址。

A类地址私有地址10.0.0.0~10.255.255.255
保留地址127.0.0.0~127.255.255.255
B类地址私有地址172.16.0.0~172.31.255.255
保留地址169.254.X.X
C类地址私有地址192.168.0.0~192.168.255.255
保留地址

3.2 广播地址

在上边,我们计算主机数的时候都需要减2,这是因为在IP地址中,有两个IP是特殊的,分别是主机号全为1和 全为0地址。

主机号全为 1指定某个网络下的所有主机,用于广播
主机号全为 0指定某个网络

所以,在分配过程中,应该去掉这两种情况。

广播地址用于在同一个链路中相互连接的主机之间发送数据包,广播地址可以分为受限广播地址和直接广播地址。

  • 直接广播地址

直接广播(Direct Broadcast Address):向某个网络上所有的主机发送报文。例如,一个IP地址是192.168.0.10,这是一个C类地址,所以它的主机号只有1个字节,那么对主机号全取1得到一个广播地址192.168.0.255,向这个地址发送数据就能让同一网络下的所有主机接收到。ABC三类地址的直接广播地址结构如下:

A类XXX.255.255.255例如:120.255.255.255
B类XXX.XXX.255.255例如:139.22.255.255
C类XXX.XXX.XXX.255例如:203.120.16.255
  • 受限广播地址

直接广播要求发送方必须广播网络对应的网络号。但有些主机在启动时,往往并不知道本网络的网络号,这时候如果想要向本网络广播,只能采用受限广播地址(Limited Broadcast Address)。受限广播地址是在本网络内部进行广播的一种广播地址,TCP/IP规定,32比特全为1IP地址用于本网络内的广播,也就是255.255.255.255

3.3 环回地址

环回地址(Loopback Address)是用于网络软件测试以及本机进程之间通信的特殊地址。把A类地址中的127.XXX.XXX.XXX的所有地址都称为环回地址,主要用来测试网络协议是否工作正常的作用。比如在电脑中使用ping命令去ping 127.1.1.1就可以测试本地TCP/IP协议是否正常。
【注意】不能将环回地址作为任何一台主机的IP地址使用。

3.4 全0地址

IP地址32bit全为0的地址(也就是0.0.0.0)表示本网络上的本主机,只能用作源地址。0.0.0.0是不能被ping通的,在服务器中,0.0.0.0并不是一个真实的的IP地址,它被称为unspecified,即未指定(即无效的,无意义的)地址。它表示本机中所有的IPv4地址。监听0.0.0.0的端口,就是监听本机中所有IP的端口。一般是用作服务端,表示本机上的任意IPV4地址。

3.5 多播地址

多播地址用在一对多的通信中,即一个发送者,多个接收者,不论接受者数量的多少,发送者只发送一次数据包。多播地址属于D类地址,D类地址只能用作目的地址,而不能作为主机中的源地址。

224.0.0.0 ~ 239.255.255.255都是多播的可用范围,其划分为以下三类:

224.0.0.0~224.0.0.255为预留的组播地址,只能在局域网中,路由器是不会进行转发的。
224.0.1.0~238.255.255.255为用户可用的组播地址,可以用于 Internet 上。
239.0.0.0~239.255.255.255为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。

三、公网IP与私网IP

1. 基本概念?

ABC 分类地址,实际上有分公有 IP 地址(公网IP)和私有 IP 地址(私网IP

IP类别 IP地址范围私有IP地址范围
A类0.0.0.0~127.255.255.255 10.0.0.0~10.255.255.255
B类128.0.0.0~191.255.255.255172.16.0.0~172.31.255.255
C类192.0.0.0~223.255.255.255192.168.0.0~192.168.255.255

平时我们家里、学校用的 IP 地址,一般都是私有 IP 地址。因为这些地址允许组织内部的 IT 人员自己管理、自己分配,而且可以重复。

公有 IP 地址是有个组织统一分配的,假设我们要开一个博客网站,那么就需要去申请购买一个公有 IP,这样全世界的人才能访问。并且公有 IP 地址基本上要在整个互联网范围内保持唯一。公有 IP 地址是由 ICANN 组织管理,中文叫互联网名称与数字地址分配机构。IANAICANN 的其中一个机构,它负责分配互联网 IP 地址,是按州的方式层层分配。其中,在中国是由 CNNIC 的机构进行管理,它是中国国内唯一指定的全局 IP 地址管理的组织。

img
ARIN北美地区
LACNIC拉丁美洲和一些加勒比群岛
RIPE NCC欧洲、中东和中亚
AfriNIC非洲地区
APNIC亚太地区

2. 两者有什么区别?

  • 公网 IP 在广域网使用;私网 IP 只能在局域网内部使用,在广域网中是不被承认的。
  • 公网 IP 在全世界是唯一的;私网 IP 可以在不同的局域网内重复使用。
  • 公网 IP 可以和因特网内的任意机器通信;私网 IP 的通信范围仅限在局域网内部。
  • 公网 IP 由互联网服务提供商(简称 ISP,比如移动、电信、联通)分配,而私网 IP 地址由路由器分配。
  • 公网 IP 地址是收费的,而私网 IP 地址可以免费使用。

3. NAT技术?

私网 IP 地址既然是无法用来在因特网上通信,那一般我们在家里用的都是私网 IP 地址,为什么可以上网通信呢?

这是因为有一种NATNetwork Address Translation,网络地址转换)技术,它是一种将私网 IP 和公网 IP 相互转换的技术,通常实现在路由器上,称为 NAT 路由器。在IPv4地址耗尽的情况下,它已成为保护全局地址空间的流行且必不可少的工具。

网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机,但只通过一个公有IP地址访问因特网的私有网络中。它是一个方便且得到了广泛应用的技术,但是,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。

大概的原理就是,当私网用户访问公网的报文到达网关设备后,如果网关设备上部署了NAT功能,设备会将收到的IP数据报文头中的IP地址转换为另一个IP地址,端口号转换为另一个端口号之后转发给公网。在这个过程中,设备可以用同一个公网地址来转换多个私网用户发过来的报文,并通过端口号来区分不同的私网用户,从而达到地址复用的目的。

这个并不是现在学习的重点,就简单介绍到这里好啦。

四、无类域间路 CIDR

上边提到的分类IP的两个缺点,都可以在 CIDR 无类域间路解决,这种方式不再有分类地址的概念。无类域间路由(Classless Inter-Domain RoutingCIDR)可以将路由集中起来,在路由表中更灵活地定义地址。32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。下边来看看划分地址的方式。

1. 斜线分隔符

1
a.b.c.d/x

其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。例如,

image-20220528203715043

2. 子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。

2.1 分离网络号和主机号

子网掩码可以将某个IP地址划分成网络号和主机号两部分。 计算方法是通过把IP地址变成二进制,子网掩码也转成二进制后,两个二进制数按位做 与运算
$$
网络号 = IP地址 & 子网掩码
$$

$$
主机号 = IP地址 & 取反的子网掩码
$$

IP分类默认子网掩码
A类地址255.0.0.0
B类地址255.255.0.0
C类地址255.255.255.0

例如,

1
2
3
4
5
6
7
8
9
10
11
/* 获取网络地址 */
C类IP地址: 192.168.0.3 > 11000000 10101000 00000000 00000011
默认子网掩码: 255.255.255.0 > 11111111 11111111 11111111 00000000
两者进行与运算: 11000000 10101000 00000000 00000000
结果转换为十进制: 192.168.0.0
/* 获取主机号 */
C类IP地址: 192.168.0.3 > 11000000 10101000 00000000 00000011
默认子网掩码: 255.255.255.0 > 11111111 11111111 11111111 00000000
子网掩码取反: 00000000 00000000 00000000 11111111
两者进行与运算: 00000000 10101000 00000000 00000011
结果转换为十进制: 0.0.0.3

所以得到网络段为192.168.0.0,主机号为3

通过子网掩码可以将IP地址的网络号和主机号分离,可是为什么要这么做呢?这是因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机。路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。

image-20220529151840396

2.2 子网划分

我们知道可以通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址。形式如下:

image-20220529152503954
点击查看实例

假设对 C 类地址进行子网划分,网络地址 192.168.1.0,使用子网掩码 255.255.255.192 对其进行子网划分。C 类地址中前 24 位是网络号,最后 8 位是主机号,根据子网掩码可知从 8 位主机号中借用 2 位作为子网号

image-20220529153601100

由于子网有两位,所以子网的网络地址有4种,如下表所示:

子网号网络地址主机地址范围 广播地址
0192.168.1.0192.168.1.1~192.168.1.62192.168.1.63
1192.168.1.64 192.168.1.65~192.168.1.126 192.168.1.127
2192.168.1.128192.168.1.129~192.168.1.190192.168.1.191
3192.168.1.192192.168.1.193~192.168.1.254192.168.1.255

五、IPv6简介

1. 概述

前边所说的都是IPv4 的地址,它们是 32 位的,大约可以提供 42 亿个地址,但是早在 2011IPv4地址就已经被分配完了。但是 IPv6 的地址是 128 位的,这可分配的地址数量是大的惊人,号称可以为全世界的每一粒沙子编上一个地址。 IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,也就是说 IPv6 相比于 IPv4 能带来更好的网络体验,它有如下特点:

  • IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址。
  • IPv6 包头包首部长度采用固定的值 40 字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。
  • IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。

但是又不仅仅只有以上特点,还有的就我们自己再发现吧。

2. IPv6地址标识

IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 :隔开。如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 ::隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。例如,

1
2
3
4
5
6
7
8
9
/* IPv6二进制表示 */
1111 1110 1101 1100:1011 1010 1001 1000:
0111 0110 0101 0100:0000 0000 0000 0000:
0000 0000 0000 0000:0000 0000 0000 0000:
0000 0000 0000 0000:0011 0010 0001 0000
/* IPv6十六制表示 */
FEDC:BA98:7654:0000:0000:0000:0000:3210
/* IPv6十六制表示(省略0) */
FEDC:BA98:7654::3210

3. IPv6地址结构

IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的类别。IPv6 的地址主要有以下类型地址:

  • 单播地址,用于一对一的通信
  • 组播地址,用于一对多的通信
  • 任播地址,用于通信最近的节点,最近的节点是由路由协议决定
  • 没有广播地址
地址类别二进制 十六进制
环回地址0000 ... 0001(128位)::1/128
未定义地址0000 ... 0000(128位)::/128
唯一本地地址1111 110 ...FC00::/7
多播地址1111 1111 ....FF00::/8
链路本地单播地址 1111 1110 10 ...FE80::/10
全局单播地址其他其他