网络通信IP细节

目录

1.通信的NAT技术

2.代理服务器

3.内网穿透和内网打洞


1.通信的NAT技术

NAT技术产生的背景是我们为了解决IPV4不够用的问题,NAT在通信的时候可以对IP将私网IP转化为公网IP,全局IP要求唯一,但是私人IP不是唯一的。

将报文发给路由器进行转发的时候,,路由器有一张NATP表,记录了IP的替换情况,比如在一个局域网内我的客户端A要去访问我们的服务器,它就会将报文交给路由器,路由器将SRC转化为它的公网IP,再把这个报文交给我们的服务器,服务器往回发的时候DST就是运营商路由器的公网IP和端口,然后路由器收到我们的服务器的应答在路由器内取查它的NATP表,IP和端口全部对上,进行跳跃,接下来的就是局域网内进行转发的工作了。

我们一个局域网内可能同时有多台主机要去访问同一个服务器和端口,服务器返回的时候SRC都是相同的,它怎么把报文精准送达的呢?答案就是NATP表,每个路由器在对该局域网内的报文进行转发的时候都会构建一一对应的映射表,我们的运营商路由器的公网IP是全球唯一的,加上不同的端口,我们的这个IP+端口就是全球唯一的!

当我们把数据发送给运用商的路由器,它就会在它的内部构建一一对应的映射关系,为我们的私人IP分配一个端口,如果端口冲突,就会自动分配一个端口,拿着这个IP+端口去访问服务器就可以了。

所以如果我们的私人IP不向公网发请求的话,公网是无法随意访问我们的私人IP的,它没有NAPT映射表就找不到我们对应的主机,数据自然无法传输。

但是内网可以访问公网,因为在发送的过程中在路由器会建立NAPT表!返回的时候查NAPT表查到是哪个主机发的请求,再把请求返回给这个主机,我们就完成了内网对公网的访问。

所以当我们聊微信的时候,你必须先登录微信,对方也登录微信,才可以进行聊天,不就是因为我们的公网无法直接访问私人IP吗?需要内网IP先向公网发送数据,公网才知道你这个主机在哪里?才好给你进行消息的转发。

2.代理服务器

我们校园网上网需要认证,认证是什么?不就是申请一个私人IP吗?

这样我们访问数据客户端要先把请求交给校园网的机房,然后校园网构建应答,去互联网去发送请求,当请求返回来的时候再返回给对应的客户端。

代理服务器有缓存查找和内容过滤的功能,我们可以把一些常用的资源缓存在本地,提高访问的效率,内容过滤就是当一些请求含有恶意网站的时候,不让它响应,直接丢掉。

也可以进行访问控制,比如不让你看腾讯视频,直接把腾讯视频的请求识别拦截,直接干掉,就无法访问这个网站了。

具体的应用是:

上面的服务器是我们的正向代理,是客户端把请求全部交给服务器,让服务器统一去访问互联网。

反向代理呢?反向代理就是,我们公司有很多服务器,然后为了统一调配,我们有一个前置Web服务器,服务器的响应全部交给Web服务器,然后有Web服务器再把响应返回给客户端。

反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先
会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web
服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际
与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
有了反向代理服务器,可以实现负载均衡,实现高并发,还可以隐藏服务器真正的IP地址,还可以把一些常常访问的数据缓存在服务器里,加速访问,还可以进行内容过滤和重写。

总而言之,正向代理是代表客户端去和服务器。反向代理是代表服务器去和客户端。

我们的CDN就是利用了反向代理

由于我们的前端代码是公开的,也有对应的库和框架,但是如果每一份前端代码都带一个库和框架会浪费资源,所以把框架和库放在一个服务器上,如果需要就直接向服务器发起请求。

CDN背后是一个服务器集群,我只需要访问CDN,它帮助我和它连接的服务器进行交互。

3.内网穿透和内网打洞

内网穿透就是把本地的某个端口给到云服务器,然后映射一个端口比如8080,然后我另一台主机如果想要时刻访问这个主机,我拿着映射的端口8080就可以访问到我们的本地主机了。

它主要运用于让我们的能直接从公网访问到内网。

而内网打洞呢,是利用NAT的特性,当我们把自己的报文发到同一台服务器,然后服务器把它们的报文互相交换,各自拿到对端的IP和端口,这样我们下一次进行访问的话就不用通过服务器了,直接进行通信了。

本质就是互相拿到对方的入口路由器的IP和端口。

我们数据返回的时候也因为拿到了我们数据来的时候入口路由器的公网IP和端口,根据NAT技术进行转发才进行应答的。

我们之所以无法访问谷歌的网站是因为我们将我们的报文给我们的运营商的路由器它会对我们的链接做域名解析,发现你访问的是黑名单的连接会直接丢掉,我们为了学习了解一下原理,报文在第一步就被干掉了,连公网都没进去就没了,所以我们需要对我们的报文进行加密,把我们得分请求放在加密的数据里面,然后把它交给一个既可以访问国内的服务器,也可以访问国外的服务器的地区,比如香港,把报文发给香港,然后香港去访问外网,然后再把应答加密,发回给我们的主机,主机再对报文进行解密。

相关推荐
Tony Bai3 分钟前
【Go 网络编程全解】06 UDP 数据报编程:速度、不可靠与应用层弥补
开发语言·网络·后端·golang·udp
半夏知半秋3 分钟前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
我只有一岁半11 分钟前
java17中,使用原生url connection的方式去创建的http链接,使用的是http1.1还是2.0?
网络·网络协议·http
梦想成为光头强!20 分钟前
手机在初次联网的底层流程-关于EPC信令附着
网络·5g
wanhengidc29 分钟前
操作简单稳定选巨 椰 云手机
运维·服务器·游戏·智能手机·云计算
wanhengidc30 分钟前
云手机公认的优势有什么
运维·服务器·游戏·智能手机·玩游戏
一匹电信狗43 分钟前
【C++】C++风格的类型转换
服务器·开发语言·c++·leetcode·小程序·stl·visual studio
老龄程序员1 小时前
基于OpenIddict6.4.0搭建授权认证服务
运维·服务器·identityserver
青衫码上行2 小时前
【从0开始学习Java | 第21篇】网络编程综合练习
java·网络·学习
Chicheng_MA2 小时前
IPQ5322 Wi-Fi 7 SoC 路由器方案介绍
网络·路由器·ipq