原文地址: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进行内网穿透的实际操作。