网络技术:IP 编址

IP 地址#

IP 地址是分配给 IP 网络中每台机器的数字标识符,IP 地址用于描述设备在网络中的地址。它让一个网络中的主机能够和另一个网络中的主机通信,同时它并不在乎这些主机所属的 LAN 是什么类型的。

层次型 IP 编址#

IPv4 地址长 32 位 (4 组 8 位二进制),这是一种结构化(层次型)地址。如果每个 IP 地址都是散乱分布且唯一的,则因特网上的所有路由器都需要存储所有主机和路由器接口的 IP 地址,这样会使得路由器的路由表异常庞大,难以查找,从而使转发分组面临巨大开销。因此将 IP 地址分为 2 个部分,分别是网络号主机号,网络号用于唯一地标识网络,主机号用于唯一地标识主机

IP 地址 :: =

根据网络号和主机号将 IP 地址划分为若干个固定类,主机号在它前面的网络号所指明的网络范围内必须是唯一的。你可以把 IP 地址和电话号码的区号进行一个类比,通过区号电话就知道要把信号转接到哪个区域,而电话号码就能具体的转接到对应的电话上。同理网络号用于表示主机所在的网络,这样路由器就知道大概往哪转发,而主机号就能具体地表示是这个网络中的哪台主机。

通过划分子网,在 IP 地址中又增加了一个“子网号”字段,使两级的 IP 地址变成为三级的 IP 地址。从主机号借用若干个位作为子网号,而主机号也就相应减少了若干个位。

IP地址 :: =

凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号和子网号找到目的子网,最后就将 IP 数据报直接交付目的主机。

特殊用途的 IP 地址#

保留地址#

网络号 主机号 作为 IP 分组源地址 作为 IP 分组目的地址 用途
全 0 全 0 × 本网络内表示本主机,路由表内表示默认路由
全 0 host-id × 本网络范围内表示某个特定主机
全 1 全 1 × 本网络范围内表示广播地址
net-id 全 0 × × 网络地址,表示一个网络
net-id 全 1 × 直接广播地址,对特定网络的主机进行广播
127 非全 0/1 用于本地软件的环回测试

私有地址#

私有 IP 地址是一段保留的 IP 地址,只使用在局域网中,无法在 Internet 上使用。

地址类型 保留的地址空间
A 类 10.0.0.0 ~ 10.255.255.255
B 类 172.16.0.0 ~ 172.31.255.255
C 类 192.168.0.0 ~ 192.168.255.255

IP 地址十进制转二进制#

计算方式#

IP 地址可以用点分十进制表示,也能使用二进制来表示,我们需要熟悉这 2 种表示法的转换方式。一种比较好算的转换方式是,由于 IPv4 是 4 组 8 位二进制,则 0 ~ 256 的二进制数可以认为是 128、64、32、16、8、4、2、1 这 8 个数的和差计算。这 8 个数字的二进制与十进制的转换如下:

十进制 二进制
128 10000000
64 01000000
32 00100000
16 00010000
8 00001000
4 00000100
2 00000010
1 00000001

样例一#

将 192.168.10.15 转换为二进制,结果为 11000000.10101000.00001010.00001111。

128 64 32 16 8 4 2 1 二进制
1 1 0 0 0 0 0 0 11000000
1 0 1 0 1 0 0 0 10101000
0 0 0 0 1 0 1 0 00001010
0 0 0 0 1 1 1 1 00001111

其转换关系为:

Copy Highlighter-hljs
192 = 10000000 + 01000000 = 11000000 168 = 10000000 + 00100000 + 00001000 = 10101000 10 = 00001000 + 00000010 = 00001010 15 = 00001000 + 00000100 + 00000010 + 00000001 = 00001111

样例二#

将 11000110.11010011.00111001.11010001 转换为十进制,转换结果为 198.211.57.209。

128 64 32 16 8 4 2 1 十进制
1 1 0 0 0 1 1 0 198
1 1 0 1 0 0 1 1 211
0 0 1 1 1 0 0 1 57
1 1 0 1 0 0 0 1 209

其转换关系为:

Copy Highlighter-hljs
128 + 64 + 4 + 2 = 198 128 + 64 + 16 + 2 + 1 = 211 32 + 16 + 8 + 1 = 57 128 + 64 + 16 + 1 = 209

IPv4 地址类型#

广播地址#

广播信息是发给广播域中所有主机的信息,它使用广播地址作为目标地址。广播地址表示网络中的所有节点,广播地址的主机号都为 1。例如对于网络 172.16.0.0/16,则它的广播地址就是 172.16.255.255。

单播地址#

单播地址是特定的网络接口卡的地址,用于将分组发送给单个目标的主机。使用单播地址,可以将分组传输到特定的主机上。

组播地址#

组播能让多个接收方接收消息,并且不会将消息传递给广播中的所有主机。组播地址用于将分组传输到不同网络中的众多设备,是一种一对多的地址。

CIDR 策略#

现在在全球因特网中,地址分配策略采用的是无类别域间路由选择 (CIDR)策略。CIDR 消除了传统 A、B、C 类地址和子网划分的概念,将子网寻址的概念一般化了。网络前缀可以是任意长度,融合子网地址和子网掩码可以更为方便地进行子网划分。当子网寻址时,32 bit 的 IP 地址的形式是 a.b.c.d/x,其中 x 指示了地址第一部分的比特数,构成了网络前缀。

IP 地址 ::=

网络前缀用于指明主机或路由器所连接到的网络,网络前缀在互联网中必须是唯一的。主机号用于标志主机或路由器,主机号在其所在的网络中是唯一的。CIDR 策略使得路由器转发分组时,可以往网络前缀相同的 IP 地址的区域发送,也就是缩小了发送链路的选择范围。因此采用 CIDR 策略提高了 IPv4 地址空间的分配效率,同时也提高了路有效率。
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,在查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由,也就是最长前缀匹配。网络前缀越长,其地址块就越小,因而路由就越具体。

IPv4 数据报#

字段 说明
版本 4 bit,IPv4 字段的值是 4
首部长度 4 bit,说明首部有多少 32 位字
服务类型 6 bit,使不同类型的 IP 数据报能相互区分
显式拥塞通告 允许在不丢弃报文的同时通知对方网络拥塞的发生
数据报长度 16 位,定义了报文总长
标识、标志、片位移 和 IP 分片有关
存活时间 占 8 位,避免报文在互联网中永远存在。
上层协议 占 8 位,指示数据部分应该交付给哪个指定的运输层协议
首部检验和 占 16 位,检验和字段只对首部查错
源地址、目的地址 报文的发送端、报文的接收端
选项 附加其他信息
数据 有效载荷

IPv6#

在 2011 年 2 月,IANA 向一个区域注册机构分配完了未分配的 IPv4 地址的最后剩余地址池。这些注册机构可用的 IPv4 地址一旦用完,IPv4 地址就会耗尽,因此IPv6 技术就被开始进行研发部署。

IPv6 数据报#

字段 作用
版本(version) 占 4 位,表示协议版本
流量类型(traffic class) 占 8 位,与 IPv4 的服务类型类似,区分不同的数据报
流标签(flow label) 占 20 位,用来标识一段数据报的流,能够对一个流中的某些数据报给出优先权
有效载荷长度(payload length) 占 16 位,给出了 IPv6 数据报出基本首部以外的字节数
下一个首部(next header) 占 8 位,当 IPv6 数据报没有拓展首部时,指明数据应当交付给哪一个上层协议;当出现拓展首部时,标识后面第一个拓展首部的类型
跳数限制(hop limit) 占 8 位,该字段类似于 IPv4 中的 TTL,每次转发跳数减 1,该字段达到0 时包将会被丢弃
源地址、目的地址(Address) 各占 128 位,标识该报文的来源和目的地

对比 IPv4#

IPv6 数据报相对于 IPv4 数据报有很多删减的地方,首先是 IPv6 数据报不允许在路由器上分片。这个操作只能在源和目的执行,如果中间遇到链路的 MTU 较小,路由器就直接丢包并向发送方发一个“分组太大”的 ICMP 报文。然后源就根据这个报文,把数据报分成更小的几个再重传。
首部校验和的问题,这个字段在 IPv6 中已经没了,因为在传输层、数据链路层协议中有很多协议都有具备错误检测的功能。而首部校验和因为有 TTL 等参数变化,计算的开销很大。因此把这个字段去除之后,也可以提升 IP 数据报转发的速度。
选项这个字段在 IPv6 中也没了,不过它的功能被归并到下一个首部字段中了。这种改动可以使得 IP 数据报的首部长度为定长,也就是 40 字节。

参考资料#

《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社

posted @   乌漆WhiteMoon  阅读(1303)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
CONTENTS