外网访问内网
假如设A 和 B 的局域网 IP 相同(192.168.31.11),当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 A,哪个是 B 呢?
什么是端口映射?
端口映射是 NAT 的一种,它将外网主机的 IP 地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
现在市场上的家庭路由器都具备 NAT 功能,也可以实现端口映射。下图为小米路由器的端口映射设置图:
我们平时经过路由器,通过宽带,最终去到运营商那边,数据是从运营商出去,最终数据是回到运营商那边,运营商再把数据发送到用户的电脑。
路由器,至少有两个端口:WAN 口和 LAN 口。
WAN:接外部 IP 地址用,通常指的是出口,转发来自内部 LAN 接口的 IP 数据包,这个口的 IP 是唯一的。LAN:接内部 IP 地址用,LAN 内部是交换机。
这里,我们简化这个过程,我们把运营商当做一个 NAT 设备。
A 电脑的 IP 是局域网 IP(192.168.31.11),这个 IP(192.168.31.11)是从路由器的 lan口分配的。
当我们上百度的时候,经过路由器的 wan口,进行相应的IP、端口转化:192.168.31.11:80 -> 10.221.0.24:8080,所以,从 wan口出去的地址为:10.221.0.24:8080。
最后,经过运营商,运营商那边会做相应的端口映射(而且是动态端口映射),子网 IP(10.221.0.24:8080)转化为公网IP(128.0.0.1:8888),通过这个公网 IP 去访问百度服务器
同理,B 的过程也是一样。通过这样的层层端口映射,最终保证地址(IP + 端口)的唯一性。A 和 B 访问百度服务器,尽管它们的局域网 IP 是一样的,但是最终它们访问百度的地址(IP + 端口)是唯一的,所以,百度服务器回复时,原路返回时能够区分到底给谁回。
首先,我们需要在运营商那边申请(租用)一个公有 IP (长城宽带一年需要 2000 元左右),假如这个公有 IP 为:128.0.0.123。
假如,我们写的服务器如下:
接着,找个 NAT 设备进行相应的端口映射,家庭路由器都有这个功能。这里以小米路由器为例:
映射关系如下:
最后,其他人写客户端程序时(电脑能上外网),只要指定目的 IP 地址为 128.0.0.123,端口为 8888,通过这个地址,就能找到192.168.31.248:8080,因为这两者已经建立好映射,如上图,这样,我们的服务器就能收到数据。
相关阅读
引言 打开浏览器,在地址栏输入URL,回车,出现网页内容。整个过程发生了什么?其中的原理是什么?以下进行整理和总结。整个过程可以概括为
自从装了VMware之后,每次访问google搜索都会报“您的连接不是私密连接”,网页地址https会变成红色还有一天红色的斜线,单击旁边的锁i
路由器设置 本地电脑/本机 内网穿透 各种路由器都会有设置内网穿透的方法,设置完后你可以通过外网访问你开放的端口 本
读取位置 0x00000001 时发生访问冲突char content[100]; //SYSTEMTIME st; GetLocalTime(&st); sprintf(content, "%02d%02
最近尝试了一些内网端口的转发和内网穿透,现在一起总结一下。 0x01 正向和反向代理 正向代理中,proxy 和 client 同属一个 LAN,对