网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由

发布于:2025-06-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

1 IP 协议

1.1 IP 协议格式

2. 网段划分

2.1 网络号和主机号

2.2 传统 IP 地址分类和 CIDR 技术

2.3 特殊的 IP 地址

2.4 IP 地址的数量限制

2.5 私有 IP 和公网 IP

3. 路由


        网络层主要作用是实现不同局域网之间的通信连接,并为数据在复杂网络环境中的传输提供路径选择和逻辑寻址能力

1 IP 协议

        先介绍一下在网络通信中,主机、路由器、节点的概念。

        主机:配有 IP 地址但是不进行路由控制的设备

        路由器:即配有 IP 地址又能进行路由控制的设备

        节点:在网络通信中,由多个主机和路由器构成了复杂的拓扑结构,其中主机和路由器就是该网络拓扑结构中一个一个的节点。

        如下图所示,主机 B 要将数据传输到主机 C 需要经过多个路由器,主机 B 到主机 C 之间所经过的路由器构成一条路径,如何选择这条路径就是 IP 协议需要做的主要工作

1.1 IP 协议格式

        (1)4 位版本号(version):指定 IP 协议的版本,目前有 IPv4 和 IPv6,主流还是使用的 IPv4。对于 IPv4 来说,该字段为 4

        (2)4 位首部长度(header length): 表示该 IP 报文头部有多少个 4 字节的字段。因为只有 4 位,所以最大表示为 15,其中前 20 字节是必须有的,所以 IP 头部的大小范围为[20, 15*4 = 60] 字节。

        (3)8 位服务类型(Type Of Service):3 位优先权字段(已经弃用),4 位 TOS 字段以及 1 位保留字段(必须置为 0)。4 位 TOS 分别表示最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突, 只能选择一个。对于 ssh/telnet 这样的应用程序, 最小延时比较重要;对于 ftp 这样的程序,最大吞吐量比较重要。

        (4)16 位总长度(total length):IP 数据报整体占多少个字节。

       (5)16 位标识(id):用于标识主机发送报文的唯一性。如果上层协议(TCP/UDP)报文过大,超过了 MTU(最大传输单元),在被封装在 IP 数据报中时,会将上层报文分成若干个 IP 数据报,16 位标识用于标识该 IP 报文属于哪一个上层数据报

        (6)3 位标志字段:第一位保留,目前不使用;第二位为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。第三位表示“更多分片”,当置 0 时,表示该 IP 数据报为最后一个分片,其他情况置为 1,类似一个结束标记

        (7)13 位分片偏移(framegament offset):该字段表示的是分片相对于原始 IP 报文开始处的偏移。用于表示当前分片在原报文的哪个位置,实际偏移的字节数是该字段 * 8,因此,除了最后一个分片,其他分片的长度必须是 8 的整数倍。

        (8)8 位生存时间(Time To Live,TTL):数据报到达目标主机的最大跳跃节点数。一般是 64,每经过一个路由器,TTL 减 1,减到 0 还没到达,则丢弃报文。这个字段主要是用来防止出现路由循环的情况

        (9)8 位协议字段:表示上层的协议类型。

        (10)16 位首部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。

        (11)32 位源地址和 32 位目标地址:表示发送端和接收端的 IP 地址。

        (12)选项字段:不定长,最多 40 字节,此处不作介绍。

2. 网段划分

2.1 网络号和主机号

        IP 地址分为两个部分,网络号和主机号

        网络号:保证相互连接的两个网段(子网)具有不同的标识

        主机号:同一个网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

        如上图所示,上半张图主机的 IP 地址前半部分都是 192.168.128,叫做该网段的网络号(网络标识),表示这些主机属于同一个子网中, 在该子网中增加主机,则这台主机的网络号和该子网的其他主机网络号一致,但是主机号必须不能和子网中的其他主机重复。

        通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同。手动管理子网内的 IP 是一个相当麻烦的事情。

        有一种叫做 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),是一种基于 UDP 的应用层协议,主要是用于自动为网络中的设备分配 IP 地址及相关网络参数,避免手动配置的繁琐和地址冲突问题。通常由路由器或专用服务器担任。

        当一台主机接入网络之后,使用该技术使其自动获取 IP,断开网络之后 IP 地址可回收再利用。

2.2 传统 IP 地址分类和 CIDR 技术

        传统的 IP 地址分类方案是一种划分网络号和主机号的方案,把所有 IP 地址分为五类。

         A 类 0.0.0.0 到 127.255.255.255

        B 类 128.0.0.0 到 191.255.255.255

        C 类 192.0.0.0 到 223.255.255.255

        D 类 224.0.0.0 到 239.255.255.255

        E 类 240.0.0.0 到 247.255.255.255

        IP 地址在全球范围中是唯一的,上述的 IP 分类的本质就是规定一个 IP 地址多少位为网络号,多少位为主机号。但是这种方案有其局限性。

        例如申请一个 B 类地址(网络号相同的子网)子网,其在该子网中可以允许有 65000+(16位主机号) 台主机,A 类地址的子网内允许存在的主机数量会更多。

        但是在实际的网络架设中,不会存在一个子网内有这么多的情况,因此,一个子网中有大量的 IP 地址被浪费。

        针对这种情况提出了新的划分方案,叫做 CIDR(Classless Inter-Domain Routing,无类域间路由)。

        CIDR 是通过可变长度的子网掩码(VLSM)实现 IP 地址的灵活分配,并支持路由聚合(Route Aggregation)减少路由表条目。

        用 “IP 地址 / 掩码长度”(如 192.168.1.0 /24)表示 IP 地址,掩码长度 n 表示该 IP 地址的前 n 位为网络号,后面的位为主机号。CIDR 支持任意长度的子网掩码(1 ~ 31位),灵活配置不同规模的网络。

        如上图例 1 所示,IP 地址为 140.252.20.68,子网掩码为 255.255.255.0,那么将 IP 地址和子网掩码进行与运算,得到的结果就是网络号(网络号的长度和子网掩码一样)140.252.20.0,则该子网的网络地址为 140.252.20.0 ~ 140.252.20.255,该返回的 IP 地址都表示是该子网中的主机,该子网的网络规模就是 254(第一个和最后一个有特殊用途) 台主机。 

        如例 2 所示,子网掩码为 140.252.20.240,用 16进制表示就是 FF FF FF F0,则用前 28 位作为网络号,则该子网的规模就是 14 台主机。

2.3 特殊的 IP 地址

        将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表该局域网(子网)。

        将 IP 地址中的主机地址全部设为 1,就成为了广布地址,用于给同一个链路(子网)中相互连接的所有主机发送数据包。

        127.* 的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1。

2.4 IP 地址的数量限制

        IP 地址(IPv4)是一个 4 字节 32 的正整数。那么可以表示的 IP 地址大约 43 亿,而 TCP/IP 协议规定,每个主机都需要一个 IP 地址。那么全球一共最多只能有 43 亿的设备接入网络吗?答案是否定的。

        CIDR 技术只是提高了 IP 地址的利用率(减少 IP 地址的浪费),并没有对 IP 地址的绝对数量进行增加,所以 IP 地址对于现在的网络环境来说是不够用的,那么就诞生了三种方法来解决。

        (1)动态分配 IP 地址:只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网中得到的 IP 地址不一定是相同的。

        (2)NAT(Net Address Translation,网络地址转换) 技术:后续进行介绍。

        (3)IPv6:IPv6 并不是 IPv4 的升级版,这是两个互不相干的协议,彼此不兼容,IPv6 用 16 个字节 128 位来表示一个 IP 地址,但是目前 IPv6还没有普及。

2.5 私有 IP 和公网 IP

        如果一个组织(公司、学校等)组建局域网,IP 地址只用于局域网内的通信,而不是直接连到公网上,理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP地址只能是以下三种:
        (1)10.*:前 8 位是网络号,共 16,777,216 个地址。

        (2)172.16.* 到 172.31.*:前 12 位是网络号,共 1,048,576 个地址。

        (3)192.168.*:前 16 位是网络号,共 65536 个地址。

        在上述范围中的 IP 地址都称为私有 IP,其余的都为公网 IP所以在全球范围中,IP 地址分为两个部分,一部分为私有 IP,一部分为 公网 IP,私有 IP 可以重复,公网 IP 不可以重复

        如上图所示,全球的网络就是由一个一个子网嵌套式的组成在一起,最后通过一个路由器连入广域网中(公网)。

        路由器有两个主要的功能,一是进行地址转换,二是构建子网

        一个路由器可以配置两个 IP 地址,一个是 LAN 口 IP(子网 IP),一个是 WAN 口 IP(上级网络 IP)。 

        一般家用的主机,都是通过网线连在路由器的 LAN 口上,这表示这个主机属于该路由器构建的子网当中。

        在路由器构建的子网当中,路由器的子网 IP 通常都是 192.168.1.1,子网内的主机 IP 地址不能重复,且网络号都为 192.168.0.0。但是不在同一子网的主机 IP 地址可以重复。

        每一个路由器在网络中叫做一个节点,运营商就可以将这些节点分成很多层级,最外层的路由器叫做进出口路由器,WAN 口 IP 就是一个公网 IP

        子网内的主机需要和外部网络进行通信时,路由器将 IP 协议首部中 IP 地址进行替换(将 LAN 口 IP 替换为 WAN 口 IP),这样逐级替换,最终内网发出的数据包中的 IP 地址就被替换成了一个公网 IP ,这种技术成为 NAT(网络地址转换)

        如果想要将自己实现的服务器程序在公网上被访问到,就需要把服务器程序部署在一台具有 公网 IP 的服务器上,这样的服务器可以在阿里云/华为云等云服务器厂商进行购买。

3. 路由

        路由:网络设备(路由器等)根据数据包的目标 IP 地址,查询路由表并选择最优路径转发数据的过程。其本质时解决数据包从哪来到哪去的路径规划问题。

        如上图,路由的过程就是一跳一跳问路的过程,所谓的“一跳”具体就是在以太网中从源 MAC 地址到目的 MAC 地址之间的数据帧传输区间。 

        当一个数据帧到达路由器时,路由器会对其进行解包,提取其中的 IP 数据包,路由器先查看目的 IP,判断该数据包时直接发给子网中的目标主机,还是发给子网外的主机。如果是发送给子网外的主机时,路由器替换其中的源 IP 地址,然后封装成数据帧发送给外部网络

        路由表可以使用 route 命令查看。

        如上图,这台主机有两个网络接口,一个网络接口连接到 192.168.10.0/24 网络,另一个网络接口连接到 192.168.56.0/24 网络。

        Destination 是目的网络地址,Genmask 是子网掩码,Getway 是下一条地址, Iface 是发送接口。U 标志表示此条目有效,G 标志标识此条目的下一跳是某个路由器的地址,没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经过路由器转发。

        (1)转发过程例1:发送的数据包的目的地址是 192.168.56.3

        将目的 IP 依次从上到下与子网掩码进行运算。跟第一行子网掩码运算得到 192.168.56.0,与第一行的目的网络地址不符合,再跟第二行子网掩码运算得到 192.168.56.0,和第二行的目的网络相符,因此数据包从 eth1 接口发送出去。由于 192.168.56.0/24 网络通过 eth1 接口与主机直接相连,因此可以直接发送到目的主机,不需要路由器转发。

        (2)转发过程例2:发送的数据报的目的地址是 202.10.1.2

        依旧将目的 IP 从上到下与子网掩码运算之后与目的网络进行匹配,这时发现与前 3 个条目都不符合,就按缺省条目(default)从 eth0 接口发出去,发往 192.168.10.1(构建 192.168.10.0/24 子网的路由器),然后由 IP 地址为 192.168.10.1 路由器根据它的路由表决定下一跳地址。


网站公告

今日签到

点亮在社区的每一天
去签到