IP的作用类似物理世界中的地址,用于定位机器的位置。只不过物理的地址是文字描述,计算机世界的IP是一串二进制数,并且它是有一定约定和规则的。

下面我来学习关于IP的一些历史约定和规则。

IP地址格式

  • 4.4.4.4
  • 8.8.8.8
  • 114.114.114.114
  • 242.105.13.65
  • 102.32.175.117
  • 123.157.162.46
  • 255.255.255.255

这些用四个点.划分,且每个段的范围是 \(2^8\)(从0开始),这就是IP。

IP地址由两部分组成:

  • 网络部分 + 主机部分

为什么要分两部分?

网络ID的作用:

  • 识别网络:网络ID用于识别特定的网络或子网。
  • 路由:路由器使用网络ID来决定如何转发数据包。
  • 网络划分:帮助组织有效地管理和划分网络。

主机ID的作用:

  • 识别主机:在特定网络内唯一标识一台主机或设备。
  • 寻址:允许数据包准确地传递到网络内的特定设备。

分割的重要性:

  • 层次结构:创建了网络的层次结构,简化了互联网的组织。
  • 效率:提高了路由效率,路由器只需要关注网络ID,而不是每个单独的IP地址。
  • 灵活性:允许网络管理员根据需要灵活地分配和管理IP地址。

实际应用:

  • 当数据包从一个网络发送到另一个网络时,路由器只查看网络ID部分。
  • 一旦数据包到达目标网络,本地设备(如交换机)使用主机ID将其导向特定设备。

IP分类

IP转为二进制,根据判断前几位,设备就能判断这个IP是什么类的IP。

A、B、C类默认网络掩码:

  • A:IP/8
  • B:IP/16
  • C:IP/24

约定:

C类也叫C段。

为什么要IP分类?

这是一个很好的问题,涉及到了互联网发展的历史。IP地址分类(A、B、C、D、E类)是早期互联网设计的一部分,主要用于简化网络地址的分配和路由。让我为您解释一下:

  1. IP地址分类的历史背景:

    IP地址分类系统是在1981年通过RFC 791引入的,当时是为了更有效地分配和管理有限的IPv4地址空间。这个系统被称为"有类别寻址"(classful addressing)。

  2. 各类IP地址的特征:

    A类:

    • 第一位为0
    • 网络地址占8位,主机地址占24位
    • 范围:1.0.0.0 到 126.255.255.255
    • 适合大型网络

    B类:

    • 前两位为10
    • 网络地址占16位,主机地址占16位
    • 范围:128.0.0.0 到 191.255.255.255
    • 适合中型网络

    C类:

    • 前三位为110
    • 网络地址占24位,主机地址占8位
    • 范围:192.0.0.0 到 223.255.255.255
    • 适合小型网络

    D类:

    • 前四位为1110
    • 用于多播(multicast)也叫组播,无子网掩码
    • 范围:224.0.0.0 到 239.255.255.255

    E类:

    • 前五位为11110
    • 保留用于未来或实验用途
    • 范围:240.0.0.0 到 255.255.255.255
    • 255.255.255.255 作为广播地址
  3. 历史作用:

    • 简化地址分配:便于Internet号码分配机构(如IANA)管理和分配IP地址。
    • 简化路由:路由器可以根据IP地址的前几位快速确定网络类别。
    • 灵活性:不同类别适合不同规模的网络。
  4. 局限性:

    随着互联网的快速发展,这种分类方法显现出一些问题:

    • 地址空间浪费:特别是A类和B类网络中,很多地址未被充分利用。
    • 缺乏灵活性:难以适应中等规模的网络需求。
  5. 发展:

    为了解决这些问题,后来引入了无类别域间路由(CIDR)和网络地址转换(NAT)等技术,使IP地址的分配和使用更加灵活和高效。

    虽然现在我们主要使用CIDR,但了解IP地址分类仍然对理解网络历史和某些遗留系统有一点帮助,主要吹牛时用,不至于不知道别人说什么。

总结:

古老的IP分类——有类网络已经被抛弃了,现在是NAT + CIDR的 无类网络 时代。

CIDR 和 子网掩码介绍

CIDR(Classless Inter-Domain Routing)是一种用于表示IP地址和其相关子网掩码的方法。格式为:IP地址/前缀长度,在介绍CIDR 之前先认识子网掩码

用Windows系统的朋友,对这个图肯定很熟悉吧:

子网掩码(Subnet Mask)又叫网络掩码、地址掩码,必须结合IP地址一起对应使用。

子网掩码的组成:

  1. 同IP地址一样,子网掩码是由长度为32位二进制数组成的一个地址。
  2. 子网掩码32位与IP地址32位相对应,IP地址如果某位是网络地址,则子网掩码为1,否则为0。
  3. 举个栗子:如:11111111.11111111.11111111.00000000

    注:左边连续的1的个数代表网络号的长度,(使用时必须是连续的,理论上也可以不连续),右边连续的0的个数代表主机号的长度。

子网掩码的作用:

  • 只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作
  • 子网掩码和IP地址做“与”运算,分离出IP地址中的网络地址和主机地址,用于判断该IP地址是在本地网络上,还是在远程网络网上。

关注到:

子网掩码可以分离出IP地址中的网络地址主机地址

为什么要分离出网络地址、主机地址有什么用?

  1. 因为两台主机要通信,首先要判断是否处于同一网段,即网络地址是否相同;

  2. 如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。

    在如下拓扑图示例中,A与B,C与D,都可以直接相互通信(都是属于各自同一网段,不用经过路由器),但是A与C,A与D,B与C,B与D它们之间不属于同一网段,所以它们通信是要经过本地网关,然后路由器根据对方IP地址,在路由表中查找恰好有匹配到对方IP地址的直连路由,于是从另一边网关接口转发出去实现互连。

子网掩码的的表示方法:

  • 点分十进制表示法

    二进制转换十进制,每8位用点号隔开

    例如:子网掩码二进制11111111.11111111.11111111.00000000,表示为255.255.255.0

  • CIDR斜线记法

    IP地址/n

    也可以理解为:IP地址/前缀长度

    • 例1:192.168.1.100/24,其子网掩码表示为255.255.255.0,二进制表示为11111111.11111111.11111111.00000000
    • 例2:172.16.198.12/20,其子网掩码表示为255.255.240.0,二进制表示为11111111.11111111.11110000.00000000

      不难发现,例1中共有24个1,例2中共有20个1,所以n是这么来的。运营商ISP常用这样的方法给客户分配IP地址。

示例:

1表示网络地址,0表示主机地址

CIDR: IP/8

二进制:11111111.00000000.00000000.00000000

十进制:255.0.0.0

CIDR: IP/16

二进制:11111111.11111111.00000000.00000000

十进制:255.255.0.0

CIDR: IP/24

二进制:11111111.11111111.11111111.00000000

十进制:255.255.255.0

CIDR的优势:

  • 灵活性:允许更精细的子网划分。
  • 效率:相比传统的A、B、C类地址分类,可以更有效地利用IP地址空间。

NAT+公网、私网地址

IPv4只有43亿个地址,远远不能满足全世界的网络需求,

通过配置NAT + CIDR,区分公网地址和私网地址,巧妙地解决了这个问题。

公网和私网IP地址的区分是网络管理中的一个重要概念。让我为您详细解释:

  1. 公网IP地址:

    • 定义:公网IP地址是在全球互联网上唯一的地址,可以直接访问互联网。
    • 分配:由互联网服务提供商(ISP)或地区互联网注册机构(RIR)分配。
    • 特点:全球唯一,可以直接在互联网上路由。
  2. 私网IP地址:

    • 定义:私网IP地址是在局域网内部使用的地址,不能直接访问互联网。
    • 分配:由网络管理员在局域网内分配,或通过DHCP自动分配。
    • 特点:可以在不同的局域网中重复使用。
  3. 私网IP地址范围:

    根据RFC 1918,以下IP地址范围被保留用于私网:

    私有地址范围 CIDR表示法
    A 10.0.0.0 ~ 10.255.255.255 10.0.0.0/8
    B 172.16.0.0 ~ 172.31.255.255 172.16.0.0/12
    C 192.168.0.0 ~ 192.168.255.255 192.168.0.0/16
  4. 如何区分:

    • 地址范围:如果一个IP地址落在上述私网地址范围内,它就是私网IP。
    • 网络设置:查看设备的网络设置可以确定IP地址类型。
    • 在线工具:有许多在线工具可以帮助判断一个IP是公网还是私网。
  5. 使用场景:

    • 私网IP:用于家庭、办公室或企业内部网络。多台设备可以共享一个公网IP。
    • 公网IP:用于需要直接访问互联网的服务器、网站托管等。
  6. NAT(网络地址转换):

    • 私网设备通过NAT技术,使用路由器的公网IP访问互联网。
    • NAT允许多个私网IP共享一个公网IP,提高了IP地址的利用效率。

  7. 安全性:

    • 私网IP提供了一定程度的安全性,因为它们不能直接从互联网访问。
    • 公网IP更容易受到直接的网络攻击,因此需要更严格的安全措施。

CIDR 与 VLSM

上面铺垫了那么多,其实重点就是要讲清楚CIDR 与 VLSM这两个概念。

VLSM —— VLSM(Variable Length Subnet Mask,可变长子网掩码),更好理解的词:子网划分,规定了在一个有类(A、B、C类)网络内包含多个子网掩码的能力,以及对一个子网的再进行子网划分的能力,作用是:提升IP的利用率、实际使用率。

VLSM:子网掩码往右边移,掩码netmask增长。



上图的局域网也就两台机器,要是使用192.168.10.240/24 就有256-2 = 254 个可用IP,有点浪费了。划分成 192.168.10.240/30 ,子网/30的可用IP是4个,减去2个(一个网络号,一个广播号),就刚好只剩下2个,就没有造成浪费。

CIDR —— CIDR(Classless Inter-Domain Routing,无类别域间路由),更好理解的词: 路由聚合或者 超网。CIDR本质是消除了传统的A类、B类和C类地址以及划分子网的概念,将多个地址块聚合在一起生成一个更大的网络,从而包含更多的主机。

CIDR:子网掩码往左边移,掩码netmask缩短。



在A路由器上,就有4个路由表,把它聚合成一张路由表,传递到路由器B,减少路由B的压力,作用是为了减少骨干路由器的压力。

CIDR与VLSM总结:

在某种程度上来说,CIDR和VLSM它们之间可以看做是逆过程,CIDR是聚合(找多个路由表的相同的位数,然后把相同位数的求出来)、VLSM是切分(找到划分的界限,划分下去,需要考虑-2)。

VLSM 子网划分案例

一个子网划分的案例:

将 192.168.1.0/24这个C类地址进行子网划分,网络位向主机位借1位:

那么将划分出子网1——192.168.1.0/25

当我们借用一位进行子网划分时,这一位成为了区分两个子网的关键

在二进制中,这一位可以是0或1,因此产生了两个子网。

那么将划分出子网2——192.168.1.128/25

这种划分方法允许我们创建两个大小相等的子网,每个子网可以容纳126个主机。

这在需要将一个大网络分割成两个较小网络的情况下非常有用。

练习

  • 例2:计算一下 172.16.1.0/27 这个子网的网络号、广播号、以及可用IP地址?

Reference

6--10VLSM子网划分

https://www.bilibili.com/video/BV1pY411P7tU/

6-11CIDR无类域间路由

https://www.bilibili.com/video/BV1vR4y1K7Ge/

IP协议学习笔记的更多相关文章

  1. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  2. tcp/ip协议学习笔记一

    一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...

  3. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  4. HTTP协议学习笔记(四)

    HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...

  5. HTTP协议学习笔记(三)

    HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...

  6. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  7. HTTP协议学习笔记(二)

    HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...

  8. HTTP协议学习笔记(一)

    HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...

  9. [TCP/IP] 学习TCP/IP协议的笔记

    1.我看的视频是https://www.bilibili.com/video/av10610680?from=search&seid=1733008388243131444这位大大的视频讲解. ...

  10. TCP/IP协议精华笔记

    1.简介 TCP/IP协议并非单指TCP协议.IP协议,它是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议.ICMP(Internet Control Mes ...

随机推荐

  1. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  2. python基础环境

    刚开始接触并学习一门开发语言,带着不求甚解的想法,其实也挺有好处的:我并不是所有的东西都知道,但是代码跑起来了. 但是时间久了,还是带着这种想法,可能就会遇到一些棘手的问题.比如电脑上不知不觉已经安装 ...

  3. 简单 python 爬虫(爬取小说网)

    #https://blog.csdn.net/Isana_Yashiro/article/details/84582946 import requestsfrom bs4 import Beautif ...

  4. IceRPC之多路复用传输>快乐的RPC

    作者引言 很高兴啊,我们来到了IceRPC之多路复用传输>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界. icerpc 和多路复用传输 了解 icerpc 协议和多路复用 ...

  5. EL表达式与JSTL简单入门

    更多博文请关注:听到微笑的博客 EL概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写. 简单来说EL表达式 ...

  6. 纯css+html+js模仿elementui组件

    文件下载链接地址https://files.cnblogs.com/files/ht955/UIcomponents.zip?t=1717405975&download=true

  7. 引用数据类型string字符串 类型转换

    String 任何" "之间的值 包括空格 String类型的字面取值 String str1 = "你好" String str2 = "hello ...

  8. 【简写Mybatis-02】注册机的实现以及SqlSession处理

    前言 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想: 通过设问方式来体现代码中的思想:方法:5W+1H 源代码: https://gitee.com/xbhog/mybatis- ...

  9. 解读surging 的内存过高的原因

    前言 对于.NET开发人员来讲,一个程序占用内存过高,是极其糟糕,是一款不合格的程序软件,.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站 ...

  10. linux入门篇:查看系统用户信息,以及修改用户密码

    From https://blog.csdn.net/dieyong/article/details/86578472 1 用户列表文件$ cat /etc/passwd 2 用户组列表文件$ cat ...