原文地址: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. P4771 八百标兵奔北坡

    观察题目中关于北边的定义,发现是以当前点为顶点,向上的倒三角(自己想想为什么). 然后就可以直接 DP 了,令 \(f_{i,j}\) 表示点 \(\left(i,j\right)\) 的答案. \[ ...

  2. 「刷题笔记」哈希,kmp,trie

    Bovine Genomics 暴力 str hash+dp 设\(dp[i][j]\)为前\(i\)组匹配到第\(j\)位的方案数,则转移方程 \[dp[i][j+l]+=dp[i-1][j] \] ...

  3. kali查看本机ip

  4. 老猿学5G:融合计费基于QoS流计费QBC的触发器Triggers

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 SMF中的功能体CTF在用户上网时达到一定条件就会向CHF上报流量,而CTF什么时候触发流量上报是由CTF中的触发器来控制的.在<老猿学5G: ...

  5. 第二十八章、containers容器类部件QStackedWidget堆叠窗口部件详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWi ...

  6. PyQt(Python+Qt)学习随笔:QToolBox工具箱currentItem对应的index、text、name、icon、ToolTip属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中,toolBox主要有如下属性: 可以看到,toolBox的属性主要是与当前项相 ...

  7. PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系

    在界面程序开发中,数据的展示主要包括表格.简单列表.树状列表以及纯文本等多种方式,在Qt中将界面表格.简单列表.树状列表称为"表项视图类(item view class)",并提供 ...

  8. Springboot中redisTemplate乱码或json转换问题

    问题1 用RedisTemplate存入map值的时候,用rdm可视化打开,看到的是转码之后的数据,如图: 存入的方法为: public boolean hmset(String key, Map&l ...

  9. 百度前端技术学院-基础-day22-24

    第二十二天到第二十四天:JavaScript里面的居民们 task1 题目: <div> <label>Number A:<input id="radio-a& ...

  10. js 几种跨域解决方法

    同源策略: JS只能与同一个域中的页面进行通讯,必须是协议.域名.端口都相同,相同域下才能相互通信,这可以被认为是一种通信原则,叫同源策略. 跨域: js跨域是指通过js在不同的域之间进行数据传输或通 ...