IP 地址结构

作者: 小小小超子 | 来源:发表于2018-06-10 23:21 被阅读28次

查看原文

Internet 中使用的网络层地址,又叫 IP 地址。每一个连接到 Internet 的设备至少有一个 IP 地址。IP 地址标志了流量的来源和去向。

IP 地址的表示

IPv4

IPv4 地址本质上是 32 位二进制整数,通常用点分十进制表示:

点分十进制 二进制
0.0.0.0 00000000 00000000 00000000 00000000
1.2.3.4 00000001 00000010 00000011 00000100

IPv6

ipv6 地址长度为 128 位,被分为 8 个块表示,每个块包含 4 个十六进制数,块之间用 : 分隔。另外有一些规则:

  • 一个块中的前到 0 可以省略
  • 全块的 0 可以用 :: 代替。如:0:0:0:0:0:0:0:1 可以写成 ::1。另外 :: 只能使用一次,并且只能在 0 最多的地方用,如果有两个一样多连续 0 的地方,前者可以使用 ::
  • 在 ipv6 中嵌入 ipv4 地址可以使用混合符号形式。::ffff:10.0.0.1 可以表示 ipv4 地址 10.0.0.1。其中 ipv4地址紧邻 ffff,这被称为 ipv4 映射的 ipv6 地址
  • ipv6 地址低 32 位通常采用点分十进制,这被称为 兼容 ipv4 的 ipv6 地址

当 ipv6 地址和端口号一起使用时,: 可能造成歧义,所以用 [] 括起来:http://[::3333:22]:443/

基本的 IP 地址结构

IP 地址的分类

IP 地址中,被用于识别连接 Internet 或某些专用的内联网的计算机网络接口的地址,叫做单播地址,还有涉及多个接口或者有特殊用途的地址,包括广播、组播、多播地址。

分类寻址

单播 IP 地址都有一个网络部分和一个主机部分,分别被用来识别网络和网络中的主机。IP 地址呗分为如下五大类:

ip_class.png

更形象一点如图:

ip_class_pie_chart.png

但是要注意的是,每个网络里的主机号,全 0 和全 1 的不能被分配给某个主机。全 1 的作为这个子网的广播地址使用。

子网寻址

A 类地址的主机数量为 2^24 - 2,B 类地址的主机数量为 2^16 - 2,C 类地址为 2^8 - 2。实际上很难分配到一个大小合适的网络,于是在分类基础上加了子网的概念。

![subnet_mask.png](https://img.haomeiwen.com/i4642106/c02bf7f5606f7935.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如图,把一个 B 类地址的主机号 ‘借’ 出 8 位作为子网号的例子,这样把一个网络划分出来若干子网,以此来得到一个合适大小的网络。

子网掩码

为了能够从 IP 地址中知道主机号中哪些是子网号,哪些是主机号,使用了一个 32 位二进制的子网掩码。它的每一位和 IP 地址一一对应,子网掩码某一位为 1 代表对应 IP 地址那一位不是主机号。

写的时候为了简单,把 IP 地址和子网掩码 1 的位数写在一起,如:128.3.4.5/23

要注意,只有划分子网内部路由器和主机知道子网结构,在需要子网寻址之前,互联网其他部分仍把它作为站点相关的地址来看。来看一个例子:

subnet_example.png
可变长度子网掩码

Variable Length Subnet Mask, VLSM。在同一站点的不同部分,可以将不同长度的子网掩码应用于相同网络号。增加了配置的复杂性但是也提高了子网结构的灵活性。如图,三个不同掩码被用于 128.32.0.0/16 ,每个子网可以有不同数量的主机:

vlsm_example.png

CIDR 和聚合

划分子网缓解了增长带来的痛苦,但是随着互联网规模增长,路由表的条目数越来越多,路由性能受到影响。

前缀

为了缓解 v4 地址的压力,分类寻址采用了类似于 VLSM 的方案,无类别域间路由(Classless Inter-Domain Router, CIDR)。使用 CIDR,任何没有预定义的地址都可以作为同一个类的一部分,就是说,B 类地址和 C 类地址可以在同一个类。

注意,和普通子网掩码不同的是,CIDR 的掩码不仅限于一个站点,而是全球路由可见的。核心 Internet 路由器必须能够解释和处理 CIDR 掩码。 IP 地址加上一个 0~32 的数字,称为前缀,代表一个子网。

前缀 地址范围
0.0.0.0/0 0.0.0.0 ~ 255.255.255.255
128.0.0.0/1 128.0.0.0 ~ 255.255.255.255
128.0.0.0/24 128.0.0.0 ~ 128.0.0.255

聚合

前缀并没有解决路由表性能问题,但是可以把多条路由聚合成一条,以此减轻路由器压力。把网络拓扑排成一棵树,按照分层结构的思想来分配地址,可以在保证最短路由的情况下减少路由器路由条目。

下图是一个随意排布的、路由与位置无关的结构(a, 左图)和拓扑敏感的、位置与路由相关的结构(b, 右图),每个圆点代表路由器:

cidr_gather.png

两者最大的区别在于,a 中顶层路由节点为了能够路由到下面 8 个节点,需要储存 9 条(加上 other Parts 那一条)路由信息;而 b 中顶层节点只需要存储 3 条(同上)。

关键在于,b 把多条路由信息聚合成一条。聚合是把多个相邻的 IP 前缀合并成一个短前缀。

ip_gather.png

注意,只有连续的、数值相邻的地址才能被聚合,如果中间有一条地址不在此列,那么不能聚合。

特殊用途地址

IPv4 和 IPv6 转换

IPv4 和 IPv6 转换时,采用特殊地址,称为嵌入 IPv4 的 IPv6 地址,如下,IPv6 前缀必须是以下之一:

v4_to_v6.png

其中,63~71 对应的 U 必须为 0。

相关文章

  • IP 地址结构

    查看原文 Internet 中使用的网络层地址,又叫 IP 地址。每一个连接到 Internet 的设备至少有一个...

  • ip地址结构

    sockaddr 与 sockaddr_in 都是用于表示ip地址的结构(包含ip地址类型(ipv4/ipv6),...

  • 网络常用函数

    地址结构 ip地址转换相关函数

  • TCP IP详解卷1:协议(第二章Intenet地址结构)

    Intenet地址结构 2.2 表示IP地址 IP地址由二进制转换而来。...

  • 计算机网络基础-ip子网划分

    一.ip地址基本知识1.1 ip地址的结构和分类1.2 特殊ip地址1.3 子网掩码1.4 ip地址申请二.子网划...

  • Python网络编程1--实现ARP欺骗

    一、ARP报文结构    ARP(地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。报文结构 字段解...

  • IP编址

    1、IP报文的结构 IP地址用来标识网络中的设备,具有IP地址的设备可以在同一网段内或者跨网段通信。 IP地址分两...

  • 可用的不同类型的IP地址

    有几种不同类型的IP地址可用。尽管无论哪种类型,IP地址的结构都是相同的,但它们的作用不同。例如,您有公用IP地址...

  • Kotlin网络编程(2)网络基础

    网络结构客户端服务器结构网络 (C/S)对等结构网络 (P2P)TCP/IP 协议IP 地址端口 一、网络结构  ...

  • IP地址和子网划分之《IP地址》

    一、IP地址组成 IP地址也采用分层结构。IP地址由网络号与主机号两部分组成。网络号用来标识一个逻辑网络,主机号用...

网友评论

    本文标题:IP 地址结构

    本文链接:https://www.haomeiwen.com/subject/ppvqeftx.html