1. NAT
在ip
协议章节,我们说报文转发给路由器时,由于私有IP地址不能出现在公网中,路由器会将报文源IP地址替换为路由器的WAN口IP地址,这个过程我们称为NAT转换
NAT技术是路由器的一个重要功能,缓解了IP地址不足的问题,因为它允许不同私网主机的IP地址可以相同;公网IP地址要求唯一,但私有IP地址不要求
既然源IP地址被替换了,应答该如何返回到源主机呢?
路由器在对源IP地址替换时,还会保存源IP地址与路由器WAN口IP地址的映射关系,形成NAPT
,我们简称为NAT
转换表
私网内的主机第一次向公网发送报文时,映射关系就会保存在NAPT
中
如果同一局域网内有多台主机向同一服务器发送报文,由于它们的上层路由器都是同一个,应答返回时怎么知道对于哪台主机呢?因此,映射关系采用IP地址 + 端口号的方式
这种映射关系由路由器自主维护,使用tcp
,建立连接时,会生成NAPT
,断开连接,销毁NAPT
NAT
技术的缺陷:
- 外网不能直接访问私网IP地址,因为路由器没有映射关系,报文到达路由器时不知道往哪走
NAPT
的生成和销毁都需要额外的开销- 一旦
NAT
设备(路由器)异常,所有连接都断开
现在,我们了解了NAT
技术,就能解释平时上网时的出现的现象:
- 为什么使用QQ等聊天软件与朋友聊天,必须先登上QQ?
- 为什么不同局域网内的两台主机不能直接通信?
所谓登上QQ,就是连接上了公网中的QQ服务器,双方都连上QQ,私网到公网的映射关系建立,消息发给服务器,服务器也就能将消息从公网发送到私网中
不同局域网内的两台主机不能直接通信,因为路由器没有相应的映射关系
2. 内网穿透
以Windows作为client,连接云服务器上的服务,发送消息,将源主机的IP地址打印出来,会发现打印出来的IP地址与Windows主机的IP地址不同
根据学过的内容,最终将报文转发给云服务器的是运营商的路由器,因此,云服务器中打印的实际上是运营商路由器的IP地址
借此,我们可以引出新的技术:内网穿透、内网打洞
首先,B连接云服务器,路由器建立了对应的映射关系;其次,在云服务器上部署一种服务,该服务将所有发送到云服务器指定端口的报文全部转交给B,由B处理报文并将应答返回给云服务器,再由云服务器将应答返回,这样就完成了两个私网之间的通信,我们把这种技术叫做内网穿透
这种技术有何作用呢?
一般配置好的云服务很贵,这样做就能使用一台便宜的云服务器,让另一台主机完成复杂的工作
有时,我们也需要远程办公,比如B是你家中的主机,A是你在出差地的主机,这样就能在远方访问到家中的主机,完成工作
3. 内网打洞
与内网穿透相对应的技术还有内网打洞
由于云服务器能得知主机运营商路由器的IP地址,如果两台主机连接同一云服务器,云服务器就得知双方运营商路由器的IP地址;此时,如果云服务器将B运营商路由器IP地址发给A,将A的发给B;之后,A要与B通信,发送报文都往B的运营商路由器发,由于B已经连接过云服务器,路由器中NAPT
就有对应的映射关系,报文也就能正确到达B,同理,B向A的运营商路由器发送报文也能正确到达A
同样,我们也能完成不同私网的主机之间的通信
内网打洞有何用呢?
例如直播,数据直接发给对方运营商路由器,一样能发送给对方,而不再需要由服务器进行发送了,大大减少了服务器的压力
有些视频软件,会发现下载视频非常快,如果B要下载某个视频,服务器会先查找距离B主机最接近且有相应资源的主机,如果找到了,B直接从对方主机下载该视频
4. 代理服务器
正向代理服务器
工作原理:
client要访问公网,先将请求发送给自身子网中的代理服务器,由代理服务器请求,应答也是发送给代理服务器,由代理服务器再返回应答给client
功能:
- 缓存:代理服务器能够缓存部分静态资源,下次client如果访问相同的数据,代理服务器直接应答即可
- 内容过滤:外网想要访问私网中的主机,必须经过代理服务器,代理服务器就能对公网的不良信息过滤
- 访问控制:如果client想要访问非法网址,代理服务器可以直接拦截
- 隐藏客户端身份:由于请求是由代理服务器请求的,一定程度上隐藏了client的身份,保护client隐私
**应用场景:**学校的校园网
反向代理服务器
工作原理:
client发送给服务器的请求,最先到达反向代理服务器,由反向代理服务器选择分配给哪台服务器进行处理请求,并将应答返回给client
功能:
- 负载均衡:由反向代理服务器合理规划每台服务器的使用,让每台主机都"有事可做"
- 安全保护:私网服务器一般不暴露在公网上,隐藏服务器的IP地址,我们平时使用的云服务器上的公网IP地址可能就是反向代理服务器的IP地址,对client的请求进行过滤
- 缓存:反向代理服务器可以缓存服务器的响应内容,对于client重复的请求,可以从缓存中获取
NAT与代理服务器的区别:
- 应用上:
NAT
技术解决的是IP地址不足的问题,代理服务器则是一种具体应用 - 底层上:
NAT
工作在网络层,代理服务器工作在应用层 - 部署位置上:
NAT
一般部署在防火墙、路由器上,代理服务器则是一个软件程序,一般部署在服务器上 - 使用范围上:
NAT
一般在局域网的出口处,代理服务器可以在局域网、广域网等地方
代理服务器还有一个应用:翻墙
5. DNS
DNS是一套解析域名到IP地址的系统
我们说过,访问任何服务器都要以IP地址 + 端口号的方式,但IP地址对于普通用户来说非常不友好,于是就产生域名,它能增加用户的体验
最开始,由hosts文件维护主机名与IP地址的映射关系,这样做,非常的不方便:
- 一旦由新主机连接到互联网,或主机IP地址变化,就要到信息中心更改hosts文件
- 计算机需要定期更新hosts文件才能正常上网
于是,就有了DNS系统,域名解析过程:
域名www.baidu.com,其中com是一级域名,表示盈利组织,还有net(网络提供商)、org(非盈利组织),baidu则是二级域名
使用dig
指令,能查看DNS的过程
如果访问过某个网址,本地DNS服务器也会缓存IP地址
6. ICMP
ICMP是网络层协议,不是用来传输数据的,而是用来网络问题定位,网络问题诊断的
由于IP协议不保证可靠性,如果IP报文丢包,IP协议不能通知传输层以及丢包的原因
ICMP的功能:
- 确认IP报文成功到达目标主机
- 通知报文丢弃的原因
需要注意的是:ping
命令是基于ICMP的,不经过传输层,由OS直接调用网络层接口发送,因此,该命令也就没有端口号
traceroute
命令基于ICMP,打印主机到目标经历过的路由器
7.测试内网穿透
使用frp
软件测试内网穿透,将虚拟机作为frpc
,将云服务器作为frps
在这个过程中,Windows主机会被当成路由器,构建子网,虚拟机是该子网中的一台主机
下载frp
并拷贝到云服务器和虚拟机上
注意:由于公网不能访问私有IP地址,只能从虚拟机向云服务器拷贝
启动服务端和客户端
可以看到,frps
进程会有两个端口号,8888是虚拟机的连接,8081是未来client向该端口发送的报文都会转交给虚拟机上的服务的连接
确保虚拟机上有sshd
服务,也就是远程登录服务,使用client向云服务器的8081端口发送ssh
连接,输入用户名密码后,会发现登录的是虚拟机
如果想在虚拟机上部署多个服务,可以继续添加配置文件