原文地址:https://wuter.cn/1756.html/

一、IPv4地址

IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则。

这里就不详细说IP地址的发展历史、编址方式、分配、管理相关的知识了,因为暂时用不到,只简单聊聊IP地址的分类:共有地址、私有地址。

1、公有地址

这个比较容易理解,公有地址也就是平时所说的公网IP,有了公网IP,才能拥有被外网中其他设备访问的能力。

但是目前运营商是不会给你分配公网IP的,2019年11月25日,所有43亿个IPv4地址已经分配完毕,IPv4地址已经枯竭。当然运营商不给家庭用户分配公网IP已经不是近几年的事情了,随着云计算等技术发展,运营商会更多的把公网IP高价卖给云服务商或者基础设施运营商。当然这样也不是没有好处,家庭宽带躲在运营商层层NAT之下,只要不是闲的没事干,网络范围内爆发的病毒不会找到你家门口。

2、私有地址

私有地址属于非注册地址,专门为组织机构内部使用。 简单来说,内网中的IP地址就是私有地址,再用不准确的方式来说,从路由器LAN口连接出来的设备的IP地址就是私有地址。最常见的一类就是192.168.0.0-192.168.255.255;另外就是127.0.0.1,这个地址专门用来表示自己,跟windows的"localhost"差不多(两者原理并不相同,涉及要不要经过网卡,这里就不讲了)。

百分之九十九的家庭宽带都是内网,而且是层层转发下来的内网,在路由器上查到的WAN口地址是一个运营商级别的更大的内网。

这样有什么坏处呢,如果正常上网办公学习没问题,但是涉及到BT下载、做服务器、某些游戏联机等等就会受到很大的约束。

二、NAT

很早之前我们就听说了IPv4已经不够分配了,全球太多接入互联网的设备了,但是直到今日,我们依然还是在使用IPv4,哪怕IPv6已经铺开了,但是使用率非常之低。为什么IPv4还一直够用呢?因为一个技术,就是NAT。

90年代中期,NAT作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来。其主要的功能就是尽量使同个区域(同一栋楼、同个小区…)的设备使用尽可能少的公网IP,一起共用公网IP,这样就能减少公网IP的消耗。

现在所说的NAT其实已经发展为NAPT了,但是为了方便仍然叫做NAT。

这里我们举个例子。

我们假设有一台路由器公网IP为30.0.0.1,公网中有一台服务器IP地址为60.0.0.1

此时路由器后面的A电脑(IP为192.168.1.2)有一个进程,对应的端口号为10999,想要访问B服务器,一个简单的连接是这样的:首先A电脑要告诉B服务器它是谁,B服务器知道访问者的路径之后再把它需要的资源按照这个地址传送回去。

A电脑认为自己是192.168.1.2:10999,但是这样显然不对,公网NAT或者路由器的后面有无数个192.168.1.2,B服务器到底要把资源传给谁呢?所以说当A电脑某个进程的发出以192.168.1.2:10999为地址的进程之后,路由器会把这个地址悄咪咪的改成30.0.0.1:xxxxx,这里的xxxxx是路由器随意分配给这个进程的一个端口号,我们假设为10100。这样由于公网地址是唯一的,A电脑就和服务器连接成功开始通讯。

B服务器收到请求后,把资源按照30.0.0.1:10100的地址返回给路由器,然后路由器把这个地址转换为192.168.1.2:10999,这样B服务器的资源成功被A电脑获取。

这就是一个简单的NAT转换的过程。

三、端口映射

讲这个之前还是看刚才那个例子。

其实当A电脑与B服务器连接结束之后,路由器分配的10100端口自动释放,当服务器再按照30.0.0.1:10100想给A电脑传输数据的时候,因为路由器认为10100是一个无效端口,所以B服务器发来的这个数据包是个无效的数据包。

这就出现了一个很有意思的事情:A电脑只能主动向B服务器发送请求,但是B服务器却不能主动向A电脑发送请求,也就是A只能向外发数据,而不能主动接收数据。

端口映射应运而生,不如就规定,路由器的10100端口永远留给A电脑的,这样一来,B服务器就可以主动根据30.0.0.1:10100这个地址找到A电脑。

这就是端口映射。

端口映射有内部端口和外部端口,内部端口就是某个进程的实际端口,比如这里提到的A电脑的10999就是内部端口,用于外网访问的10100就是外部端口。

端口映射有个小例子,比如通过合理的技术手段绕过国内域名解析到国内服务器需要备案的门槛(这句不要),后面几篇文章会进行介绍。

四、内网穿透

你以为自己通过端口映射就可供外网访问了?

下图:运营商的无限套娃

当你想跟小伙伴联机的时候,小伙伴可能也是身处大内网套中内网套小内网的环境下,P2P确实很快,但你们这不是P2P,你们这叫P2222222222P。

这时候需要引入中间商,需要一台具有公网IP的服务器,A电脑与服务器进行连接,B电脑也与服务器进行连接,每当A电脑想要访问B电脑时,服务器可以把信息转换给B电脑,这样一来就实现了A与B的通讯。

这就是内网穿透的基本概念。

这里贴一个小哥的B站视频,讲的挺好。

内网穿透肯定也有一定的弊端,那就是A和B的通讯速度会严格受限于中间服务器的带宽,而国内的服务器带宽是非常非常贵的(增加1Mbps每个月费用上涨100元),如果A的家庭宽带是百兆宽带,B是千兆宽带,但是中间服务器的带宽是5M,那么A和B同时传输时理论上每条线路只有2.5M的带宽,短板效应,应该很方便理解。

今天大概更这些,之后利用frp进行内网穿透的实际操作。

NAT、端口映射、内网穿透、公网IP都是啥的更多相关文章

  1. 商务导航路由配置 2——端口映射 内网通过公网IP访问设置

  2. SSH 端口转发+内网穿透

    用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...

  3. VMware NAT端口映射外网访问虚拟机linux

    本文目的: 一. SSH连接 二. 访问HTTP VMware Workstation提供了两种虚拟机上网方式,一种bridge,一种NAT,bridge可以获得公网地址,而NAT只能是内网地址了. ...

  4. Tp-link路由器怎么设置端口映射 内网端口映射听语音

    https://jingyan.baidu.com/article/ca00d56c710ef9e99eebcf85.html 只有一台能上网的电脑就可以自己免费搭建服务器,本经验简单介绍家用tp-l ...

  5. hadoop hdfs 有内网、公网ip后,本地调试访问不了集群解决

    问题背景: 使用云上的虚拟环境搭建测试集群,导入一些数据,在本地idea做些debug调试,但是发现本地idea连接不上测试环境 集群内部配置hosts映射是内网映射(内网ip与主机名映射),本地只能 ...

  6. VMware NAT端口映射 外网可以访问内网虚拟机

    我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...

  7. 传输层 lcx实现本地端口映射&&内网代理

    如果目标服务器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标服务器相应端口的数据透传到防火墙允许的端口(例如53),在目标主机上执行如下命令,就可以直接从远程桌面连接目标主 ...

  8. VMware NAT端口映射外网访问虚拟机linux可能会出现的错误总结

    博主因为做实验报告的缘故,尝试以NAT的方式从外网远程连接到虚拟机的linux操作系统:https://www.cnblogs.com/jluzhsai/p/3656760.html,本文主要举出在此 ...

  9. 本地Linux虚拟机内网穿透,服务器文件下载到本地磁盘

    本地Linux虚拟内网穿透 把服务器文件下载到本地磁盘 https://natapp.cn/ 1.注册账户点击免费隧道  

随机推荐

  1. php8.0正式版新特性和性能优化学习

    前言 PHP团队宣布PHP8正式GA(链接).php的发展又开启了新的篇章,PHP8.0.0版本引入了一些重大变更及许多新特性和性能优化机制.火速学习下~ JIT(Just in Time Compi ...

  2. Linux 上如何清除 RAM 内存高速缓存,缓存和交换空间

    像任何其他的操作系统一样,GNU / Linux已经有效地实施了内存管理甚至更多.但是,如果有任何进程正在蚕食你的内存,你要清除它,Linux提供了一个方法来刷新或清除RAM缓存. 在Linux中如何 ...

  3. Python中的静态属性、实例属性、静态方法、实例方法之间的区别

  4. Docker容器版Jumpserver堡垒机搭建部署方法附Redis

    1.简介 Jumpserver是全球首款完全开源的堡垒机,多云环境下更好用的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维安全审计系统,使用Python / Django 进行 ...

  5. mfc c++优化

    1.不住求精度时,尽量使用单精度浮点型2.使用32位数据类型3.使用有符号和无符号整型: 前提:无需考虑正负时 double x; int i; x = i; 使用有符号:unsigned int i ...

  6. 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛

    [Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...

  7. vm虚拟机安装centos7。克隆镜像以及快照

    为了方便下次安装配置,保存一篇安装centos的文章 https://blog.csdn.net/wsq119/article/details/80635558 步骤非常详细,一看就会. 这一篇是关于 ...

  8. maven私服拉取jar失败(内网)

    解决方案: 1.私服没jar,找私服负责人添加 2.私服有拉不下来,重启nexus服务端(负责人做) 3.本地有jar但是idea中没找到,先执行一下reimport,不行的话,随意修改下pom文件, ...

  9. PyQt(Python+Qt)学习随笔:工具箱(QToolBox)的用途及标签部件项(tabbed widget item)作用介绍

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.概述 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...

  10. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget提供的currentItem当前项操作访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 当前项是指当前鼠标和键盘焦点所在项,在项可以进行选择操作时,当前项可以是选中状态,也可以是未选中状态 ...