计算机网络——网络地址转换(NAT)技术

目录

前言

前篇

引言

SNAT(Source Network Address Translation)源网络地址转换

SNAT流程

确定性标记

DNAT(Destination Network Address Translation,目标网络地址转换)

NAT技术重要性


前言

本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。

这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。

可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。

家庭网络如何通过路由器上网?源地址转换和目标地址转换时什么?_哔哩哔哩_bilibili

前篇

  1. 计算机网络——MAC地址和IP地址-CSDN博客
  2. 计算机网络——交换机和路由器-CSDN博客

引言

NAT(Network Address Translation),是指网络地址转换

在两个不同家庭中,通过路由器接入的两台电脑,IP地址都是192.168.1.10。同时访问互联网上的同一个网站,为什么IP地址不会冲突?SNAT和DNAT又是什么?

SNAT(Source Network Address Translation)源网络地址转换

计算机网络中数据包如何发送是根据目标IP进行路由的。如果同一个网络中出现两个相同的IP则ARP表会出现混乱,数据包发送到哪台主机上将变成不确定性行为。

那怎么解决这个问题?答案很明显,就是让数据包从路由器发出去的时候,变成不同的IP地址不就可以了。这个技术叫源地址转换技术,我们称之为SNAT。

SNAT流程

为了简化理解

假设路由器的接口接入的IP地址为公网IP比如221.8.1 4.91

我们的内网计算机地址是192.168.1.4,网关地址为192.168.1.1。(网关的地址一般是.1或者.254,为了方便)

我们访问的远端IP为36.152.4 4.96。

首先,计算机发送一包数据出来到路由器上,在这包数据的网络层有两个重要的信息,一个是源IP192.168.1.4点时,另一个是目标IP36.152.44.96。

路由器拿到这一包数据时,需要执行源地址转换SNAT,把源IP改一下,改成WAN口的公网IP221.8.1 4.91发送出去。

服务器收到了数据处理完之后需要回复,则把源IP作为目标IP发送回来。

路由器收到回包,执行反向SNAT,再把目标IP改成192.16 8.1点时发送给了家庭中的计算机,一次通信完成。

看到这个过程你是不是觉得很简单,但是事实比这个要复杂一些。(还是看视频容易理解,推荐先看视频,理解了再存下笔记)。

确定性标记

假设家庭中有两台计算机,另一台计算机的IP地址为192.168.1.11。他们俩同时访问同一个网站,发送了两包数据到路由器上,路由器执行SNAT发送出去,看来没什么问题。

但是回来的数据包怎么办?因为回来的数据包的目标IP都是221.8.1 4.91。

如何从中区分出来两台计算机的数据包?所以这样看只关注IP地址是不行的,还需要增加一些确定性的标记。这时就要把关联的属性再往下扩展一层,扩展到传输层。

我们以最常用的传输层协议TCP协议为例

TCP协议有两个关键属性,源端口和目标端口。

这时候我们的源地址转换就变成了修改源IP和源端口,并将修改后的端口号和源IP加源端口形成映射关系。

比如主机一和主机二的源端口都是12345(比如两个主机上都是QQ占用了该端口)

修改后主机一的源端口变为23456,主机二变为34567

在返回包中,根据目标端口号是23456还是34567,区分出来是主机一还是主机二的包。

并且在反向SNAT的时候,把目标端口号改回。

除了TCP协议外。 UTP协议也是同样的道理,通过IP加端口进行关联。

但是我们常用来检测目标连通性的Ping命令使用的是ICMP协议。

它没有端口信息,则需要使用协议中的type加code来代替端口进行关联。(可以看下我抓包实验中的截图,有一个类型)。计算机网络——抓取icmp包-CSDN博客

其他的协议也都是类似的道理,通过协议特定的标记来进行关联。

DNAT(Destination Network Address Translation,目标网络地址转换)

DNAT名为目标地址转换,顾名思义跟SNAT相反,DNAT是把目标地址修改的技术。

DNAT有什么用呢?

如果我们的内网计算机对外提供服务,公网上发过来的请求不能直接到达内网计算机。我们就需要路由器用DNAT技术帮我们转发请求。DNAT就是把公网IP转换为我们的内网IP。

比如我们内网有一台主机上有一个Web服务监听了80端口。

我们需要在路由器上配置一个DNAT,内容为访问公网地址的8080端口,帮我们转到计算机1,也就是192.168.1.10的80端口。

则当访问数据包从WAN口进入后,路由器执行DNAT修改目标地址为192.16 8.1点,修改目标端口为80,把数据包转发给了计算机。

NAT技术重要性

NAT技术深入到我们生活的方方面面,小到家庭网络,大到庞大的运营商网络、云计算平台,都通过net技术一层层的将我们的网络进行了分割,在IPV4地址严重匮乏的今天,我们的计算机网络仍旧能正常的运转,多亏了NAT技术的存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15 Python进阶: random和pyecharts

Python random 模块主要用于生成随机数。 random 模块实现了各种分布的伪随机数生成器。 要使用 random 函数必须先导入: import randompython random 模块的一般用法 Python中的random模块提供了生成伪随机数的功能,可以用于模拟、游戏开发、密码学…

【Spring Boot 源码学习】SpringApplication 的 run 方法核心流程介绍

《Spring Boot 源码学习系列》 SpringApplication 的 run 方法核心流程介绍 一、引言二、往期内容三、主要内容3.1 run 方法源码初识3.2 引导上下文 BootstrapContext3.3 系统属性【java.awt.headless】3.4 早期启动阶段3.5 准备和配置应用环境3.6 打印 Banner 信息3.7 新建应用…

TCP 粘包

从应用层到 TCP 传输层的多个数 据包是一连串的字节流是没有边界的,而且 TCP 首部并没有记录数据包的长度,所以 TCP 传输数据的时候可能会发送粘包和拆包的问题;而 UDP 是基于数据报传输数据的,UDP 首部也记录了数据报的长度&…

Blender表面细分的操作

在使用Blender的过程中,刚开始创建的模型,都会比较少面,这样操作起来比较流畅,减少电脑的计算量,当设计快要完成时,就会增加表面细分,这样更加圆滑,看起来更加顺眼。 比如创建一个猴头,它会默认显示如下: 从上图可以看到,有一些表面会比较大,棱角很多。 这时候你…

java声明一个日期类MyDate

声明一个日期类MyDate,包含如下方法: * - boolean isLeapYear():判断是否是闰年 * - String monthName():根据月份值,返回对应的英语单词 * - int totalDaysOfMonth():返回这个月的总天数 * - int totalDay…

win11如何重新安装应用商店,怎么重装应用商店

win11系统内置了应用商店,相当于手机的应用商城,用户们想要下载软件时,就会前往应用商店搜索下载。如果我们因为误操作,删除了win11应用商店,或者是应用商店出现闪退、卡顿等问题,这个时候,最好…

插值算法-代码实现

1、 import java.util.HashMap; import java.util.Map;public class Interpolation {public static void main(String[] args) {// 定义给定的 XML 字段值Map<String, double[]> xmlValues new HashMap<>();xmlValues.put("faceSize", new double[]{10…

MyBatis-Spring整合

引入Spring之前需要了解mybatis-spring包中的一些重要类&#xff1b; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring&#xff1f; MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…

Python学习笔记23 - 目录操作

os模块操作目录相关函数 os.path模块操作目录相关函数 案例1 —— 列出指定目录下的所有.py文件 案例2 —— walk()

掌握ChatGPT:高效撰写科研论文的必备利器

ChatGPT无限次数:点击直达 掌握ChatGPT&#xff1a;高效撰写科研论文的必备利器 在当今科研领域&#xff0c;撰写高质量的论文是每位研究者不可或缺的任务。然而&#xff0c;研究者常常在文稿撰写过程中遇到写作思路不清晰、表达不够准确甚至同义词重复等问题。针对这些挑战&a…

MySQL 8.0 字符集问题导致报错

报错&#xff1a; ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE) MySQL 8.0引入了一些新的字符集和排序规则&#xff0c;并对现有的进行了改进。在MySQL 8.0中&#…

vue大屏

使用viewport方案和postcss-px-to-viewport插件来实现屏幕适配&#xff0c;主要是为了让你的Vue大屏应用在不同尺寸和分辨率的屏幕上都能良好地显示。以下是一个简单的实现步骤&#xff1a; 1.安装 npm install postcss-px-to-viewport --save-dev # 或者 yarn add postcs…

内网渗透-红队内网渗透工具(Viper)

红队内网渗透工具(Viper) 最近发现一款很强大的内网渗透工具Viper 接下来我给大家介绍一下具体的安装过程&#xff0c;这里我在kali上进行安装 &#xff08;1&#xff09;首先打开kali终端&#xff0c;切换到root用户,确认以下操作都在root用户下操作&#xff0c;sudo -s 安装…

Leetcode 3112. Minimum Time to Visit Disappearing Nodes

Leetcode 3112. Minimum Time to Visit Disappearing Nodes 1. 解题思路2. 代码实现 题目链接&#xff1a;3112. Minimum Time to Visit Disappearing Nodes 1. 解题思路 这一题的话思路上来说就是一个最优路径的问题&#xff0c;我们通过一个遍历&#xff0c;即可获得从0节…

【MATLAB源码-第16期】基于matlab的MSK定是同步仿真,采用gardner算法和锁相环

1、算法描述 **锁相环&#xff08;PLL&#xff09;** 是一种控制系统&#xff0c;用于将一个参考信号的相位与一个输入信号的相位同步。它在许多领域中都有应用&#xff0c;如通信、无线电、音频、视频和计算机系统。锁相环通常由以下几个关键组件组成&#xff1a; 1. **相位…

基于springboot实现医疗病历互换系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现医疗病历交互系统演示 摘要 进入21世纪&#xff0c;计算机技术迅速向着网络化的、集成化方向发展。传统的单机版应用软件正在逐渐退出舞台&#xff0c;取而代之的是支持网络、支持多种数据信息的新一代网络版应用软件&#xff0c;形成了信息化的社会。信息…

2024最新 PyCharm 2024.1 更新亮点看这篇就够了

2024最新 PyCharm 2024.1 更新亮点看这篇就够了 文章目录 2024最新 PyCharm 2024.1 更新亮点看这篇就够了&#x1f680; PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01;摘要引言 &#x1f680; 快速掌握 Hugging Face&#xff1a;模型与数据集文…

(八)C++自制植物大战僵尸游戏植物基类讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 在植物大战僵尸游戏中&#xff0c;最重要的两个类别就是植物与僵尸。植物可以对僵尸进行攻击&#xff0c;不同的植物攻击方式千差万别&#xff0c;但是不同植物又有许多相同的属性。在基类&#xff08;父类&#xf…

mina通信库解决分包粘包CumulativeProtocolDecoder

mina通信库解决分包粘包时解包用CumulativeProtocolDecoder https://www.cnblogs.com/tankaixiong/archive/2013/03/18/2965527.html public class FrameDecoder extends CumulativeProtocolDecoder {Overrideprotected boolean doDecode(IoSession ioSession, IoBuffer ioBuf…

SQL Server数据库常用语句

目录 1. 建库语句 2. 删库语句 3. 创建数据表 4. 创建视图 5. 约束语句 5.1 主键约束&#xff08;PRIMARY KEY&#xff09; 5.2 外键约束&#xff08;FOREIGN KEY&#xff09; 5.3 非空约束&#xff08;NOT NULL&#xff09; 5.4 唯一约束&#xff08;UNIQUE&#xff…