NAT 是如何将内网 IP 转换成外网 IP 的呢

2023-08-05 17:32:45 +08:00
 shermie

就我目前知道的知识,当我访问一个网站 IP 的时候,数据会在网络中逐级路由出去,来源 IP 和端口会变化,目的 IP 和端口是固定的,最终会有一个网络识别出这个 IP 是属于自己的子网,将外网 IP 转内网 IP ,然后再将数据传递给某一个具体的网卡设备。

我的疑问是: 数据是怎么知道数据该传递给上一级哪个路由,路由又是如何判断这个 IP 是否就是自己局域网中的某个 IP 呢,可能我说的不是很专业,比较迷。

2205 次点击
所在节点    程序员
13 条回复
msg7086
2023-08-05 17:40:25 +08:00
NAT 有映射表啊,发出去的包原路返回的时候查表找原始 IP 。
yoa1q7y
2023-08-05 17:43:30 +08:00
网关
你把这个过程想象成快递分发就容易理解了
从你居住的房屋或者小区开始,一级一级往上传递,到了目的地之后再一级一级往下传递,最终送到收件人手里
busier
2023-08-05 17:44:07 +08:00
NAT 设备的内存里面有个动态的地址映射表,里面记录了源地址转换和出站端口的对应关系!
返回的时候按照这个对应关系自然就知道怎么走了。
thevita
2023-08-05 17:50:15 +08:00
title 和 content 描述的没啥关系啊,

路由的过程就是查表: 依据 packet dip 查找下一跳地址

NAT 也是查表: 会 记录 intra ip, sport, dip, nat port 的对应关系,(表中项不一定,实现会不一样), 这样 回包的时候,就能找到 原来发包的 intra ip 和 sport
adoal
2023-08-05 17:53:07 +08:00
但凡怀着对专门领域知识的敬畏认真看完一本讲网络技术基础知识的书,而不是只凭社交网络上看到的碎片化知识点来猜测,就不会问出这个问题了。别说是 Richard Stevens 、Andrew Tanebaum 的大部头,哪怕是日本人户根勤写的《网络是怎样连接的》这样极其科普的小册子都行啊。
cnbatch
2023-08-05 17:53:39 +08:00
PC ↔ 网关(NAT) ↔ 互联网的各个路由器 ↔ 服务器

简单来说,在这条链路当中,NAT 设备,也就是网关,会记录 内网 IP+端口 ↔ 外网 IP+外网端口 的映射关系,放在映射表内,每次进出只需要查表就知道该怎么转发了

如果觉得描述太简单,还有更多的疑惑,那么不妨直接阅读当时 NAT 的 RFC:
https://datatracker.ietf.org/doc/html/rfc2663
cheng6563
2023-08-05 21:16:19 +08:00
NAT ( Network Address Translation )网络地址转换
从这个名字就能看出原理了吧。NAT 会把你的 IP 端口都转换掉然后记录一个映射表。
lixiang2017
2023-08-05 21:33:48 +08:00
标题疑问跟内容疑问不是同一个。同意五楼,补下基础吧
网络是分层的,要去理解每一层做了什么事
mansurx
2023-08-05 22:21:52 +08:00
LZ 的疑问涉及几个概念,先说 NAT ,你说的场景仅仅是 SNAT ,也就是源地址 NAT ,将报文中 IP 头部的源 ip 转换为另一个地址。另外有 DNAT ,一般是在服务端的出口配置,将目的地址转换为一个内网地址。配置了 NAT 功能的设备会维护一张地址转换表,用于匹配后续的报文。

“数据是怎么知道数据该传递给上一级哪个路由”:这个是路由表的概念,目的端会向邻居路由器发布自己拥有的网段路由。邻居再向它的邻居这样逐级发布,涉及一些动态路由协议计算最优路径、路由聚合等等。

“路由又是如何判断这个 IP 是否就是自己局域网中的某个 IP 呢”:这个就是最近基本的 IP 地址概念,ip 通过掩码来区分网络位和主机位,路由器收到报文之后发现目标 ip 的网络位与当前路由器接口上网络位一致,就代表这个 ip 是这台路由器某个接口直连的,通过直连路由表就可以确认从哪个口转发出去。

以上这几个概念现在有一个很好的学习方式就是找个类似 chatGPT 这样的工具,直接问就行,它能把所有的概念讲的明明白白。
lxh1983
2023-08-06 01:35:02 +08:00
我一直以为会上网的人都会用搜索引擎的呢
ZRS
2023-08-06 01:42:24 +08:00
随便找本网络书籍,看看 NAT 相关章节就懂了
TESTFLIGHT2021
2023-08-06 15:10:17 +08:00
路由器把源地址和端口替换成 WAN 地址和新开端口,同时记住被替换地址和端口
返回的数据包,他把目的 IP 和端口换成内网的那个地址和端口
shermie
2023-08-09 09:23:45 +08:00
@adoal 说的很有道理 没有认真看书

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/962653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX