IP 协议
IP 协议是网络层的协议。
网络层负责地址管理和路由选择,主要负责网络中两个节点之间的路径规划。
IP 协议报头格式
IP 地址
IP地址就是用来标识一台主机在网络中的位置。
格式:
IP地址是一个32位的二进制数,4个字节,通过三个点隔开。
IP地址通常用点分十进制来表示,将每个字节转为10进制。
例如: 11000000.10101000.00000101.00000110
用点分十进制表示: 192.168.5.6
IP 组成:
IP 地址分为两个部分,网络号和主机号
- 网络号:标识网段,保证相互连接的两个网段具有不同的标识。
- 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
网络号,标识一个网段(局域网),同一个局域网中的设备,网络号一样,主机号不一样。
相邻的两个局域网的网络号不能重复。
如何划分网络号和主机号
- IP 地址分类
前缀用来区分类别,每个类别网络号和主机号长度都是固定的。
范围 | 适用网络 | 网络数量 | 主机最大连接数 |
---|---|---|---|
0.0.0.0 ~ 127.255.255.255 | 大型网络 | 126 | 16777214 (2^24 - 2) |
128.0.0.0 ~ 191.255.255.255 | 中型网络 | 约16000个 | 65534 (2^16-2) |
192.0.0.0 ~ 223.255.255.255 | 小型网络 | 254 (2^8-2) | |
224.0.0.0 ~ 239.255.255.255 | |||
240.0.0.0 ~ 247.255.255.255 |
这个分类方式不够灵活,会造成大量IP地址的浪费。例如,A类地址,可以连接的主机数为 16777214,实际上一个网段很少有这么多的设备,就算是B类地址,数量也有 65,534 个,而C类地址,只有254个地址,不够用。这个方式已经淘汰了,现在是用子网掩码的方式划分。
- 子网掩码
子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1
的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
左侧都是 1,右侧都是 0,不会出现混合的情况。
子网掩码也可以使用二进制所有高位1相加的数值来表示,如以上子网掩码也可以表示为24,表示 IP 地址前24位都是网络号。
特殊的 IP 地址
-
主机号全为 0 的 IP 地址,就是网络号,标识一个局域网
-
主机号全为 1 的 IP 地址,是广播地址。
向这个局域网发送UDP数据报(TCP不支持广播),这个数据报会被转发给这个局域网的所有主机 -
127.* 的 IP 地址是环回 IP,通常是 127.0.0.1 。
用于本机环回测试(本机与本机的网络通信),不会走网络的方式传输,速度更快 -
主机号为 1 的 IP 地址,一般作为网关IP(不强制,习惯上的行为),192.168.124.1 。
地址管理
IP 地址又来标识网络设备在网络中的位置。
32位的二进制数,IP 地址数量为 2^32, 大约 43 亿左右,这对全世界的网络设备来说,是不够用的。
如何解决 IP 地址不够用呢?
动态分配IP
主机需要上网才分配 IP,提高了 IP 地址的利用率,但是这个方案效果有限,不能完全解决问题。
NAT机制
主要依赖路由器的 NAT 功能。
将所有 IP 地址分为两大类:
内网IP:
10.*
172.16.* ~ 172.31.*
192.168.*
外网IP:其他 IP 地址
要求外网IP唯一,内网 IP 在不同的局域网中是可以重复的。
NAT 机制下如何通信:
外网设备 ==> 外网设备,不需要NAT,可以直接通信。
内网设备 ==> 内网设备,不允许通信。
外网设备 ==> 内网设备,不允许通信。
内网设备 ==> 外网设备,内网设备对应的路由器,触发 NAT 机制进行 源IP 替换,将数据包的 IP 替换为路由器的 IP(外网IP)。
这样,就能用一个外网,代表一个内网(局域网)中的所有设备,大大提高IP的利用率。
IPv6
上面说的 动态分配IP 和 NAT,只提高 IP 地址的利用率。而 IPv6 从根本上解决 IP 地址不够的问题。
IPv4,是传统的 IP 协议,用 4 个字节标识 IP 地址,能表示 IP 地址数量为 2^32。
IPv6,使用 16 个字节,128 位二进制标识 IP 地址。能表示 IP 地址数量为 2^128。
IPv6 能表示的 IP 地址数量 是 IPv4 能表示 IP 地址数量的 4次方,这个数量根本用不完。
但是 IPv6 并没有真正的启用,现在基本上还是用 IPv4。
要想使用 IPv6,需要升级硬件设备(路由器)。升级硬件设备成本比较高,而且IPv4 又不是不能用,动态分配IP + NAT 就能解决IP 地址不够用的问题。
但是我国 IPv6 的普及非常高,现在我们绝大部分的路由器都支持 IPv6,但是 IPv6 默认都是关闭的。
我国大力推进 IPv6的普及,是由于 IPv4 地址有限,而 IPv4 的地址分配是美国人负责的,我们要防患于未然,避免被卡脖子。
路由选择
网络上 主机A 给 主机B 传输数据,有很多条路径。
网络环境非常复杂,路由器无法将整个网络环境记录下来,路由器只能记录周围的网络设备,通过路由表这样的数据结构来记录。
所以 主机A 给 主机B 传输数据,无法直接确定一条路径,数据的转发过程,像问路一样,逐渐向 主机B 靠近,如果当前路由器不知道主机B 的位置,就会指出一条默认路径(路由表中的 “下一跳表项”),指向更上级的路由器,越上级的路由器,能记录的地址越多。
以太网
以太网既包含了数据链路层的内容,也包含了一些物理层的内容。
数据链路层主要关注两个相邻节点之间的数据传输。
以太网数据帧格式:
- 目的地址和源地址,指的是 MAC 地址。
- CRC 是校验和
- 类型,0800 是普通类型,用于数据传输,0806和8035 是特殊类型。
MAC 地址
MAC 地址,用于标识网络设备的硬件物理地址。
-
MAC地址,6个字节,比4个字节大6w多倍。
-
虽然 IPv4 不够用了,但是 MAC 地址还够用,MAC 地址与网卡绑定,每个网卡都有唯一的 MAC 地址,网卡在出厂时就写死了。
-
由于 MAC 地址是唯一的,并且写死与网卡绑定,所以 MAC 地址可以作为网络上身份标识的一种有效技术手段。
MTU
MTU 是数据链路层数据帧,载荷的最大长度。
- 以太网载荷的最小 46 字节,不够要在后面补填充位,最大是 1500 字节。
- 不同的数据链路层,对应不同的物理层(硬件设备),传输的上限不同,以太网对应的硬件设备是网线。
- 不同的数据链路层协议,MTU也不相同。
这是硬件限制。
如果传输的数据超过了 MTU,就会在网络层(IP 协议)将 IP 数据包进行分包。
分包和组包
这里分包和组包是 IP 协议完成的。
IP 协议报头中,有以下这几个字段,来完成分包 和 组包的工作。
- 将一个 IP 数据报拆成多个小报,它们的 标识 都是相同的
- 片偏移 表示这些小报的先后顺序。
- 3位标志位,第一位保留,第二位表示是否禁止拆包,如果禁止而且超过MTU,这个包会被丢弃,第三位是结束标志,最后一个包是1,其他的包为0。