1 局域网网段IP

要真正了解NAT就必须先了解现在IPv4地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球唯一的IP 地址。RFC 1918 为私有网络预留出了三个IP 地址块,如下:

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
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。

2 NAT

2.1 NAT设备如何区分不同的私网内IPv4的Host呢?

IPv4地址只有32位,满打满算只有42.9亿个地址,还要去掉保留地址、组播地址,能用得只有36亿左右,IPv4很早就被列强瓜分完毕,感谢有NAT这项技术苦苦支撑,我们还可以继续在互联网遨游。

公司局域网、机构局域网、个人局域网可以使用局域网IPv4地址(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16),然后在各个局域网的边界WAN口使用一个或多个公网IPv4进行一对多的转换。

如果是一对一转换,那压根节省不了IPv4地址空间;所以一般NAT都是一对多的,即一个公网IPv4映射多个私网IPv4,那问题来了,NAT设备如何区分不同的私网IPv4 的host呢?

答案是:NAT使用基于session 转换规则

  • 对于TCP/UDP使用:Host 's 私有IPv4 + Port <------> NAT 公网IPv4 + Port
  • 对于ICMP使用:Host 's 私有IPv4 + session ID <------> NAT 公网IPv4 + session ID

由于session ID 在NAT设备上是独一无二的,所以NAT可以很容易区别局域网内部的不同host。

至于其它传输协议,NAT使用的也是类似session ID 的转换规则,即使用可以将不同host 轻易分辨出来的字段做键值,动态创建映射表项,做双向的地址+ KEY 的转换。

2.2 NAT解决的什么问题?

NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者IP掩蔽

NAT是一种网络地址翻译技术,主要是将内部的私有IP地址(private IP)【转换成】可以在公网使用的公网IP(public IP)。

2.2 NAT的来源、定义

NAT(Network Address Translation,网络地址转换)是1994年提出的。

当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

这种方法需要在专用网(私网IP)连接到因特网(公网IP,全球唯一)的路由器上安装NAT软件。

装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。

这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。
有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。
否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。

3 内网穿透技术:=NAT穿透

3.1 定义

3.2 内网穿透技术与NAT的区别

NAT:解决 内网Host访问外网指定Host的问题。(内网Host---->外网Host)

内网穿透技术: 解决 外网Host访问内网指定Host的问题 (内网Host<----外网Host)

3.2 内网穿透实现方案比较

3.2.1 花生壳的内网穿透思路

花生壳DDNS是将用户的动态IP 地址映射到一个固定的域名上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP 地址传送给位于服务商主机上的服务器程序,服务项目器程序负责提供 DNS 服务并实现动态域名解析。DDNS 的主要作用就是捕获用户每次变化的 IP 地址,然后将其与域名相对应,这样其他上网用户就可以通过域名来与用户交流了。

X 参考文献

[网络]NAT与内网穿透技术初探【待续】的更多相关文章

  1. 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区

    1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...

  2. 手写内网穿透服务端客户端(NAT穿透)原理及实现

    Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...

  3. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

  4. 【网络】内网穿透方案&FRP内网穿透实战(基础版)

    目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...

  5. 如何使用 frp 实现内网穿透

    这有一个专注Gopher技术成长的开源项目「go home」 背景 作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了. ...

  6. 内网穿透&UDP打洞

    这两天找度度重新回忆了一下关于内网穿透的事情,在百度文库上找到了两三篇写的比较通俗易懂的文章,把内网穿透做个简单总结. 首先文章建议 Cone NAPT 还有希望,要是 Symmetri NAPT 就 ...

  7. [svc]frp内网穿透

    什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...

  8. QuantumTunnel:内网穿透服务设计

    背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...

  9. cpolar——安全的内网穿透工具

    什么是cpolar? cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务. 它能用在哪些场景? 微信公众号开发,实时断点调试微信消息 ...

  10. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

随机推荐

  1. ESP32(WeMos D1 R32)开发资料

    1.乐鑫官网 2.ESP32踩坑 ESP32控制摇杆,定义sw的引脚时一定要设置为上拉才行. 3.ESP32入门之arduino IDE环境搭建 4.ESP32 MicroPython编程官网文档 E ...

  2. pytorch基础 自动求导

    1.把pytorch当成是numpy来用就行 2. 一个典型的张量是这样定义的. import pytorch as tt n=tt.tensor([1,2,3],dtype=True,requirg ...

  3. vscode 远程服务器同步

    1.下载 sftp 2. 在项目目录下新建sftp.json文件 3. 编辑sftp.json文件 { "name": "My Server", "h ...

  4. IDEA的安装与使用

    IDEA官网 进入该链接下载社区版就行 下载过后安装 安装之后写第一个代码 直接右键src-new-Java class 写入psvm 再写sout 再写输出的话就可以完成 非常方便

  5. NodeJS - XSS-Attribute

    参考:https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-attribute-xss-attribute/kbid-3-x ...

  6. Linux远程挂载目录

    Linun远程挂载文件目录 需求:有两台服务器,一个是nginx,一台服务器是weblogic,图片上传到weblogic服务器上,但是需要nginx做代理,可是nginx访问不到weblogic服务 ...

  7. 10.Java中Map的entrySet() 详解以及用法

    一.Map.entry是什么? Map是java中的接口,Map.Entry是Map的一个内部接口. 此接口为泛型,定义为Entry<K,V>.它表示Map中的一个实体(一个key-val ...

  8. Hive不能载入本地数据:FAILED: SemanticException Line 1:17 Invalid path

    1.问题描述: (1)问题示例: hive (test)> create table t_textfile(c1 string,c2 int,c3 string,c4 string)      ...

  9. Oracle 取Group By 第一条

    select *from (select emp.*,row_number() over(partition by deptno order by rownum) cn from emp)where ...

  10. unity踩坑集锦

    1.AB包加载,如果项目没有这个tag,那么就匹配不上,和代码一样.2.unity打包安卓topbar想显示出来怎么做?:不渲染安全区域外  3. unity编辑器报错 : Expanding inv ...