【计网】从零开始认识IP协议 --- 理解网段划分,NAT策略,私有IP和公网IP,认识公网

在这里插入图片描述

任何收获都不是偶然,
一点一滴的进步终会让未来的你焕然一新!

从零开始认识IP协议

  • 1 为什么要进行网段划分
  • 2 特殊IP地址与数量限制
  • 3 私有IP和公网IP
  • 4 彻底理解网段划分
  • 5 认识公网

1 为什么要进行网段划分

我们以一个例子来讲解为什么要进行网段划分:

在我们的学校里,学生的学号都是精心设计过的:16位二进制数表示,前6位表示学院号,后10位表示学生号。假设有这样几个学院:

  1. 机电与信息工程学院 000001
  2. 数学与统计学院000101
  3. 艺术学院001001
  4. 翻译学院001011
  5. 计算机学院001111

每个学院都有各自的学生会,学生会知道其他学院的各自编号。对于自己学院的学生,可以通过将前6位去除,只看后10位来找到对应学生。学校又有一个总学生会,今天总学生会将24级新生组成了一个大的聊天群!
在这里插入图片描述
这一天,小明捡到了同一个钱包,里面有一个学生证,已经磨损的只能看清学号0010110101010011了。这时他不知道这个学号到底是那个学院的,所以就把学生证交给了学生会,学生会知道学院掩码是1111110000000000,所以就知道学院号是001011,通过他掌握的信息,他知道这个是翻译学院的,所以就通过校学生会将钱包转交给了翻译学院学生会,翻译学院学生会看到了这个学生证的学号,立刻就找到了这名同学!

这个场景中:

  • 学校是公网,这个公网中有若干子网
  • 每个学院是一个子网,校学生会是出入口路由器,作为通信的中转站
  • 学号是IP地址,学院号+学生号就是网络号+主机号
  • 钱包转交的过程,就是报文通过路由器通信到目的主机!

网段划分通过这样精心的设计,合理的划分,可以高效支持未来报文路径查找,大大提高了查找目标主机的效率!!!

2 特殊IP地址与数量限制

在一个子网中有这样几个特殊的IP地址:

  • 将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网。
  • 将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1。

目前互联网中主要是使用IPv4版本的IP,IP 地址的IPv4版本是一个 4 字节 32 位的正整数。那么一共只有 2 32 2^{32} 232个 IP地址,大概是 43 亿左右。而 TCP/IP 协议规定, 每个主机都需要有一个 IP 地址。这意味着, 一共只有 43 亿台主机能接入网络么?

实际上, 由于一些特殊的 IP 地址的存在,数量远不足 43 亿,另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个 IP 地址。

CIDR 在一定程度上缓解了 IP 地址不够用的问题,提高了利用率,减少了浪费,但是 IP地址的绝对上限并没有增加,对于现在人手一台的手机,每个家庭的路由器(路由器需要两张网卡),各种服务器…仍然不是很够用。这时候有三种方式来解决:

  1. 动态分配 IP 地址: 只给接入网络的设备分配 IP 地址。因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不一定是相同的。
  2. NAT 技术(后面会重点介绍)。这是当前解决IP地址不足的主要的办法!
  3. IPv6: IPv6 并不是 IPv4 的简单升级版。这是互不相干的两个协议,彼此并不兼容! IPv6 用 16 字节 128 位来表示一个 IP 地址。这是最高效的解决IP地址不足的方法!但是目前 IPv6 还没有普及。

3 私有IP和公网IP

在使用Linux进行网络编程时,我们经常会遇见两个名词:私有IP和公网IP。这两个IP到底有什么区别?

首先,如果一个学校组建一个局域网,IP地址只能用于局域网的通信,而不是直接连接到Internet上。所以理论上,在这个局域网中,使用任意的IP地址都可以,只有在内部不重复就可以!但是 RFC 1918 规定了用于组建局域网的私有 IP 地址

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

包含在这个范围中的,都成为私有 IP,其余的则称为全局 IP(或公网 IP)!在局域网中只能使用上面三种私有IP,这个数量一定是足够使用的!

  • 私有IP是不能出现在公网中的!!!
  • 私有IP是随机分配的,保证在局域网中不重复,在不同子网中可以重复!

注意,没有人可以直接连接到公网中,上网的前提是必须接入到一个内网中!能连接到公网的只有运营商!

4 彻底理解网段划分

来看一张图:

在这里插入图片描述
家庭中在建设时都会装有光纤,可以通过运营商安装路由器。安装的路由器带有一个 LAN 口 IP(子网IP),这样就构建起了一个子网;同时路由器还带有另外一个WAN口IP,这个IP是在运营商的大路由器构建的子网中的!

  • 一个路由器可以配置两个 IP 地址:一个是 WAN 口 IP, 一个是 LAN 口 IP(子网IP)。
  • 家庭中我们连接WiFi,会被分配一个私网IP,通常是192.168.*,毕竟一个家庭应该不会有超过66536个设备吧!
  • 运营商的路由器也同样是一个子网,可能是覆盖一个区,一个村,一个小区。这个路由器向上还连接着区域更大的路由器!

最终进入公网的路由器是出入口路由器!也有WAN 口和LAN 口 IP。这时就连接到了公网中!可以与其他的路由器进行通信了!

这时,我们就要有一个共识:平时上网是在私网中进行的!所以我们上网缴纳的宽带费,流量费才都给了运营商!因为我们想要进行上网,一定是会经过运营商的路由器!

所以这就是网络最终的模型吗?我们模拟一下数据通信的过程验证一下:

  1. 假如现在我们想要访问抖音服务器。此时客户端生成了一分报文。因为主机中有传输层和网络层,也可以通过子网掩码找到当前子网的网络号!注意:任何一个主机都有能力知道与自己直连的网络号是多少!
  2. 同样,通过报文我们也知道要去的目标网络的私网IP,通过比较知道了其不再同一个网段,所以此时就通过路由器去其他路由器进行路径查找!
  3. 根据抖音的网络号,我们找到了对应的服务器,可以进行访问了

在这里插入图片描述
那么,这是请求报文到达了,抖音服务器要进行应答返回时就傻眼了!这个目标IP的网络号192.168.*怎么又重复的啊!为什么呢?

其实这里已经触犯了一个原则:私网IP是不能出现在公网中的!!!

私网IP不具有唯一性!不能作为目的IP和源IP进行通信!!!所以这样的结构还不是网络通信的模型!!!那么到底是怎样进行的呢?

通信过程中,主机操作系统生成的报文,会先交到路由器中,这时路由器会做一件事情:将报文中的srcIP,替换为自己的WAN口IP!进行一次源IP地址替换!每次路由器都会进行这样一个地址替换。然后转发过程中会根据目的IP找到对应的服务器!这样抖音服务器就能通过IP的逐层替换发回来应答了

这是就不在出现私网IP了!!!公网中的转发暂时不谈。这种源地址替换技术就是NAT技术。这个转换只在内网的时候进行转换!

接下来我们谈一谈如何理解公网!

5 认识公网

全世界的组织,国家,学校…会来划分IP地址,这个地址不是严格按照国家进行划分的!下面以国家为单位进行讲解!

我们可以将每个国家看着是一个局域网:

  1. 中国 1.xxx / 8
  2. 美国 2.xxx / 8
  3. 俄罗斯3.xxx / 8

国家中会有一个大路由器进行通信服务 ,每个国家也是一个子网,网络号是IP地址的前8位。也有自己的子网掩码,可以知道子节点的网络号 !同样可以通过报文的目的IP找到对应的服务器!

在往下一层,每个省份都有自己的路由器,是一个子网!在中国路由器下,这些省份的网络号是IP地址的前13位
在往下一层,每个市也可以有自己的路由器,构成一个子网,这些市的网络号是IP地址的前16位!

按照这样划分下去,划分到我们家的时候IP地址早就不够用了!那么怎么办呢?
不要忘了我们还有使用私有IP和公网IP的组合技!
在这里插入图片描述

其中的公网就是这个城市到国家的这个部分,上层的公网可以直接访问,下层使用私有IP与公网IP进行处理,就可以完美的应对网络通信IP划分的问题!上面只是举例来讲解网络IP划分的策略,与公网划分的实际情况与上图可能并不符合,但主要的策略是一致的!

OK!现在我们就彻底理解了网络中IP到底是怎么划分的了:

  1. 上层公网可以直接进行通信,每个子网都拥有自己的网络号!
  2. 下层采用私有IP和公有IP结合的方法来应对IP不足的情况!并通过路由的NAT转换完成通信过程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455912.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java【多线程】单例模式

目录 单例模式 饿汉模式 懒汉模式 懒汉模式-多线程版 单例模式 单例模式是一种设计模式 设计模式相当于棋谱 棋谱,大佬把一些对局整个推演过程,写出来 设计模式,是属于程序员的棋谱 单例模式(单个实例/对象)&…

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…

背景动态变化的html页面

首先看下效果图&#xff1a; 把下面的代码保存到 .html 结尾的文件里&#xff0c;用浏览器打开即可。 <!DOCTYPE html> <html> <head><title>动态背景</title><style>/* 样式表 */body {height: 100vh;display: flex;align-items: cente…

基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

NLP--一起学习Word Vector【实践】

纸上得来终觉浅&#xff0c;绝知此事要躬行。 《冬夜读书示子聿》 值此1024的程序员节&#xff0c;我们一起学习 Word Vector。 本章一起学习文本向量化&#xff0c;掌握文本向量的相关概念&#xff0c;了解各个文本向量&#xff0c;实现文本向量的算法 我开启了一个NLP共学坊…

echarts散点图

一、类似散点图折线图不展示折线 option {grid: {left: 10,right: 20,top: 35,bottom: 15,containLabel: true},tooltip: {show: true,trigger: item,backgroundColor: "rgba(0,0,0,0)", // 提示框浮层的背景颜色。formatter: function (params) {var html <d…

洞见数据未来,StarRocks Summit Asia 2024 即将启幕!

在 AI 时代&#xff0c;我们需要怎样的数据基础软件&#xff1f; 数据量和数据类型的需求飞速上涨&#xff0c;我们不仅需要将历史上各种基础设施中的数据进行分析使用&#xff0c;还要关注性能、灵活性、性价比&#xff0c;以及确保单一可信数据源。这一切构成了当前大数据领…

【实战案例】Django框架表单处理及数据库交互

本文基于之前内容列表如下&#xff1a; 【图文指引】5分钟搭建Django轻量级框架服务 【实战案例】Django框架基础之上编写第一个Django应用之基本请求和响应 【实战案例】Django框架连接并操作数据库MySQL相关API 【实战案例】Django框架使用模板渲染视图页面及异常处理 更新编…

【python实战】利用代理ip爬取Alibaba海外版数据

引言 在跨境电商的业务场景中&#xff0c;数据采集是分析市场、了解竞争对手以及优化经营策略的重要环节。然而&#xff0c;随着越来越多企业依赖数据驱动决策&#xff0c;许多跨境电商平台为了保护自身数据&#xff0c;采取了更严格的防护措施。这些平台通过屏蔽大陆IP地址或部…

qt项目使用其他项目的ui之单继承之成员变量

第一步添加.ui文件 第二步&#xff0c;点击编译(原理&#xff1a;qt的uic会将.ui界面编译成c文件) 第三步&#xff1a;在编译后的目录下找到#include “ui_pagewidget.h” 第四步&#xff1a; #ifndef USA_H #define USA_H#include <QWidget>#include "ui_pagew…

sql高级

数据库的范式 为了建立冗余较小、结构合理的数据库&#xff0c;设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。 范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。实际上&#xff0c;数据库范式…

Nest.js 实战 (十五):前后端分离项目部署的最佳实践

☘️ 前言 本项目是一个采用现代前端框架 Vue3 与后端 Node.js 框架 Nest.js 实现的前后端分离架构的应用。Vue3 提供了高性能的前端组件化解决方案&#xff0c;而 Nest.js 则利用 TypeScript 带来的类型安全和模块化优势构建了一个健壮的服务端应用。通过这种技术栈组合&…

微信小程序绘制轨迹

1、map | uni-app官网 根据官网描述&#xff1a;通过从数据库获取POI数据&#xff0c;并通过 uni-id-common 内的路线规划API&#xff0c;计算路线、距离、时间。 2、 <map style"width:100%;height:96%;" id"myMap" :scale"scale" :longi…

javaWeb项目-ssm+jsp大学生校园兼职系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a;java-ssmjsp大学生校园兼职系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#x…

C++【string类的使用】(上)

文章目录 1. 为什么要学习string类2. 标准库的string类2.1 string的构造函数&#xff08;1&#xff09;无参构造&#xff08;重点&#xff09;&#xff08;2&#xff09;用字符串初始化&#xff08;重点&#xff09;&#xff08;3&#xff09;用字符串的前n个字符初始化(4)拷贝…

前端处理返回的number类型超出16位的问题 ,在axios中统一处理

前端处理返回的number类型超出16位的问题 &#xff0c;在axios中统一处理 造成原因&#xff1a;js的number类型有个最大安全值&#xff0c;即2的53次方&#xff08;9007199254740992&#xff09;&#xff0c;超过这个值就会出现精度丢失的问题。 后端处理&#xff1a;将数字类…

MATLAB Simulink (二)高速跳频通信系统

MATLAB & Simulink &#xff08;二&#xff09;高速跳频通信系统 写在前面1 系统原理1.1 扩频通信系统理论基础1.1.1 基本原理1.1.2 扩频通信系统处理增益和干扰容限1.1.3 各种干扰模式下抗干扰性能 1.2 高速跳频通信系统理论基础1.2.1 基本原理1.2.2 物理模型 2 方案设计2…

使用docker-compose搭建redis7集群-3主3从

下面是一个用于搭建 Redis 集群的 docker-compose.yml 示例文件&#xff0c;它会启动 6 个 Redis 节点&#xff08;3 主节点 3 从节点&#xff09;来构成一个最小的 Redis 集群。 同一个容器内网通讯没问题&#xff0c;但是你要是需要暴露到外网你需要用第二个yml 内网的 v…

Leetcode 最长公共前缀

java solution class Solution {public String longestCommonPrefix(String[] strs) {if(strs null || strs.length 0) {return "";}//用第一个字符串作为模板,利用indexOf()方法匹配,由右至左逐渐缩短第一个字符串的长度String prefix strs[0];for(int i 1; i …

stm32单片机基于rt-thread 的 串行 Flash 通用驱动库 SFUD 的使用

1024程序员节&#xff5c;征文 一、sfud 通用驱动库介绍 SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多&#xff0c;各个 Flash 的规格及命令存在差异&#xff0c; SFUD 就是为了解决这些 Flash 的差异现状而设计&#xff0c;能够支持不同品…