为思念酝酿的痛头像
关注
网络层IP协议详解:从子网掩码到局域网、公网地址区分封面图

网络层IP协议详解:从子网掩码到局域网、公网地址区分

目录

一、什么是IP协议

1.1 IP 的作用

1.2 IP 地址的构成

1.3 TCP vs IP

二、IP协议头格式

2.1 IP报头与有效载荷的分离

2.2 IP协议有效载荷的分用

三、IP网段划分*

四、IP地址的数量限制

五、公网IP地址和私网IP地址


一、什么是IP协议

在正式开始介绍IP协议之前,我们先要了解几个基本概念。

主机:配有IP地址,也要进行路由控制的设备;

路由器:既配有IP地址,又能进行路由控制;

节点:主机和路由器的统称;

IP协议分为IPv4和IPv6,下面我们主要讲解日常使用更广泛的IPv4协议。

1.1 IP 的作用

前面我们介绍的传输层协议,负责两台主机之间的数据交互。但两台主机无法直接把报文发给对方,中间要经过网络里多台路由器转发,报文会一跳一跳经过各个路由器,最终送达目标主机。

主机B可以直接和路由器F转发数据,就说明主机B与路由器F处于同一个子网。同理,能直接转发数据的相邻主机和路由器,必然属于同一子网。

那主机B向主机C发送数据,为什么只能走图里这条固定线路? 根源在于目的IP具备明确寻址指向,设备会依据目的IP完成路径挑选。IP协议的核心作用,就是跨不同子网完成路由选择,让报文跨网段转发。

1.2 IP 地址的构成

IP 地址拥有固定结构,IPv4 由 32 个二进制比特位组成。 IP 地址 = 目标网络号 + 目标主机号 发送数据时流程分为两步:先通过网络号找到目标网段,报文抵达目标子网后,再依靠主机号在内网转发给目标主机。

1.3 TCP vs IP

IP协议主要提供的是将数据从主机A跨网络,经过路径选择,路由转发,可靠地传送到主机B的能力。

而TCP协议只是一套可靠传输控制策略,而这套策略真正的底层传输,全部依靠IP协议来落地实现。

IP协议本身不具备任何可靠传输能力,报文丢失、乱序、损坏它都不会处理。所以传输过程中所有可靠性保障逻辑,全部由上层TCP协议来提供。

二、IP协议头格式

4 位版本号 (version): 指定IP协议的版本,对于IPv4来说,就是4。

4 位头部长度 (header length)。IP协议这里的4位首部长度与TCP协议的一致。IP字段也可以带上选项字段。一旦启用了选项字段,报头长度就会变为 20+n 字节(n为选项长度)。

而IP协议中为了兼容这种变长报头设计,在报头中专门设置了一个4 位首部长度字段

该字段取值范围为二进制0000~1111,对应十进制0~15。需要注意的是,这个字段的单位不是字节,而是4字节:写入数值时需要乘以4换算为实际字节长度,读取解析时需要除以4还原数值。

报头最小长度为20字节、最大长度为60字节,换算后首部长度字段的有效取值范围为5~15(20/4=5、60/4=15)。

IP 头部的长度是多少个 32bit, 也就是 length * 4 的字节数. 4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节。

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

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

16 位标识 (id): 唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。

3 位标志字段:第一位保留 (保留的意思是现在不用,但是还没想好说不定以后要用到). 第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU, IP 模块就会丢弃报文。第三位表示 "更多分片", 如果分片了的话,最后一个分片置为 0, 其他是 1. 类似于一个结束标记。

13 位分片偏移 (fragment offset): 是分片相对于原始 IP 报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是 8 的整数倍 (否则报文就不连续了)。

8 位生存时间 (Time To Live, TTL): 数据报到达目的地的最大报文跳数,一般是 64。数据包每经过一台路由器,TTL数值就会减 1,一旦减到0,路由器会直接丢弃该报文,并向源端返回 ICMP 超时报文, 一直减到 0 还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。

8 位协议:表示上层协议的类型。

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

2.1 IP报头与有效载荷的分离

由于IP协议中存在16位总长度用于记录整个报文的长度,而IP协议的报头又是固定20字节大小(不带选项),所以只要用总长度减去报头长度就是有效载荷的长度。这也就是为什么IP报文叫做IP数据报的原因。IP数据报里承载的有效载荷,就是从传输层传递下来的TCP/UDP报文

2.2 IP协议有效载荷的分用

IP协议头部存在一个名为Protocol的8位协议字段,这个8位协议号由发送方提前填写,该字段用于标识IP数据包载荷里封装的上层协议。路由器转发报文时只会解析源与目的IP完成转发,不会解析此字段,只有目标主机内核网卡协议栈会读取该字段,以此识别内部承载的数据属于哪一类上层协议。

收到报文后就能准确将完整IP包或分片数据向上交付给对应的传输层协议处理,例如承载 TCP 报文时 Protocol 填 6,承载 UDP 报文则填 17。下面就是一些常用的标准协议号:

协议号协议名称英文全称用途场景
0HOPOPTIPv6 Hop-by-HopIPv6 逐跳扩展头(IPv4 不使用)
1ICMPInternet Control Message ProtocolIPv4 网络控制、ping、差错报告
2IGMPInternet Group Management Protocol组播管理(视频直播、IPTV)
4IP-in-IPIP Encapsulation within IPIP 隧道封装(VPN 底层)
6TCPTransmission Control Protocol可靠传输:HTTP/HTTPS/FTP/SSH
8EGPExterior Gateway Protocol老旧外部网关路由协议(淘汰)
17UDPUser Datagram Protocol无连接:DNS/DHCP/ 流媒体 / 游戏
41IPv6IPv6 over IPv4 隧道6to4 隧道封装 IPv6 报文
47GREGeneric Routing Encapsulation通用隧道协议(企业 VPN)
50ESPEncapsulating Security PayloadIPsec 加密隧道
51AHAuthentication HeaderIPsec 完整性校验
58ICMPv6ICMP for IPv6IPv6 ping、邻居发现 NDP
88EIGRPEnhanced Interior Gateway Routing Protocol思科私有路由协议
89OSPFOpen Shortest Path First企业主流动态路由协议
112VRRPVirtual Router Redundancy Protocol网关冗余备份(双机热备)
132SCTPStream Control Transmission Protocol电信信令、5G、WebRTC

三、IP网段划分*

我们知道 IP 地址分为网络标识和主机标识。网段划分,就是把一个大的网络,切割成多个独立的小子网。而路由器的核心功能之一就是划分、构建子网。在日常生活中,当我们的手机连接WIFI时,本质就是接入路由器搭建的子网,连接完成后路由器会为手机分配一个该子网内可用的IP地址。

我们结合上面这张图来理解网段划分。IP地址分为网络标识和主机标识,/24表示IP前 24 位是网络标识。在同一个子网内,所有设备的网络标识都是一致,但主机标识不能重复;而被路由器隔开的不同网段,网络标识一定不相同。 图里路由器连接了两个子网,192.168.128.0/24和192.168.144.0/24,路由器分别在两个子网中各有一个IP(主机号一般为 1)。同一网段设备可以直接通信;而跨网段的数据,则依靠路由器完成转发。

那为什么要进行网段划分呢?

进行网段划分是为了让主机向目标主机发送数据时,路由器依靠网络号在公网中查找目标网段更加快捷。同时它还能隔离广播域,避免广播风暴。

网段划分的出现也能方便网络运维管理,并且可以实现不同网段之间的隔离,提升网络安全性。

那么路由器是如何进行网段划分的呢?

过去曾经提出一种划分网络号和主机号的方案——分类划分法(有类编址),即把所有 IP 地址分为五类,如下图所示:

  • A 类地址
    • 网络号占 8 位,主机号占 24 位
    • 最高位固定为0
    • 地址范围:1.0.0.0 ~ 126.255.255.2550127为特殊地址)
  • B 类地址
    • 网络号占 16 位,主机号占 16 位
    • 最高两位固定为10
    • 地址范围:128.0.0.0 ~ 191.255.255.255
  • C 类地址
    • 网络号占 24 位,主机号占 8 位
    • 最高三位固定为110
    • 地址范围:192.0.0.0 ~ 223.255.255.255
  • D 类地址
    • 最高四位固定为1110
    • 地址范围:224.0.0.0 ~ 239.255.255.255
    • 多用于组播通信
  • E 类地址
    • 最高四位固定为1111
    • 地址范围:240.0.0.0 ~ 255.255.255.255
    • 保留用于研究 / 测试

分类划分法强制将IP划分为 A、B、C三类固定大小网段,会造成巨大的IP地址浪费。这种方法导致没有中间档位可选,需求几百台设备的企业只能占用数万主机位的B类网段,绝大多数地址会被闲置,造成资源的浪费和加速IPv4地址的消耗。

正因为分类编址存在诸多问题,业界推出了一种名为无类CIDR网段划分的新方案。

这个方案引出了一个新的概念,叫做子网掩码。子网掩码的作用是区分 IP 地址中的网络号与主机号,它的二进制格式有固定规律:左侧连续全部为1,右侧连续全部为0。我们常写的/24前缀,对应的子网掩码二进制就是1111 1111 1111 1111 1111 1111 0000 0000。将 IP 地址和子网掩码做按位与运算,就能算出这台主机对应的子网网络地址。举个例子,IP 地址192.168.1.1与/24对应的子网掩码执行按位与运算,最终结果为192.168.1.0,这个地址就是该主机所在子网的网络标识。

而/24网段主机位共8比特位,十进制取值范围0~255,合计256个地址。其中主机位全部为0的是子网网络地址、主机位全部为1的是子网广播地址,这两个地址不能分配给终端设备使用,因此实际可分配给主机的地址数量为256-2=254。

IP地址和子网掩码还有一种更加简洁的表示方式,即192.168.1.1/24,表示IP地址位192.168.1.1,子网掩码的高24位为1,即255.255.255.0。

在CIDR无类网段划分体系下,网络号与主机号的划分和 IP 本身属于A、B、C哪一类地址没有任何关系。我们不再被固定的分类前缀束缚,可以自由自定义掩码位数,按需切分网络位与主机位,这也是它相比传统有类划分最关键的优势。

四、IP地址的数量限制

我们知道,IPv4地址是4字节共32位的数字,理论上总地址数量为2^32,大约43亿个。TCP/IP协议要求每一台接入网络的主机都配备IP地址,那是不是意味着全网最多只能接入43亿台主机?

答案是否定的。一方面,网络中存在诸如网段网络地址、广播地址、私网地址、保留地址等大量特殊IP无法分配给普通终端,实际可用的地址远远少于43亿;另一方面,IP 地址是以网卡为单位分配,一张网卡就能绑定一个或多个 IP,一台多网卡设备会占用多个 IP,这就会进一步加剧地址消耗。

CIDR无类划分虽然优化了地址分配方式,减少传统有类编址带来的地址浪费、提升 IP 利用率,但它只是更高效地利用现有32位地址池,并没有提升IP地址总上限,IPv4地址资源依旧紧张。目前主要依靠三种方案缓解地址枯竭的问题:

1.动态分配IP地址:借助 DHCP 仅为当前在线设备临时分配 IP,设备下线后地址回收复用,同一台设备每次上线获取的 IP 可能不同;

2.NAT网络地址转换技术:通过内网私网地址共享少量公网 IP 访问互联网,大幅减少对公网 IP 的消耗;

3.IPv6协议:IPv4与IPv6是两套相互独立、互不兼容的网络协议,不存在简单升级关系;IPv6采用 16字节128位地址空间,地址总量极其庞大,但现阶段全网普及度仍较低。

五、公网IP地址和私网IP地址

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连接到 Internet 上,理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址段:

1、10.0.0.0/8:10.0.0.0 ~ 10.255.255.255 前8位是网络号,共有16777216个地址

2、172.16.0.0/12:172.16.0.0 ~ 172.31.255.255 前12位是网络号,共有1048576个地址

3、192.168.0.0/16:192.168.0.0 ~ 192.168.255.255 前16位是网络号,共有65536个地址

这类私有地址不能在公网路由,只能在内网里面通信。而路由器具有搭建局域网的能力,设备接入路由器后会被分配RFC1918规范的私有内网 IP。但是内网主机如果想要访问互联网,就必须借助前面提到的NAT技术,把内网私有IP转换成公网IP进行报文收发,这也是家庭路由器上网的核心原理。

而不在这个范围内的IP我们才称作公有IP(全局IP)

路由器有两种IP,一种是LAN口的子网IP,一种是WAN口的公网IP。WAN口的公网IP用来连接广域网,和互联网上其他设备通信;LAN口的子网IP是内网网关IP,负责给局域网里的设备分配私有 IP,内网主机的流量都要经过这个网关,再由路由器做NAT转换,把内网私有IP替换成WAN口公网 IP,才能访问外网。

上图里接入广域网的这台运营商路由器,我们把它叫做出入口路由器。从图中可以观察到,路由器和主机之间构成一个局域网,路由器与路由器之间,同样也属于一个局域网。

路由器的WAN口和另一台路由器相连,它们处在同一个网段,本质上就是一个局域网。所以局域网不只是电脑和路由器组成的本地网络,路由器之间互联的网段,同样属于局域网。

所以我们家庭使用的局域网,大多选用192.168.0.0/16这个私有网段,也就是我们常看到的192.168.1.x;而运营商在地区层面搭建的大型局域网,一般会选用10.0.0.0/8这个 A 类私有网段,它的地址空间更大,适合接入大量路由器与设备。

也就是说,我们所有人都不可能直接连接公网。而是先连接到局域网当中,再通过局域网连接到公网。

而局域网的IP使用的私网IP地址是可以重复的,这也就大大缓解IP不足问题了!

在内网访问公网的过程中,报文每经过一个路由器,途经的路由器会把报文里的源IP替换成自身 WAN口IP。一旦报文进入公网之后,就不会再做源IP替换。这种IP替换的工作,只会在内网转发的环节执行,在公网中不会执行。而这种替换IP的技术,就是我们之前一直频繁提到的NAT技术

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/wairuigood/article/details/165725613

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--