不提现没信誉 不安全跑路了
你对這个回答的对一个人的评价和看法是
对于我们网络开发的人员来说經常会用到TCP,UDP协议,但是通常情况下是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么交互呢?
对于我们网络开发的人员来说经常会用到TCP,UDP协议,但是通常情况下是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么交互呢?
假设有两台主机A和B他们分别处于不同的局域网下,他们的局域网IP都是192.168.1.2在同一个时刻,他们都访问百度服务器那作为百度服务器是怎么分别回复这两台主机的呢?或者是服务器怎么区分A和B呢?
我们先来了解一下公网IP和私有IP的概念。
公有地址(Public address):由 Inter NIC(因特网信息中心)负责这些 IP 地址分配给注册并向Inter NIC提出申请的组织机构,公有 IP 全球唯一通过它直接访问因特网(直接能上网)。主要有A、B、C、D、E五类地址:
而我们平时通过运营商(主要是电信、移动、联通宽带等)上网,通过家用路由器之后就会变成私有IP,大家可能会疑问峩们可以上网啊,怎么会是私有 IP 呢?
其实我们不是通过私有IP上网的是通过公有IP。通俗的讲运营商有公有IP,但是IPV4下IP资源有限所以这些IP不能每个人分配单独分配一个IP,所以需要动态给上网的用户 这个过程有点类似于,我们买了一些笔然后将这些笔分给全班学生使用,当嘫运行商动态分配公有IP的过程比这个复杂多了
所以A和B的IP相同是很正常的一件事情,但是对于百度服务器来说它并不关心对方的私有IP是什么,它也不知道它只知道访问它的肯定是公有IP。
那问题来了还是老问题,既然最终访问百度服务器是公有IP那A和B私有IP到公有IP的转换怎么完成的呢?当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 A哪个是 B 呢?
在讲原理之前我们先了解一个概念,端口映射?
思路:既然端口映射可以将一台外網 IP 地址机器多个端口映射到内网中不同机器上的不同端口那当用户访问外网 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的機器上
比如,我们在内网中有一台主机但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网主机的80端口上并且,在路由器上还存在一个Session当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机在这过程中,路由器充当了一个反向代理的作用他保护了内網中主机的安全。
我们平时上网的过程就是先经过路由器然后通过宽带,最终通过运营商的转换最终到web服务器的返回的数据先到运营商那边,然后再把数据发送到用户的主机上
我们都知道路由器有两个端口: LAN 口,WAN 口
下面我们来看看到底怎么通信的为了便于理解,我们把运营商当做一个 NAT 设备
为了方便大家理解,我们把 IP 的转化方向反过来分析(准确来说公网转局域网)。
A 主机IP 是私有 IP(192.168.1.2)该IP是从路由器的 LAN口分配的。暂不讨论是如何获取的这涉及到自动获取还是手动分配的。
通过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 + 端口)是唯一的,所以百度服务器回复时,原路返回时能够区分到底给谁回
对于我们网络开发的人员来说經常会用到TCP,UDP协议,但是通常情况下是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么交互呢?
对于我们网络开发的人员来说经常会用到TCP,UDP协议,但是通常情况下是在局域网内的协议交互通信。可你们有想过吗?如果是涉及到内网和外网的交互呢?也就是说局域网和公网是怎么交互呢?
假设有两台主机A和B他们分别处于不同的局域网下,他们的局域网IP都是192.168.1.2在同一个时刻,他们都访问百度服务器那作为百度服务器是怎么分别回复这两台主机的呢?或者是服务器怎么区分A和B呢?
我们先来了解一下公网IP和私有IP的概念。
公有地址(Public address):由 Inter NIC(因特网信息中心)负责这些 IP 地址分配给注册并向Inter NIC提出申请的组织机构,公有 IP 全球唯一通过它直接访问因特网(直接能上网)。主要有A、B、C、D、E五类地址:
而我们平时通过运营商(主要是电信、移动、联通宽带等)上网,通过家用路由器之后就会变成私有IP,大家可能会疑问峩们可以上网啊,怎么会是私有 IP 呢?
其实我们不是通过私有IP上网的是通过公有IP。通俗的讲运营商有公有IP,但是IPV4下IP资源有限所以这些IP不能每个人分配单独分配一个IP,所以需要动态给上网的用户 这个过程有点类似于,我们买了一些笔然后将这些笔分给全班学生使用,当嘫运行商动态分配公有IP的过程比这个复杂多了
所以A和B的IP相同是很正常的一件事情,但是对于百度服务器来说它并不关心对方的私有IP是什么,它也不知道它只知道访问它的肯定是公有IP。
那问题来了还是老问题,既然最终访问百度服务器是公有IP那A和B私有IP到公有IP的转换怎么完成的呢?当他们同时访问百度服务器的时候,百度服务器如何区分哪个是 A哪个是 B 呢?
在讲原理之前我们先了解一个概念,端口映射?
思路:既然端口映射可以将一台外網 IP 地址机器多个端口映射到内网中不同机器上的不同端口那当用户访问外网 IP 的这个端口时,服务器自动将请求映射到对应局域网内部的機器上
比如,我们在内网中有一台主机但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网主机的80端口上并且,在路由器上还存在一个Session当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机在这过程中,路由器充当了一个反向代理的作用他保护了内網中主机的安全。
我们平时上网的过程就是先经过路由器然后通过宽带,最终通过运营商的转换最终到web服务器的返回的数据先到运营商那边,然后再把数据发送到用户的主机上
我们都知道路由器有两个端口: LAN 口,WAN 口
下面我们来看看到底怎么通信的为了便于理解,我们把运营商当做一个 NAT 设备
为了方便大家理解,我们把 IP 的转化方向反过来分析(准确来说公网转局域网)。
A 主机IP 是私有 IP(192.168.1.2)该IP是从路由器的 LAN口分配的。暂不讨论是如何获取的这涉及到自动获取还是手动分配的。
通过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 + 端口)是唯一的,所以百度服务器回复时,原路返回时能够区分到底给谁回