NAT技术、代理服务器

NAT/NAPT技术

NAT的全称是network address translation,网络地址转换。NAT 能在对外通信时够将源 IP 转为新源 IP,对内通信时将目的ip转换成新目的ip,实现这个操作,靠的是地址转换表

但NAT的说法其实是不准确的,因为多个内网主机和同一个服务器通信,这时路由器的地址转换表中的多个条目,其源ip地址被转换成的的新源ip是相同的,那接收响应时目的ip就不知道转换成哪一个新目的ip,因为有多个条目,所以得引入端口,这就是NAPT,全名网络地址端口转换,相当于是NAT的完善版,加上端口后,就可以区分内网中的多个主机了

NAPT过程详解

拿客户端A作为例子,客户端B同理,客户端B主要用来体现NAPT的转换方式下可以解决内网中多个主机访问同一服务器的问题。

客户端A在网络层组装好了一个ip报文,其源ip地址10.0.0.10,端口1025,目的ip 163.221.120.9,目的端口80,然后根据目的ip查路由表,命中网关条目,下一跳ip就是10.0.0.1,还有对应发送接口,一起交给数据链路层,网卡驱动查arp缓存,得到网关的mac地址,然后封装mac头和尾,从发送接口发出,单播,其他主机网卡接收一看mac头里的目的mac地址,就丢包,然后网关收到后触发硬件中断,网卡驱动从网卡接收缓冲区中根据ip报头中的ip报文总长度将mac帧读出,然后去掉mac头和尾,IP报文交给ip层,IP层根据目的ip查路由表,这一次命中的也是默认网关,当网关查路由表命中网关条目时,就需要进行地址转换,下一跳ip我比如说是 202.244.174.1,还有对应发送接口,发送接口网卡的ip是202.244.174.37,然后IP层会将ip报文的源ip 10.0.0.10转换成202.244.174.37,源端口变成动态分配的端口,并在地址转换表中添加该次的转换,四元组{源IP 10.0.0.10 ,源端口 1025,目的ip 163.221.120.9,目的端口 80}和 {源ip 202.244.174.37,源端口 1025 ,目的ip 163.221.120.9 ,目的端口 80} 的映射关系条目,然后将转换后的IP报文、下一跳ip、发送接口都交给数据链路层,查arp缓存得到下一跳ip 202.244.174.1对应mac地址,然后封装mac头和尾,写进对应发送接口的网卡发送缓冲区中,最后发送到以太网中,这个网关的一个IP地址是202.244.174.1,我假如说的另一个网卡的ip 是163.221.120.88,那该网关接收到mac帧后,触发硬件中断,解包到ip层,然后查路由表,这次目的ip就在直连网络中,所以命中直连网络条目,网关命中直连网络条目就不用进行地址转换了,下一跳ip就是目的ip 163.221.120.9,还得到对应发送接口 ,然后将ip报文和下一跳ip和发送接口都交给数据链路层,数据链路层查arp缓存得到下一跳ip的mac地址,封装mac头和尾,将mac帧写进发送网卡的发送缓冲区,然后写TDT寄存器通知网卡,网卡发送到以太网中,163.221.120.9服务器收到了之后走协议栈,然后构建响应ip报文,其{源ip 163.221.120.9,源port 80,目的ip 202.244.174.37,目的端口 1025},然后查路由表,命中网关条目,得到下一跳ip 163.221.120.88,发送接口,交给数据链路层添加mac头,从发送接口发出,网关收到后,触发硬件中断解包到ip层,目的ip查路由表命中直连网络,下一跳IP是目的ip202.244.174.37,发送接口对应ip 202.244.174.1,然后封装mac头,发到以太网,网关接收到后,触发硬件中断,解包到IP层,因为网关本身是路由器,实际的目的ip肯定不是网关,所以查地址转换表,然后修改IP报文中的目的ip和目的端口,修改完之后根据目的ip查路由表,命中直连网络,于是下一跳ip是目的ip10.0.0.10,发送接口对应ip 10.0.0.1,一并交给数据链路层,最后主机A收到响应


总结:

1、地址转换发生在网关查路由表命中网关条目时

2、地址转换就是将源ip换成发送接口ip,源port换成动态分配的port,然后将四元组映射加进地址转换表中

NAPT对套接字的影响

tcp套接字

服务器监听套接字是三元组,这就不说了,客户端通信套接字标识的五元组是(客户端—服务器),也就是{tcp,本地IP 10.0.0.10 ,本地端口 1025,对方ip 163.221.120.9,对方端口 80},看服务器端,标识通信套接字的五元组是(某网关发送接口--服务器),也就是{tcp,对方ip 202.244.174.37,对方1025 ,本地ip 163.221.120.9 ,本地端口 80}

udp套接字

假如是udp套接字,那没什么影响,因为udp套接字是无连接的,用三元组标识,没有对方的ip和port

代理服务器

正向代理

正向代理服务器代表客户端向目标服务器发送请求和接收服务器响应。

反向代理

反向代理服务器代表服务器接收客户端请求和发送服务器响应

NAPT和代理服务器的区别

1、从应用上讲, NAPT 技术解决的是 IP 不足的问题. 代理服务器则是具体应用, 比如通过代理服务器进行翻墙
2、从底层实现上讲, NAPT 是工作在网络层, 直接对 IP 地址和端口进行替换. 代理服务器往往工作在应用层
3、从使用范围上讲, NAT 一般在网关部署, 代理服务器可以在局域网做,也可以在广域网做, 也可以跨网

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

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

相关文章

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-45,(知识点:负反馈的作用,基础理解,干扰和噪声的抑制)

目录 1、题目 2、解答 步骤一:明确负反馈的作用原理 步骤二:逐一分析选项 3、相关知识点 一、负反馈的基本原理 二、负反馈对干扰和噪声的抑制机制 三、选项分析与答案 四、扩展思考:如何抑制不同位置的干扰? 总结 题目…

Flutter蓝牙BLE开发完全指南(内含高级功能扩展)

Flutter蓝牙BLE开发完全指南 我将为您提供一个完整的Flutter蓝牙BLE实现方案,包含UI设计、权限处理、设备扫描、连接通信等完整功能。 完整实现方案 1. 添加依赖与权限配置 pubspec.yaml dependencies:flutter:sdk: flutterflutter_blue_plus: ^1.10.0permission_handler…

使用 Canvas 替代 <video> 标签加载并渲染视频

在部分浏览器环境或业务场景下&#xff0c;直接使用 <video> 标签加载视频会出现首帧延迟的情况。以下方法通过 WebGPU Canvas 2D 将视频帧绘制到自定义 Canvas 上&#xff0c;让 <video> 只做解码&#xff0c;WebGPU 接管渲染&#xff0c;通过最小化对象创建 精…

基于Flask的智能停车场管理系统开发实践

在现代城市中&#xff0c;停车难已成为一个普遍问题。为了解决这一问题&#xff0c;我开发了一个基于Python Flask框架的智能停车场管理系统。该系统集成了车牌识别、车位状态监控、收费管理等多项功能&#xff0c;为停车场的智能化管理提供了完整的解决方案。系统功能概述该停…

【C#获取高精度时间】

在C#中&#xff0c;有几种方法可以获取高精度时间&#xff08;高分辨率时间戳&#xff09;&#xff0c;适用于性能测量、计时等需要高精度的场景。以下是几种常用方法&#xff1a; 1. 使用 Stopwatch 类&#xff08;推荐&#xff09; Stopwatch 类提供了最高精度的时间测量&…

Spring Boot + React 打造现代化高校成绩管理系统实战记录

作者: 笙囧同学 发布时间: 2025年7月 技术栈: Spring Boot 3.2.3 React 18 TypeScript 华为云GaussDB 项目类型: 全栈Web应用 开发周期: 30天 代码量: 15000 行 &#x1f4d6; 前言 大家好&#xff0c;我是笙囧同学&#xff01;&#x1f64b;‍♂️ 作为一名计算机科学与技…

形参表不匹配(BUG)

在您的代码中&#xff0c;存在两个主要问题导致"形参表中不匹配"的错误&#xff1a;erase() 函数中的成员变量名错误iterator erase(iterator pos) {// ...size--; // ❌ 错误&#xff1a;成员变量名为 _size 而非 sizereturn iterator(next); }修正&#xff1a;ite…

Spring循环依赖以及三个级别缓存

Spring循环依赖以及三个级别缓存 什么是循环依赖&#xff1f; 循环依赖&#xff0c;顾名思义&#xff0c;就是指两个或多个 Spring Bean 之间相互依赖&#xff0c;形成一个闭环。 最常见也是 Spring 能够“解决”的循环依赖是构造器注入 和 setter 注入 混合或单独使用时&…

《零基础入门AI:OpenCV图像预处理进一步学习》

本文全面讲解OpenCV图像预处理的七大核心技术&#xff08;插值方法、边缘填充、图像矫正&#xff08;透视变换&#xff09;、图像掩膜、ROI切割、图像添加水印、图像噪点消除&#xff09;&#xff0c;每个知识点都配有详细解释和实用代码示例&#xff0c;帮助初学者建立系统的图…

MongoDB的内存和核心数对于运行效率的影响

在 MongoDB 线上生产环境中&#xff0c;CPU&#xff08;核心&#xff09; 和 内存 是两大关键硬件资源&#xff0c;它们在不同的操作场景下发挥着核心作用&#xff0c;共同影响着数据库的性能、稳定性和扩展性。理解它们的作用场景至关重要&#xff0c;是容量规划、性能优化和故…

自己的SAPGUI尝试

为满足用户需求&#xff0c;博主做了一个台账管理程序&#xff0c;尝试用自己的程序做GUI&#xff0c;用SAP 系统做数据库。 运行了半年&#xff0c;程序很nice,用户每天都在高效的使用&#xff0c;已经有十几万的数据。 总结一下这次自己的GUI尝试&#xff0c;好处是C# WINFOR…

高效处理 JSON 数据:JsonUtil 工具类全方位解析与实战

在现代软件开发中,JSON(JavaScript Object Notation)已成为数据交换的“通用语言”——从前后端接口通信到微服务数据交互,从配置文件解析到日志格式化,几乎所有场景都离不开JSON的处理。然而,原生JSON框架(如FastJSON、Jackson)的API往往需要大量重复代码,且空指针、…

Python 库手册:xmlrpc.client 与 xmlrpc.server 模块

xmlrpc.client 和 xmlrpc.server 是 Python 标准库中用于构建基于 XML-RPC 协议的远程过程调用&#xff08;RPC&#xff09;通信模块。xmlrpc.client 用于编写客户端程序&#xff0c;向远程服务器发起方法调用。xmlrpc.server 用于编写服务器端&#xff0c;暴露本地方法供远程客…

渲染篇(一):从零实现一个“微型React”:Virtual DOM的真面目

渲染篇(一)&#xff1a;从零实现一个“微型React”&#xff1a;Virtual DOM的真面目 引子&#xff1a;前端性能的“永恒之问” 在前面两章中&#xff0c;我们已经奠定了坚实的架构基础。我们用“任务调度器”建立了声明式和模块化的编程范式&#xff0c;并通过对比MVC等模式论…

SWC 深入全面讲解

一、核心功能与原理 1. 高性能编译 Rust 架构优势&#xff1a;SWC 基于 Rust 编写&#xff0c;利用 Rust 的性能和并发性优势&#xff0c;编译速度比 Babel 快约 20 倍&#xff0c;比 TypeScript 编译器更快。并行编译&#xff1a;支持多线程并行处理&#xff0c;在四核基准测试…

XML Expat Parser:深入解析与高效应用

XML Expat Parser:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种广泛使用的标记语言,在数据交换、存储和表示中扮演着重要角色。XML Expat Parser 是一个高性能、可扩展的XML解析库,广泛应用于各种编程语言中。本文将深入探讨XML Expat Parser 的原理、特性以及…

【Python】自动化GIT提交

在日常开发中&#xff0c;我们经常需要频繁地向 Git 仓库提交代码。虽然 git add、git commit、git push 这几个命令并不复杂&#xff0c;但重复操作容易出错&#xff0c;也浪费时间。本文将介绍如何使用 Python 脚本自动化完成 Git 提交流程&#xff0c;让开发更高效&#xff…

基于Qlearning强化学习的水下无人航行器路径规划与避障系统matlab性能仿真

目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.算法涉及理论知识概要 5.参考文献 6.完整算法代码文件获得 1.引言 水下无人航行器 (Autonomous Underwater Vehicle, AUV) 的路径规划与避障是海洋探索、资源开发和军事应用中的关键技术。传统的路径规划方…

模块自由拼装!Python重构DSSAT作物模块教程(以杂交水稻为例)

基于过程的作物生长模型&#xff08;Process-based Crop Growth Simulation Model&#xff09;在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decision Support Systems for Agrotechnology Tr…

Java项目接口权限校验的灵活实现

引言 在Java Web开发中&#xff0c;接口权限校验是保护系统资源安全的关键机制。本文将介绍一种灵活、可配置的接口权限校验方案&#xff0c;通过注解驱动和拦截器实现&#xff0c;既能保证安全性&#xff0c;又能灵活控制哪些接口需要校验。 设计思路 实现方案的核心设计要点&…