首页 > 其他分享 >第十九篇:NAT协议,上网绕不开的协议

第十九篇:NAT协议,上网绕不开的协议

时间:2024-10-09 11:54:15浏览次数:3  
标签:协议 IP 局域网 绕不开 NAT IP地址 设备 路由器

通过前面的介绍,我们知道每台主机上网都要通过DHCP协议从运营商的DHCP服务器哪里获得一个未被其他主机使用的IP地址;那么这个IP地址是内网IP还是外网IP呢?

答案是内网IP!!!

我们可以看到,家庭的无线Wi-Fi使用的局域网IP,只有一个路由器有一个外网IP;如此两个不同的局域网里的设备IP可能是一样;假设有两个局域网A和B,小明的电脑在局域网A,其IP地址是192.168.1.3;小王的电脑在局域网B,其IP地址也是192.168.1.3;那么小明和小王现在想通信,但是他们使用的IP地址是一样的,路由器根本就不知道如何路由报文;无法进行通信。有同学会问:为什么不每台设备都用公网IP,每台设备的IP都独一无二,那不解决问题了吗?我只能说:同学,你想得太简单了。全世界的IP一共40多亿,能用的公网IP更有限,中国的可用的公网IP也才3到4亿,中国十几亿人口,有的人不但有多台电脑,还有多台手机等电子设备,如果每台设备都用公网IP,显而易见,IP地址完全不够用!那么怎么办呢?有解决办法吗?

为了解决这个问题,下面我将学习一个新的协议:NAT协议

① NAT协议定义

(Network Address Translation),是指网络地址转换是用于在局域网中使用私有地址,在连接互联网时转而使用全局IP地址的技术。

② NAT的工作机制

图中,主机A发送一个信息出去,报文里面有源IP地址,这个IP地址只是内网地址,在信息经过路由器的时候,路由器会将源IP地址替换成路由器对外的公网IP地址。

那么问题来了,局域网里面有多台主机设备,如果所有的内网IP都转换成公网IP,那么假设我在搜索引擎里面输入“搞笑视频”进行搜索,搜索服务器返回的搜索结果应该返回给局域网的哪台主机呢?

我们自然的想到,在路由器里面建一张表,比如这样:

应答报文只通过外网IP地址根本就无法判断信息要返回给哪台主机

如此,可以加一个端口号解决。

1)当局域网的某一台主机请求服务器的时候,请求报文经过NAT路由器,报文的源IP和源端口都将被更改;形成一个局域网IP:端口和公网IP:端口的记录;该记录放在一个NAT表里面;

这种转换表在 NAT 路由器上⾃动⽣成。例如,在 TCP 的情况下,建⽴ TCP 连接⾸次握⼿时的 SYN 包⼀经发出,就会⽣成这个表。⽽后⼜随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。

  • 2)当请求被应答,应答报文到达路由器的时候,路由器根据报文的目的IP+目的端口去NAT表里面进行查询,然后将目的IP和目的端口改为局域网端的IP和端口

③ NAT的潜在问题

由于 NAT/NAPT 都依赖于⾃⼰的转换表,因此会有以下的问题:

  1. 外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT 转换表没有转换记录。
  2. 转换表的⽣成与转换操作都会产⽣性能开销。
  3. 通信过程中,如果 NAT 路由器᯿启了,所有的 TCP 连接都将被᯿置。

④ 解决NAT的潜在问题

解决的⽅法主要有两种⽅法:

  • 改⽤ IPv6

IPv6 可⽤范围⾮常⼤,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了,但是IPv6 普及速度还需要⼀些时间。

  • NAT 穿透技术

NAT 穿越技术拥有这样的功能,它能够让⽹络应⽤程序主动发现⾃⼰位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为⾃⼰建⽴端⼝映射条⽬,注意这些都是 NAT设备后的应⽤程序⾃动完成的。

也就是说,在 NAT 穿透技术中,NAT设备后的应⽤程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建⽴好映射,这样就不像以前由 NAT 设备来建⽴映射了。

说⼈话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信,就不需要 NAT 设备来进⾏转换了。

标签:协议,IP,局域网,绕不开,NAT,IP地址,设备,路由器
From: https://blog.csdn.net/u013501979/article/details/142783061

相关文章

  • PatriotCTF2024 Web Impersonate
    源码:#!/usr/bin/envpython3fromflaskimportFlask,request,render_template,jsonify,abort,redirect,sessionimportuuidimportosfromdatetimeimportdatetime,timedeltaimporthashlibapp=Flask(__name__)server_start_time=datetime.now()server_s......
  • 【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 理解网络拓扑、虚拟机NAT、桥接
    理解网络拓扑、虚拟机NAT、桥接一、以校园网为例,物理机连接后进行ping操作首先于物理机本身的WLAN设置中查看当前连接的WiFi属性,获取本机获取到的IP地址使用win+R打开命令行,使用ping操作ps:校园网已有加密处理二、以同学的手机热点为例,物理机连接后进行ping操作操作同上......
  • 前端的全栈混合之路Meteor篇:分布式数据协议DDP深度剖析
    本文属于进阶篇,并不是太适合新人阅读,但纯粹的学习还是可以的,因为后续会实现很多个ddp的版本用于web端、nodejs端、安卓端和ios端,提前预习和复习下。ddp协议是一个C/S架构的协议,但是客户端也同时可以是服务端。什么是DDP?DDP(DistributedDataProtocol)是Meteor框架中......
  • 大麦协议新版
    1.网络请求:您可以使用合适的编程语言和库来发起与大麦网的网络请求。通常使用HTTP或HTTPS协议进行通信。例如,在Python中,您可以使用requests库来发送GET或POST请求。```pythonimportrequestsurl="https://www.damai.cn/api/getTickets"params={  "e......
  • dy私信协议
    在开发抖音私信协议时,您需要考虑以下几个方面:1.了解抖音的API文档阅读:首先,查阅抖音开放平台的API文档,了解私信功能的具体接口和使用权限。权限申请:确保您已申请到相关的API访问权限。2.私信功能设计用户身份验证:确保用户在发送私信之前完成身份验证。消息格式:确定消息......
  • dy关注协议
      首先这里有一篇关于Android逆向工程的文章,反编译了抖音的libuserinfo.so文件的种种加密入口限制,使得自己的Android程序可以调用该so文件直接加密校验。这样的效果就是无需真正意义破解加密算法。这里直接讲抖音的加密算法本身。火山小视频也一样。我们拿来进行研究分析学......
  • 每日读则推(六)——Consider victims of natural disasters
    "Weneedtobethinkingabout[victimsofnaturaldisasters]longafterthoseinitial                           n.受害者         n.灾难,灾害              ad......
  • 嵌入式通信协议-- I²C 协议篇(IIC)
    目录总述: 1.1主机和从机1.2发送器和接收器1.3总结2.1I²C通信过程第一步:主机发送起始信号:第二步:主机发送从机地址(寻址):第三步:从机应答信号:第四步:发送器发送数据:第五步:接收器发送应答信号:第n步:循环步骤4、5最后一步:主机发送停止信号:3时钟同步4.三种经典时序......
  • 使用LPD协议来共享打印机
    平台:WIN7、WIN10问题:win10上共享了打印机,WIN7电脑无法访问,连接时提示0x0000011B错误,我记得这是WIN10里安装了某个补丁造成的BUG,无法卸载补丁,改用LPR协议访问共享打印机。方法:一、启动LPD服务。win7和win10上均打开“控制面板”,“程序和功能”,“启动或关闭Windows功能”,下拉找到......