私网访问公网

527 阅读5分钟

1.前提知识

网络按照大小范围可大致分为:局域网【内网,私网】,广域网【外网,公网】

IP地址在对应区域内就有了对应的名字eg:私网IP,公网IP

下面是一个家庭电脑访问百度的普遍流程,以及基本概念

image.png

从图可以看出,我们访问百度这种公网IP的服务,是通过路由器上的公网IP去访问的

或者说,私网要访问公网,就必须借用公网去访问,那为什么电脑不直接整一个路由器的公网IP :10.10.10.10,不就不用路由器这个玩意了吗 ???

理论上可以,但是实际上,是因为我们的公网IP是IPV4的,是有限的,没办法直接把珍贵的IPV4拿给你用在家庭电脑上的

IPV4是每一台网络设备上网时候的身份证,所以不难理解,它具有唯一性

那么根据IPV4的位数,可以分出42亿张身份证,那想想,全球70亿人,网络设备怎么也不止70亿了

那岂不是有的设备分不到这为数不多的资源 ???对。

所以为了解决这个都分到资源的问题,就出现了公网IP,私网IP,

所以准确说来是,一个局域网的IP【也就是路由器公网IP】才是唯一的,一个路由器下的所有设备最后用路由器标识的这个对外公网IP去访问其他【公网服务】就可以了

至于你家路由器下的每台电脑地址你爱怎么设置,就怎么设置,不用担心和别人搞成一样的了

那么问题来了,为什么我家的电脑有一个192.168.78.1,然后去朋友家发现他电脑也是192.168.78.1 ???

大家只需要记住:每个家庭都有路由器,一个路由器的设备IP集合就是一个私网,所以每个家庭就是一个私网

那你家的路由器有一个唯一的对外公网IP,朋友家的路由器也有一个唯一的对外公网IP,这不就回答了为什么可以两个一样的私网IP,其根本在于只要最后用来对外上网的公网IP不同就行 这里是不是感觉到了那句名言 没有加一层解决不了的问题 ,好像【路由器这个加一层】是有那么点意思了哈。

image.png

那私网IP怎么变成路由器的公网IP的呢 ???

答:通过路由器的NAT功能,【Network Address Translation网络地址转换】

2.1 发送数据包步骤:

1.电脑里面构造出含有发送端,接收端的数据包【电脑发出】

2.数据包到达路由器被拦下,通过NAT功能的(Source NA T源地址转换)把发送端地址改成路由器的公网IP【路由器拦截改地址】并且在路由器的地址映射表里留下一条映射信息:192.168.78.1--------》10.10.10.10【相当于登记到路由器】

3.数据包就到达了最终的百度:202.108.22.5

image.png

2.2 接收数据包响应步骤:

1.百度里面构造出含有发送端,接收端的数据包【百度发出】

2.数据包到达路由器被拦下,通过映射地址查看响应应该发给哪台电脑,通过NAT功能的(Destination NAT 目的地址转换)把接收端 地址改成私网里面具体电脑的IP地址【路由器拦截改地址】

看上去似乎没有问题,但是真是这样就好了吗 ???

image.png

可以从下图发现,有多台电脑时,映射表倒着找请求者是谁,是找不出来具体是谁的
来时候好好的,回不去了。。。 因为多台电脑的IP都映射了10.10.10.10,倒回去就是一个10.10.10.10对应多台私网IP了

image.png

发不回去了怎么办:那就是想办法让每台电脑映射的路由器10.10.10.10在表里具有唯一性,类似于下面这样,这也就出现了【端口】

image.png

3.1 新的发送数据包步骤:

1.电脑里面构造出含有发送端:端口,接收端:端口的数据包【电脑发出】
2.数据包到达路由器被拦下,通过NAT功能的(NA Port T地址转换)把发送端地址改成路由器的公网IP,【路由器拦截改地址】 并且在路由器的地址映射表里留下一条映射信息:192.168.78.1:2000--------》10.10.10.10:2002【相当于登记到路由器】
3.数据包就到达了最终的百度:202.108.22.5:3000

image.png

3.2 新的接收数据包响应步骤:

1.百度里面构造出含有发送端:端口,接收端:端口的数据包【百度发出】
2.数据包到达路由器被拦下,通过映射地址查看响应应该发给哪台电脑,通过NAPT功能的(NA PortT 网络地址端口转换)把接收端 地址改成私网里面具体电脑的IP地址【路由器拦截改地址】

这下由于路由器里面的端口使用的唯一标识特性,就使得响应可以准确回到发请求的电脑了

image.png

从这里我们可以发散一下思维,其实也并不是非要用端口这种标识来帮助精准返回响应

只要是可以让10.10.10.10在映射表中体现出唯一的任何标识都行