18、【Ubuntu】【远程开发】技术方案分析:私网ip掩码

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】技术方案分析:公私网ip

远程办公里面关于公网 IP 和局域网 IP 的一个概念,下面继续分析

远程开发

上篇 blog 提到了局域网常用地址包括

  • 10.0.0.0 ~ 10.255.255.255 (掩码 255.0.0.0 或 /8)
    172.16.0.0 ~ 172.31.255.255 (掩码 255.240.0.0 或 /12)
    192.168.0.0 ~ 192.168.255.255 (掩码 255.255.0.0 或 /16)

下面继续说下这里的掩码含义

这里的掩码和 /8/12/16 是描述 IP 地址网络范围的核心概念,它们都用于定义一个 网络前缀 ,用来告诉计算机或路由器,在这个 IP 地址中,哪一部分是网络地址 ,哪一部分是主机地址

子网掩码(比如上面的 255.0.0.0)和 IP 地址一样,由 4 个 8 位数组成(共 32 位),其中掩码中的 1 表示网络部分0 表示主机部分 ,这里把 255.0.0.0 转成二进制可以得到

255.0.0.0 = 11111111.00000000.00000000.00000000

可以看到,前 8 位是 1,表示这 8 位是网络地址,后 24 位是 0,表示这 24 位可以分配给主机或设备,所以网络地址是 10.x.x.x 中的 10 固定不变,主机地址范围是后面的 24 位,主机地址范围可以变化,从 10.0.0.010.255.255.255,可以支持约 1677 万台设备的内网 IP 分配

另外,上面的 /8255.0.0.0 含义是一样的,表示前 8 位是网络前缀255.0.0.0 是掩码写法,/8 是 CIDR(Classless Inter-Domain Routing)无类别域间路由表示法,是对子网掩码的简洁写法

CIDR 中 /N 表示 IP 地址的前 N 位是网络前缀,剩下的 (32-N) 位用于主机和设备,比如上面的

  • /8 对应二进制 11111111.00000000.00000000.00000000,掩码 255.0.0.0,前 8 位是网络,可支持主机数量 2²⁴ 约 1677 万,主要用于大型企业内网 (公司内网环境一般以 10 开头)
  • /12 对应二进制 11111111.11110000.00000000.00000000,掩码 255.240.0.0,前 12 位是网络

    可支持主机数量 2²⁰ 约 104 万,用于中大型网络
  • /16 对应二进制 11111111.11111111.00000000.00000000,掩码 255.255.0.0,前 16 位是网络,主机数量 2¹⁶ 约 65536 个地址,一般家庭,小型办公室很常见(比如 192.168.1.x192.168.0.x

再补充个公网 IP 和私网 IP 的形象化例子,公网 IP 就像家里的街道地址,快递员(互联网数据)可以根据这个地址把快递送到家附近的菜鸟驿站,局域网 IP 就像家里的具体的楼栋号和房间号(如 A 栋 XXX 室)

  • 只有公网 IP,没有局域网 IP 时(网络地址转换),快递员只能把快递送到菜鸟驿站,然后由于没人接收,这个快递就被返件(数据被丢弃)了
  • 只有局域网 IP,没有公网 IP 时,这就好比网上买个东西,地址填的 A 栋 XXX 室,全世界的 A 栋这么多,天知道要送往哪个 A 栋
  • 只有当公网 IP 和局域网 IP (网络地址转换)同时具备时,快递员才能将快递(互联网数据)准确无误地送到家门口

上面提到了网络地址转换机制(NAT,Network Address Translation),举个例子

  • 当家里的某台设备(比如 IP 192.168.1.x)要访问某个网站时,数据包先发给路由器
  • 路由器将源 IP(是局域网 IP) 替换为自己的公网 IP,并记录下这个转换关系
  • 网站返回数据时,发回路由器的公网 IP
  • 路由器根据之前的记录,将数据转发给正确的局域网设备,比如上面的 192.168.1.100

示意图如下


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【远程开发】技术方案分析:远程桌面

相关推荐
写代码的学渣7 小时前
ubuntu 22.04 新装的系统 xshell 连不上
linux·运维·ubuntu
序属秋秋秋7 小时前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
云计算练习生8 小时前
linux shell编程实战 10 Git工具详解与运维场景实战
linux·运维·git
虚伪的空想家10 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t1987512816 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816316 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
晚风吹人醒.17 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Hard but lovely17 小时前
linux: pthread库的使用和理解
linux
4***v21418 小时前
详解 为什么 tcp 会出现 粘包 拆包 问题
网络·tcp/ip·php
蓝牙先生18 小时前
简易TCP C/S通信
c语言·tcp/ip·算法