1.3 IP 编址(网络层)

网络层位于数据链路层与传输层之间,网络层中包含了许多协议,其中最重要的就是 IP 协议。
网络层提供了 IP 路由功能。

1、上层协议类型

来次数据链路层的以太网帧中的 Type 字段值为 0x0800,表示该帧的网络层协议为 IP 协议。

2、IP 报头

1.3 IP 编址(网络层)
IP 报文头部

IP 报文头部信息用于指导网络设备对报文进行路由和分片。同一网段内的数据转发通过数据链路层即可实现(二层交换),而跨网段的数据转发需要使用网络设备的路由功能(三层转发)。分片是指数据包超过一定长度时,需要被划分成不同的片段使其能够在网络中传输。
IP 报头长度为 20 到 60 字节,报头中的信息可以用来指导网络设备如何将报文从源设备发送到目的设备。其中,版本字段表示当前支持的 IP 协议版本,当前的版本号为 4。DS 字段早期用来表示业务类型,现在用于支持 Qos 中的差分服务模型,实现网络流量优化。
源 IP 地址和目的 IP 地址是分配给主机的逻辑地址,用于在网络层标识报文的发送方和接收方。根据源和目的 IP 地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。
以上报头图示中,部分描述可能略有差异,如下:
IHL —— Header Length
Service Type —— DS Field
Packet Length —— Total Length
Options + Padding —— IP Option

3、IP 编址(特指IPv4)

IP 地址分为网络部分和主机部分。
IP 地址由 32 个二进制位组成,通常用点分十进制形式表示。
每个网段上都有两个特殊地址不能分配给主机或网络设备。第一个是该网段的网络地址,即该 IP 地址的主机位为全 0,表示一个网段。第二个是该网段中的广播地址,主机位为全 1。目的地址为广播地址的报文会被该网段中的所有网络设备接收。除网络地址和广播地址外,其它 IP 地址都可以做为网络设备或主机的 IP 地址。

4、二进制、十进制和十六进制

5、进制之间转换

6、IP 地址分类

IPv4 地址分类

IPv4 地址被划分为 A、B、C、D、E 五类,每类地址的网络号包含不同的字节数。A 类、B 类和 C 类地址为可分配 IP 地址,每类地址支持的网络数和主机数不同。
D 类地址为组播地址。主机收到以 D 类地址为目的地址的报文后,且该主机是该组播成员,就会接收并处理该报文。
各类 IP 地址可以通过第一个字节中的比特位进行区分。如 A 类地址第一字节的最高位固定为 0,B 类地址第一字节的高两位固定为 10,C 类地址第一字节的高三位固定为 110,D 类地址第一字节的高四位为 1110,E 类地址第一字节的高四位固定为 1111。

7、IP 地址类型

私有地址范围:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
特殊地址:
127.0.0.0~127.255.255.255
0.0.0.0
255.255.255.255
IPv4 中的部分 IP 地址被保留用作特殊用途。为节省 IPv4 地址,A、B 和 C 类地址段中都预留了特定范围的地址作为私网地址。为主机分配私网地址节省了公网地址,可以用来缓解 IP 地址短缺的问题。默认情况下,网络中的主机无法使用私网地址与公网通信,当需要时,私网地址必须转换成公网地址。
127.0.0.0 网段中的地址为环回地址,用于诊断网络是否正常。
0.0.0.0 是 IPv4 中的第一个地址,表示任何网络。
255.255.255.255 是 IPv4 中的最后一个地址,是 0.0.0.0 网络中的广播地址。

8、网络通信

源主机必须要知道目的主机的 IP 地址后才能将数据发送到目的地。源主机向其它目的主机发送报文之前,需要检查目的 IP 地址和源 IP 地址是否属于同一个网段。如果是,则将报文下发到底层协议进行以太网封装处理。如果目的地址和源地址属于不同网段,则主机需要获取下一跳路由器的 IP 地址,然后将报文下发到底层协议处理。

9、子网掩码与默认子网掩码

子网掩码用于区分网络部分和主机部分。每个 IP 地址和子网掩码一起可以用来唯一地标识一个网段中的某台网络设备。子网掩码中的 1 表示网络位,0 表示主机位。
每类 IP 地址有一个缺省子网掩码。A 类地址的缺省子网掩码为 8 位,B 类为 16 位,C 类为 24 位。子网掩码位数越长,支持的网络数越多,同时单个网络中的主机数量越少。

10、地址规划

通过子网掩码可以判断主机所属的网段、网段上的广播地址以及网络上支持的主机数。网段中支持的主机数为 2 的 n 次方个,n 为主机位的个数,减去本网段的网络地址和广播地址,可知该网段支持的有效主机个数为 2 的 n 次方 - 2。

11、有类 IP 编址的缺陷及变长子网掩码(VLSM)

如果网络中希望规划多个网断来隔离物理网络上的主机,使用缺省子网掩码就会存在一定的局限性。网络中划分多个网段后,每个网段中的实际主机数量可能很有限,导致很多地址未被使用。如 192.168.0.0/24 网段中只有 10 台主机,而另一网段 192.168.1.0/24 网段中只有 25 台主机。在这种情况下,使用缺省子网掩码折编址方案,则地址使用率很低,从而造成浪费。
使用变长子网掩码可解决上述问题。通过改变子网掩码,可以将网络划分为多个子网。

1.3 IP 编址(网络层)
VLSM 变长子网掩码

上图中,通过借用一个主机位做为网络位,借用的主机位变成子网位。一个子网位有两个取值 0 和 1,因此可划分成两个子网。该比特位设置为 0,则子网号为 0,该比特位设置为 1,则子网号为 128。将剩余的主机位都设置为 0,即可得到划分后的子网地址;将剩余的主机位都设置为 1,即可得到子网的广播地址。每个子网中支持的主机数为 2 的 7 次方 - 2(减去子网地址和广播地址),即 126 个主机地址。

12、无类域间路由 (CIDR)

CIDR:Classless Inter Domain Routing,无类域间路由突破了传统 IP 地址的分类边界,将路由表中的若干条路由汇聚为一条路由,减少了路由表的规模,提高了路由器的可扩展性。
CIDR 是基于 VLSM 来进行任意长度的前缀的分配的。它可以将多个连续的前缀聚合成超网,显示为一个聚合的网络,因此在总体上可以减少路由表的条目数目。

1.3 IP 编址(网络层)
CIDR 减少了路由表规模

如上图所示,一个企业分配到了一段 A 类网络地址,10.24.0.0/22。该企业准备把这些 A 类网络分配给各个用户群,目前已经分配了四个网段给用户。如果没有实施 CIDR 技术,企业路由器的路由表中会有四条下连网段的路由条目,并且会把它通告给其它路由器。实施了 CIDR 技术后,我们可以在企业的路由器上把这四条路由 10.24.0.0/24、10.24.1.0/24、10.24.2.0/24 和 10.24.3.0/24 聚合成一条路由 10.24.0.0/22。这样,企业路由只需通告 10.24.0.0/22 这一条路由,大大减小了路由表的规模。

13网关(Gateway)

网关是指接收并处理本地网段主机发送的报文并转发到目的网段的设备,即用来转发不同网段之间的数据包。
为实现此功能,网关必须知道目的网段的 IP 地址。网关设备上连接本地网段的接口地址即为该网段的网关地址。

14、IP 包分片

网络中转发的 IP 报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文就需要分割成若干个较小的片段后才能在链路上传输。将报文分割成多个片段的过程叫做分片。
接收端根据分片报文中的标识符(Identification)、标志(Flags)以及片偏移(Fragment Offset)字段对分片报文进行重组。
标识符用于识别属于同一个数据包的分片,以区别于同一主机或其它主机发送的其它数据包分片,保证分片被正解地重新组合。
标志字段用于判断是否已经收到最后一个分片。最后一个分片的标志字段设置为 0,其它分片的标志字段设置为 1,目的端在收到标志字段为 0 的分片后,开始重组报文。
片偏移字段表示每个分片在原始报文中的位置。第一个分片的片偏移为 0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。比如,如果首片报文包含 1259 比特,那么第二分片报文的片偏移字段值就应该为 1260。

15、生存时间(TTL)

报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会发生环路,导致报文在网络中无限循环,无法到达目的端。环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文的逐渐增多,网络将发生拥塞。
为避免环路导致的网络拥塞,IP 报头中包含一个生存时间 TTL(Time To Live)字段。报文每经过一台三层设备,TTL 值减 1。初始 TTL 值由源端设备设置。当报文中的 TTL 降为 0 时,报文会被丢弃。同时,丢弃报文的设备会根据报头中的源 IP 地址向源端发送 ICMP 错误消息。

16、协议号

目的端的网络层在接收并处理报文后,需要决定下一步对报文该做如何处理。IP 报头中的协议字段标识了将会继续处理报文的协议。与以太帧头中的 Type 字段类似,协议字段也是一个十六进制数。该字段可以标识网络层协议,如 ICMP(Internet Control Message Protocol,因特网控制报文协议),也可以标识上层协议,如 TCP(Transmission Control Protocol,传输控制协议,0x06)、UDP(User Datagram Protocol,用户数据包协议,0x11)。

分享