一台服务器请求另一台时,用公网IP和内网IP访问时的区别?

一台服务器请求另一台时,用公网IP和内网IP访问时的区别?假定服务器A的IP=10.1.1.2/24服务器B的IP=10.1.1.3/24,对内提供的服务10.1.1.3:80对Internet提供的服务1.1.1.1:80NAT设备LAN=10.1.1.1/24,WAN=1.1.1.1,NAT设备兼任局域网的网关内网IP访问服务器A访问服务器B内网IP=10.1.1.3:80,直接通信,流量不…

大家好,又见面了,我是你们的朋友全栈君。

假定服务器A 的IP =10.1.1.2/24

服务器B的IP = 10.1.1.3/24,对内提供的服务 10.1.1.3:80

对Internet提供的服务 1.1.1.1:80

一台服务器请求另一台时,用公网IP和内网IP访问时的区别? NAT设备LAN = 10.1.1.1/24, WAN = 1.1.1.1,NAT设备兼任局域网的网关

一台服务器请求另一台时,用公网IP和内网IP访问时的区别?

 

内网IP访问

服务器A访问服务器B内网IP=10.1.1.3:80,直接通信,流量不经过NAT设备,实在没有什么值得可以写的。

Internet用户访问服务器B公网IP

服务器B提供的服务在Internet的呈现形式是 1.1.1.1:80。

当Internet上的用户访问1.1.1.1:80的流量到达NAT设备时,NAT设备需要提前将NAT静态(static)映射表准备好,应该相这个样子的:

Static Entry1.1.1.1:80 ——- 10.1.1.3:80

既然有了这个静态表项,那么NAT设备就可以将目的IP 从1.1.1.1改写为10.1.1.3,然后依据 Destination IP = 10.1.1.3来查找路由表,转发Destination IP = 10.1.1.3的IP报文,这个是小菜一碟,服务器B收到该IP报文。

然后B正常回复消息,当回复消息到达NAT设备时,NAT再依据静态映射表将SourceIP从10.1.1.3改写为1.1.1.1,并对改写完的IP报文查询路由表,将IP报文转发到Internet上去。这是标准流程,相信大多数读者可以理解。

写了这这长长的一段,是为了更好地问答接下来的问题。

服务器A访问服务器B公网IP

Source IP =10.1.1.2

Destination IP=1.1.1.1

1.A要访问1.1.1.1:80,查询路由表发现要发给网关10.1.1.1

2.网关10.1.1.1发现A发给自己的IP报文需要NAT,源IP =10.1.1.2需要做动态NAT映射,A使用随机端口56012,于是就动态生成了一个NAT表项:

Dynamic Entry1.1.1.1:56012 ——— 10.1.1.2:56012

3.NAT设备将IP报文的Source IP做了以上的修改,Source IP =1.1.1.1

Source IP =1.1.1.1 

Destination IP=1.1.1.1

4.NAT发现目的IP =1.1.1.1 竟然和上文的静态表项相匹配,毫不犹豫地将目的IP 做了替换,替换后的IP报文:

Source IP =1.1.1.1

Destination IP=10.1.1.3

5.查询路由表继续将IP报文转发给服务器B

6.返程的流量处理方法和1-4类似,也是经过两次NAT地址变换(源IP、目的IP),最终达到服务器A

 

Hairpin技术

上文的两次NAT转换使用了Hairpin技术。

一般情况下,从LAN接口收到的流量,只会转发到WAN接口上去,而不能再转发到LAN接口,这种限制是为了避免流量的环路可能。

但是服务器A与服务器B都处于LAN接口上,A使用公网IP访问服务器B,必然先将流量通过LAN接口发给NAT设备,NAT设备做了两次NAT变化之后,必然要把流量从LAN接口发回来,为了实现这种访问,这里打破了上文的限制,称这种技术为Hairpin,分叉技术。

写完这个答案,留给读者一个问题,如果服务器B主动访问Internet上的一台服务器2.2.2.2:443,NAT设备上只有静态NAT表项:StaticEntry 1.1.1.1:80 ——- 10.1.1.3:80

NAT设备上没有配置动态NAT,请问服务器B可以访问Internet吗?

服务器无法访问Internet,静态映射表只用于服务器B被动提供服务。

服务器B可以使用端口80作为源端口吗?

80端口作为知名(well-known)端口,用于被动响应端口,操作系统会禁止应用程序使用80端口作为源端口,而是让应用程序使用49152-65535(private port)端口范围内的随机端口。

而应用程序如果使用49152-65535端口内的任意端口作为源端口,自然不会匹配到静态NAT表项,加上NAT设备没有配置动态NAT,所以服务器B访问Internet的报文将以SourceIP = 10.1.1.3被转发到Internet上去,但由于10.1.1.3是私有IP,即使到达Internet上的服务器,最终也无法返回。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142610.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • excel宏编程 c语言,宏(巨集)

    excel宏编程 c语言,宏(巨集)宏(Macro,巨集),是一种批处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作…

    2022年6月8日
  • R语言入门-安装R和Rstuido软件

    R语言入门-安装R和Rstuido软件安装R和Rstuido软件R语言是用于统计分析,图形表示和报告的编程语言和软件环境;Rstudio是编辑、运行R语言的最为理想的工具之一。1、官网下载R安装包  下载地址为:https://cran.r-project.org  进入链接,如下图所示,在页面顶部提供了三个下载链接,分别对应三种操作系统:Windows、Mac和Linux。请选择自己操作系统对应的链接,接下来我将以wi…

    2022年6月27日
  • 0基础Java自学之路

    0基础Java自学之路前言最近逛知乎的时候,经常看到有人在问“0基础如何自学Java”、“干了几年**,想转行干Java靠谱吗”等问题。不禁让我回想起了自己当初自学Java的日子,因此在这个周末花了点时间,整理了这篇文章,希望对这些正打算自学Java的或者打算转行Java的人有点帮助。我的自学之路先告诉你们我的自学过程可能让你们有点参考。大三的时候,班主任请了2个已经拿到offer的实验室同学来跟…

    2022年6月20日
  • RPN网络代码解读

    RPN网络代码解读1.说在前面的话在目标检测领域FasterRCNN可以说是无人不知无人不晓,它里面有一个网络结构RPN(RegionProposalNetwork)用于在特征图上产生候选预测区域。但是呢,这个网络结构具体是怎么工作的呢?网上有很多种解释,但是都是云里雾里的,还是直接撸代码来得直接,这里就直接从代码入手直接撸吧-_-||。首先,来看一下FasterRCNN中RPN的结构是什么样子的吧。…

    2022年6月23日
  • html的网页代码_html字体代码大全

    html的网页代码_html字体代码大全常用HTML代码解释 一、文字1.标题文字<h#>……….</h#>#=1~6;h1为最大字,h6为最小字 2.字体变化<font>……….</font>【1】字体大小<fontsize=#>……….</font>#=1~7;数字愈大字也愈大【2】指定字型<fontface=…

    2022年9月23日
  • connectionstring写法「建议收藏」

    connectionstring写法「建议收藏」<connectionstrings><br><addname="ConnectionStringName"connectionstring="DataSource=服务器名;InitialCatalog=数据库名;UserID=用户;Password=密码"></add>providerName="System.Data.SqlClie

    2022年7月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号