对于我们网络开发的人员来说,经常会用到tcp,udp协议,但是通常情况下,是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么 交互呢?
假设有两台主机a和b,他们分别处于不同的局域网下,他们的局域网ip都是192.168.1.2。在同一个时刻,他们都访问百度服务器,那作为百度服务器是怎么分别回复这两台主机的呢?或者是服务器怎么区分a和b呢?
公有地址(public address):由 inter nic(因特网信息中心)负责。这些 ip 地址分配给注册并向inter nic提出申请的组织机构,公有 ip 全球唯一,通过它直接访问因特网(直接能上网)。主要有a、b、c、d、e五类地址:
a类:地址范围是1.0.0.0 到 127.255.255.255,主要分配 给大量主机而局域网网络数量较少的大型网络;b类:地址范围是128.0.0.0 到191.255.255.255,一般用于国际性大公司和政府机构;c类:地址范围是192.0.0.0 到223.255.255.255,用于一般小公司校园网研究机构等;d类:地址范围是224.0.0.0 到 239.255.255.255,用于特殊用途,又称做广播地址;e类:地址范围是240.0.0.0 到255.255.255.255,暂时保留。私有地址(private address):属于非注册地址,专门为组织机构内部使用,说白了,私有 ip 不能直接上网。主要有a、b、c三类,a类地址范围是10.0.0.0-10.255.255.255 ,b类地址范围是172.16.0.0-172.31.255.255,c类地址范围是192.168.0.0-192.168.255.255。
127.0.0.0 到127.255.255.255 为系统环回地址。
而我们平时通过运营商(主要是电信、移动、联通宽带等)上网,通过家用路由器之后,就会变成私有ip,大家可能会疑问,我们可以上网啊,怎么会是私有 ip 呢?
其实我们不是通过私有ip上网的,是通过公有ip。通俗的讲,运营商有公有ip,但是ipv4下ip资源有限,所以这些ip不能每个人分配单独分配一个ip,所以需要动态给上网的用户。 这个过程有点类似于,我们买了一些笔,然后将这些笔分给全班学生使用,当然运行商动态分配公有ip的过程比这个复杂多了。
所以a和b的ip相同是很正常的一件事情,但是对于百度服务器来说,它并不关心对方的私有ip是什么,它也不知道,它只知道访问它的肯定是公有ip。
那问题来了,还是老问题,既然最终访问百度服务器是公有ip,那a和b私有ip到公有ip的转换怎么完成的呢?当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 a,哪个是 b 呢?
端口映射是将一台主机的内网(lan)ip地址映射成一个公网(wan)ip地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机;利用端口映射功能还可以将一台外网ip地址机器的多个端口映射到内网不同机器上的不同端口。端口映射功能还可以完成一些特定代理功能,比如代理pop,smtp,telnet等协议。理论上可以提供65535(总端口数)-1024(保留端口数)=64511个端口的映射。思路:既然端口映射可以将一台外网 ip 地址机器多个端口映射到内网中不同机器上的不同端口。那当用户访问外网 ip 的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
比如,我们在内网中有一台主机,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网主机的80端口上。并且,在路由器上还存在一个session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。
我们平时上网的过程就是先经过路由器,然后通过宽带,最终通过运营商的转换最终到web服务器的,返回的数据先到运营商那边,然后再把数据发送到用户的主机上。
我们都知道路由器有两个端口: lan 口,wan 口。
wan:接外部 ip 地址用,通常指的是出口,转发来自内部 lan 接口的 ip 数据包。
lan:接内部 ip 地址用,lan 内部是交换机。我们可以不连接 wan 口,把路由器当做普通交换机来使用。
下面我们来看看到底怎么通信的。为了便于理解,我们把运营商当做一个 nat 设备。
为了方便大家理解,我们把 ip 的转化方向反过来分析(准确来说,公网转局域网)。
a 主机ip 是私有 ip(192.168.1.2),该ip是从路由器的 lan口分配的。暂不讨论是如何获取的,这涉及到自动获取还是手动分配的。
当我们访问百度服务器的时候,经过路由器的 wan口,进行相应的ip、端口转化:192.168.1.2:80 -> 10.221.0.24:8080,所以,从 wan口出去的地址为:10.221.0.24:8080。
通过10.221.0.24:8080能访问外网吗?显然不行,因为还是私有ip。还需要一个步骤:转换为公网ip。
经过运营商,运营商那边会做相应的端口映射(而且是动态端口映射),子网 ip(10.221.0.24:8080)转化为公网 ip(128.0.0.1:9999),通过这个公网 ip 去访问百度服务器。
同理,b 也是一样的过程。通过这样的层层端口映射,最终保证地址(ip + 端口)的唯一性。a 和 b 访问百度服务器,尽管它们的局域网 ip 是一样的,但是最终它们访问百度的地址(ip + 端口)是唯一的,所以,百度服务器回复时,原路返回时能够区分到底给谁回。
企业官网设计的特点是专业互动有亮点如果你想建立一个好的网站,不要忽视图片的使用建设网站让企业在哪些方面收获不小网站优化公司SEO人员每天都做哪些网站排名数据监测工作?微信支付商户平台更新让生意“活”起来网站建设中页面设计需要注意的事项整站优化与关键词优化如何区分?网站制作公司如何为企业打造专业形象?