大家平时一般都会使用NAT或者NAPT技术去解决IPv4的问题。
IPv4在划分时就划分了公网地址、私网地址、(还有一些保留、组播、本机巡回地址等,大家这些都不用特别理解这些概念)。而IPv4地址的使用者你可以先简单理解为用户和ISP(互联网服务提供商)。
著名的ISP有中国移动、中国联通、中国电信这些通信巨头,他们拥有这中国大部分IPv4的地址,同时他们是中国骨干网络的建设方、运营方。而用户则是我们每个人或者一个公司、企业。
公网地址是全球唯一的,并且不能重复(当然有一些例外,IPv4中也有一些任播的概念)。而私网地址则不是。如果你是windows的电脑,你可以先按Win+r博彩问答,然后输入cmd打开控制台窗口博彩问答,然后输入ipconfig查看自己当前的IP地址,一般来说你的IP地址都是10.*.*.*或者172.16-32.*.*或者最常见的192.168.*.*。
以私网地址为报头的报文不会在骨干网上进行传输,所以私网地址可以互相冲突,但怎么解决冲突的私网地址在公网上通信呢?
这就需要用到NAT/NAPT技术。你和其他同事可能都连接到一台路由器上,这个路由器则充当网关。这个网关你可以理解为一个门,你想要访问外网必须要通过这个门。当然这个门的出口(连接ISP的接口)是拥有一个IPv4的公网地址的。(当然这个出口可能也是ISP内网的一个小角色,他的出口IP也是一个内网地址,对他来说也有一个对应的门)。
当你访问外网时,网关会把你的IP信息换成他公网的IP。然后网关会记个小账本,你内网IP的某个端口访问了哪个公网IP的哪个端口。这时候你的报文头部已经换成了网关的公网IP,当公网IP回复你时,网关就会拿出自己的小账本“哦,原来是你刚才用我的IP访问的他”,这是网关会把公网给你发的报文的目的地址换成你的。
可能这样讲会比较抽象。那么可以看一下下面。
A设备是内网设备,IP 10.1.1.1(内网IP)
B设备是A的网关 IP 1.1.1.1(公网IP)
C服务器 IP 2.2.2.2(公网IP)
A访问C,到B时的报文是 : 源ip10.1.1.1 源端口100 目的ip2.2.2.2 目的端口80
B会把它修改为:源ip1.1.1.1 源端口200 目的ip2.2.2.2 目的端口80,然后发给骨干网,由骨干网发送给C。并且B会把这个转换记录下来。
C回复时的报文头部为:源ip2.2.2.2 源端口80 目的ip1.1.1.1 目的端口200。
B收到C的回复后,会查询自己刚刚记录的表。发现原来是10.1.1.1的100端口借用了我1.1.1.1的200端口向2.2.2.2的80端口发送了报文。这时B会修改C的报文为 源ip2.2.2.2 源端口80 目的ip10.1.1.1 目的端口为100。并且把这个修改后的报文给A。这样就完成了一次通信。
因此NAT/NAPT技术缓解了当前IPv4地址不足的情况。并且可以满足当前的使用需求。
不用担心会断网,IPv6正在慢慢的铺设,但是IPv6颠覆了许多v4时的概念,许多协议还要根据v6进行修改。