当前位置: 首页 > news >正文

网络层协议 --- IP

序言

 在这篇文章中我们将介绍 IP协议,经过这篇文章的学习,我们就会了解运营商到底是如何为我们提供服务的以及平时我们所说的内网,公网到底又是什么,区别是什么?

IP 地址的基本概念

1. IP 地址的定义

 每一个设备接入互联网时,都会被分配一个或多个唯一的 IP 地址,用于在网络上设别和定位该设备。这句话放在学习本章内容之前肯定是没问题的,但是在认识了 NAT 技术之后就要打个问号了。
IP 地址(IPv4 地址)由 32 位二进制数(8个字节)来表示:
在这里插入图片描述

但是这种表示方式非常不便于我们阅读比较,于是将每一个字节以十进制数表示:
在这里插入图片描述

现在看起来舒服多了,为了避免数字混淆在一起,最后加上 . 来分割:
在这里插入图片描述
这就变成了我们熟悉的表达方式了,便于我们查看以便于我们和其他的 IP 比较。

2. IP 地址的分类

 为了更好地适应不同网络规模、主机数量以及特殊应用需求,国际网络组织将 IP 分成了五类,分别是:
在这里插入图片描述

💡知识补充:网络号就像你的班级号,主机号就像你在你班级里面的序号一样。

D,E 类主机,前者多用于多播通信(比如直播,视频通信,在线游戏等场景),后者为将来使用保留的地址,两者都不属于今天的讨论范畴之内。

 不同类的网络所能容纳的主机数目也是大相径庭的,如下图:

类别所能容纳最大主机数
A16,777,214
B65,534
C254

是怎么计算的呢?我们所计算的结果是一个类型的网络在同一个网络下(网段相同)所能容纳最大主机数:2 ^ (主机号) - 2。咦,你在这里为什么要减 2 呀?

就拿 C 类网络举例吧,现在一个 C 类网络的网络号是:

他能表示的主机号的范围是:
在这里插入图片描述
但是请记住,这里存在两个十分特殊的主机号,主机号全为 1 和 全为 0 地址。

  • 主机号全为 1 指定某个网络下的所有主机,用于广播
  • 主机号全为 0 指定某个网络

 这样的分配在当初看来是没有什么大问题的,但是现在弊端慢慢显现出来了。为什么呢?特别是 A 这种划分方式在小型网络中显得过于浪费,因为即使一个网络只有几十台主机,也需要分配一个 A 类地址,导致大量的IP地址资源被闲置‌。现在本来就 IP 短缺


CIDR 技术

 为了解决 IP 分类中存在的利用率不高的问题,提出了 无分类地址 CIDR 的技术。但是请记住,这个技术只是 提高了 IP 的利用率,本质是 IP 还是存在缺乏的问题。
 这个技术的亮点我认为是将 定长的网络号 变得灵活起来,他引入了 子网掩码(subnet mask) 来区分网络号和主机号,具体的表示方式为:

  • 将子网掩码和 IP 地址按位计算 AND,就可得到网络号,比如:在这里插入图片描述
    网络号 = 10.201.111.197 & 255.255.0.0 = 10.201.0.0

  • 还有一种表达方式为:a.b.c.d/x。在这里的 a.b.c.d 代表 IPx 代表前 x 位是网络号

这样的网络号更灵活,我们可以在现有的 A,B 类网上进行更加精细的划分子网,使 IP 得到充分地使用。


私有 IP 地址和公网 IP 地址

 通常遇到不会的问题,我们一般都可以通过三联问:这是什么?为什么?怎么样?来解决问题。在这里我们也采取这样的方式。

1. 这是什么

 私有 IP 地址是指在私有网络中使用的 IP 地址,这些地址仅在私有网络内部使用,不能在公共网络(如互联网)上路由。
 使用私有 IP 地址可以节省并优化公共 IP 地址的分配和使用。不同的私有网络下 私有 IP 是可以重复的
 如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上, 并且规定了用于组建局域网的私有 IP 地址:

10.*,前 8 位是网络号,共 16,777,216 个地址
172.16.*到 172.31.*,前 12 位是网络号,共 1,048,576 个地址
192.168.*,前 16 位是网络号,共 65,536 个地址

包含在这个范围中的, 都成为私有 IP, 其余的则称为全局 IP(或公网 IP)。

2. 为什么需要私有 IP

 为什么需要私有 IP ,很显然是 IP 不够用了。我们简单计算一下,IPV4 所能最大容纳的 IP 数量是 42亿左右,但是大家可以通过下述的数据可以看到:
在这里插入图片描述
早就不够用了,CIDR 方式只是提高使用率,治标不治本。

3. 怎么样工作的

 现在知道了他产生的原因,现在我们需要知道他为什么可以做到?
在这里插入图片描述

 这是一个很简单的网络结构图,我们的家庭路由器直接就连上了运营商服务器。但是实际情况要复杂的多,比如你家的路由器会先接上小区的路由区,再连上区里的,市里的,省里的…最后再到运营商的服务器。

 你需要上网,也就是你需要一个 IP 地址,这才能向你发送数据。但是我们并没有去手动的配置一个呀。没关系,当你连上你家的路由器时,他自动的给你分配一个 IP 地址。路由器会对每个连上他的设备都执行该操作,这叫构建子网。这种技术叫做:DHCP,能够自动的给子网内新增主机节点分配 IP 地址,避免了手动管理IP的不便。

 一般家用的路由器都是采用第三种私有 IP,因为你家连接数很少嘛。好的,现在,你家有网,我家也有网,请问我们的网络号会相同吗?答案是我们都是家用的路由器,最终构建的子网网络号是一样的,甚至我们的 IP 都可能完全一样。因为家里使用的人很少,所以我们相同的概率就大了。

 好的,现在我的问题又来了,既然我们的 IP 都可能是一样的,并且 IP 不是在网络上唯一的标识符吗,那么我们的身份不会混淆出错吗?所以我们规定 私网 IP 不能出现在公网上就是这个原因,那我们怎么上网的呢?答案是:NAT(Network Address Translation,网络地址转换)是一种将私有网络地址(如局域网内部地址)转换成公共网络地址(如互联网地址)的技术。

 总结来说,就是你家的路由器会自动构建子网,不同私网下的 IP 是可以重复的,这节省了公共 IP 资源。最终通过 NAT 技术来保证你可以正常接发数据。


NAT 技术

1. NAT 技术原理

NAT 技术通过将私网 IP 转化为公网 IP 的方式,缓解了 IP 耗尽的问题,但是大家仔细想一下,会发现这有一个漏洞:
在这里插入图片描述
在这里假如主机 A 想要访问公网,当他的报文经过路由器时,会将他的源地址(内网地址)转化为一个公网 IP,并且记录在 NAT 表中(该表用于记录地址转换的映射关系)。当外部想要给内网中的设备发送消息时,就会根据该表的转换拿到目的内网中的设备。

 但是如果我这里有三个设备想要访问外网呢,也转化为三个外网地址吗?这也没节省公共 IP 地址呀。以这样的方式确实不能解决问题,肯定不能这样。大家想一下,我们一般都是采取 IP + 端口 的方式来进行通信,所以我们将该子网下的所有设备通用一个公共 IP,并且使用端口来区别每一次不同的通信:
在这里插入图片描述

2. NAT 技术的缺陷

  • 无法从外到内,很多的联网服务都是需要大家先登录才能正常使用,因为你登陆的过程也是你向该服务器发送数据的过程,才构建了一条从你的内网到外网的路径。
  • 通信过程中,如果 **NAT** 路由器重启了,所有的 **TCP** 连接都将被重置。为什么没有 UDP 呢,它不受影响吗?这是因为 UDP 是面向无连接的协议不依赖于连接状态。

网段划分

1. 什么是网段划分

 网段划分,简单来说,就是将一个大的 IP 地址空间分割成多个小的、独立的地址段。这通常通过子网划分(Subnetting)来实现,即利用子网掩码将 IP 地址分为网络部分和主机部分。 让我们网路细粒度更高,更好的被利用,避免出现闲置的情况。

2. 为什么需要网段划分

 除了提高 IP 的利用率之外,更重要的更好的进行管理,举个例子吧:大家在学校肯定都有学号吧,学号可不是随机生成的一串数字,他的每一个字段都包含着自己的含义。比如,哪个年级的,哪个学院的,哪个专业的,哪个班的,第几号。现在你在操场是捡到一个钱包,里面就有失主的学号信息,如果学号没有意义的,我们只能遍历整个学校的学生。但是该学号有着详细的信息,帮助我们快速的找到失主。
IP 不是也是如此吗,当发出信息时,计算机会首先检查目标 IP 地址是否在当前网段内。如果目标IP地址与本地网络地址在同一子网内,则数据包将直接在本地网络中传输。然而,如果目标 IP 地址不在当前网段内,计算机会将数据包发送到默认网关(通常是路由器)。路由器会查看其路由表,以确定如何将数据包转发到目标网络。路由表包含了不同网络之间的路径信息,路由器会根据这些信息将数据包发送到下一个路由器,直到数据包到达目标网络。


总结

 这篇文章快结束了,请问大家一个问题,运营商怎样给我们提供服务的:

  • 首先最基本的通信设备,没有光纤,路由器,服务器等基础设施,没有这些设备就没有最基本的通信环境
  • 数据传输,我们每天网络上传输的数据都是在人家的线路上传输

所以总结就是,此山是我开,此树是我栽,要想过此路,留下过路财😂。

相关文章:

网络层协议 --- IP

序言 在这篇文章中我们将介绍 IP协议,经过这篇文章的学习,我们就会了解运营商到底是如何为我们提供服务的以及平时我们所说的内网,公网到底又是什么,区别是什么? IP 地址的基本概念 1. IP 地址的定义 每一个设备接入…...

Java虚拟机(JVM)介绍

**Java虚拟机(JVM)**是Java平台的核心组件,它提供了一个运行时环境,使得Java程序可以在不同的操作系统和硬件平台上运行而无需修改。 JVM的架构 JVM主要由以下几个部分组成: 类加载器(Class Loader&#xf…...

1000题-计算机网络系统概述

术语定义与其他术语的关系SDU(服务数据单元)相邻层间交换的数据单元,是服务原语的表现形式。在OSI模型中,SDU是某一层待传送和处理的数据单元,即该层接口数据的总和。 - SDU是某一层的数据集,准备传递给下一…...

Authentication Lab | IP Based Auth Bypass

关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客 0x01:IP Based Auth Bypass 前情提要 有些开发人员为了图方便,会给站点设置一个 IP 白名单,如果访问站点的用户的 IP 在白名单内,则允许访…...

linux中的火墙优化策略

1.火墙介绍 1. netfilter 2. iptables 3. iptables | firewalld 2.火墙管理工具切换 在rocky9 中默认使用的是 firewalld firewalld -----> iptables dnf install iptables - services - y systemctl stop firewalld systemctl disable firewalld systemctl mask fi…...

GO网络编程(三):海量用户通信系统1:登录功能初步

一、准备工作 需求分析 1)用户注册 2)用户登录 3)显示在线用户列表 4)群聊(广播) 5)点对点聊天 6)离线留言 主界面 首先,在项目根目录下初始化mod,然后按照如下结构设计目录: 海量用户通信系统/ ├── go.mod ├── client/ │ ├──…...

Windows安全加固详解

一、补丁管理 使用适当的命令或工具&#xff0c;检查系统中是否有未安装的更新补丁。 Systeminfo 尝试手动安装一个系统更新补丁。 • 下载适当的补丁文件。 • 打开命令提示符或PowerShell&#xff0c;并运行 wusa.exe <patch_file_name>.msu。 二、账号管…...

JavaScript函数基础(通俗易懂篇)

10.函数 10.1 函数的基础知识 为什么会有函数&#xff1f; 在写代码的时候&#xff0c;有一些常用的代码需要书写很多次&#xff0c;如果直接复制粘贴的话&#xff0c;会造成大量的代码冗余&#xff1b; 函数可以封装一段重复的javascript代码&#xff0c;它只需要声明一次&a…...

云RDS MySQL迁移至本地MySQL

本地准备工作 1.安装:percona-xtrabackup 上传percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz包到/usr/local tar -zxvf percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz mv percona-xtrabackup-2.3.9-Linux-x86_64 percona-xtrabackup 2.创建数据目录 cd /data/ mkdir rds-mys…...

【C++ 11】nullptr 空指针

文章目录 【 0. 问题背景 】0.1 野指针和悬空指针0.2 传统空指针 NULL0.3 传统空指针的局限性 【 1. 基本用法 】【 2. nullptr 的应用 】2.1 nullptr 解决 NULL 的遗留BUG2.2 简单实例 【 0. 问题背景 】 0.1 野指针和悬空指针 总结 野指针悬空指针产生原因指针变量未被初始…...

Flutter + Three.js (WebView)实现桌面端3d模型展示和交互

文章目录 flutter(桌面端)瓶颈一、Flutterthree.js二、Flutterthree.js 实现思路1.在Flutter 中使用webview 进行嵌套2.开启上面嵌套的页面地址2.在含有three.js 的html 中引入模型3.两个页面之间进行通信&#xff0c;如图&#xff1a; 总结 flutter(桌面端)瓶颈 Flutter 本身…...

学习日志35

拆卸线问题&#xff08;Disassembly Line Balancing Problem, DLBP&#xff09;是生产工程和运筹学中的一个特殊问题&#xff0c;它涉及到将废弃产品有效地拆解成可回收利用的部件和材料。随着环保意识的增强和资源回收技术的发展&#xff0c;DLBP逐渐成为研究的热点。这类问题…...

http cache-control

Cache-Control 是 HTTP 协议中用于控制缓存行为的重要头部字段。它定义了客户端和服务器端如何缓存资源&#xff0c;以及缓存的有效期。以下是关于 Cache-Control 的详细解释&#xff1a; 请求指令 max-age 指示客户端接受的响应最大年龄。如果缓存的响应超过这个年龄&#x…...

kubernetes 中的微服务

微服务&#xff1a;用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f;需要通过微服务暴漏出去后才能被访问 - Service是一组提供相同服务的Pod对外开放的接口。 - 借助Service&#xff0c;应用可以实现服务发现和负载均衡。 - service默认只支持…...

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…...

【多重循环在Java中的应用】

多重循环在Java中的应用 介绍 多重循环是将一个循环嵌套在另一个循环体内的编程结构。Java中的 for、while 和 do...while 循环均可作为外层循环和内层循环。建议使用两层嵌套&#xff0c;最多不超过三层&#xff0c;以保持代码的可读性。 在多重循环中&#xff0c;外层循环执…...

JVM(Java Virtual Machine) 详解

1. JVM 内存区域划分 一个 Java 写的程序&#xff0c;跑起来就得到了一个 Java 进程&#xff08;资源分配的基本单位&#xff09; JVM 上面运行的字节码指令 1) 程序计数器&#xff08;比较小的空间&#xff09;&#xff0c;保存了下一条要执行的指令的地址 这个不是 CPU 的…...

【进阶OpenCV】 (4)--图像拼接

文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像&#xff08;这些图像可能是不同时间、不同视角或者不同传感器获得的&#xff09;拼成一幅无缝的全景图或高分…...

pg if条件语句

1.语法&#xff1a; 2.区别 IF 语句&#xff1a; 只能在 PL/pgSQL 中使用&#xff0c;不适合在直接的 SQL 查询中使用。没有返回值&#xff0c;仅仅是控制逻辑流程。适合用在存储过程、函数和触发器中。 CASE 语句&#xff08;在 PL/pgSQL 中&#xff09;&#xff1a; 可以在 P…...

Pikachu-unsafe upfileupload-getimagesize

什么是getimagesize()&#xff1f; getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造&#xff0c;如果用这个函数来获取图片类型&#xff0c;从而判断是否时图片的话&#xff…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...