CS144(七)
CS144(七)
NAT
NAT(Network Address Translation)是一种网络地址转换技术,通常由路由器或防火墙设备
执行,主要用于在多个设备共享一个公共IP地址时解决地址匮乏的问题
-
地址转换:
NAT设备通过将内部网络的私有IP地址转换为公共IP地址,允许多个设备共享一个或少量的公共IP地址访问互联网
SNAT(Source NAT):对源地址进行转换(用于内网设备访问外网
DNAT(Destination NAT):对目标地址进行转换(用于外网访问内网服务)
-
端口转换:
NAT设备在转换IP地址时,同时修改TCP/UDP的源或目标端口,以区分不同的连接:
内网设备
192.168.1.2:12345
向外访问时,NAT设备将其转换为203.0.113.1:54321
响应数据回到 NAT 设备后,它再将端口号和IP地址翻译回原始值
NAT设备需要跟踪每一个TCP连接的状态,以便正确处理后续的通信包
NAT设备会为每个连接创建映射条目,包括内网地址和公网地址的对应关系
内网设备向外发送TCP连接时,NAT设备:
- 修改源IP和源端口,记录映射关系
- 转发修改后的
SYN
包 - 返回的
SYN-ACK
包中,NAT设备将目标IP和目标端口转换回内网地址
连接终止:
- 当TCP连接正常终止(
FIN
或RST
),NAT设备会删除对应的映射条 - 如果TCP连接非正常终止,映射条目会因超时被清除
eg:
1.内网设备 192.168.1.2:12345 向目标服务器 8.8.8.8:80 发起HTTP请求。
2.NAT设备 203.0.113.1 执行以下步骤:
修改源地址和端口:192.168.1.2:12345 → 203.0.113.1:54321。
转发请求到 8.8.8.8:80。
3.响应数据返回时:
NAT设备根据映射表将 203.0.113.1:54321 转换回 192.168.1.2:12345。
数据包被发送回内网设备
eg: 假设我的iPad、iPhone 和 Apple Watch 都连接到同一个路由器的 Wi-Fi 时,向外连接互联网时,它们的公共IP地址是相同的
-
内网设备的私有IP地址
设备连接到路由器后,路由器会通过 DHCP(动态主机配置协议) 分配一个私有IP地址给每个设备,例如:
- iPad:
192.168.1.2
- iPhone:
192.168.1.3
- Apple Watch:
192.168.1.4
这些私有IP地址只在局域网内有效,外部网络无法直接访问这些地址
- iPad:
-
NAT进行地址转换
当这些设备向互联网发起连接时,路由器会将它们的私有IP地址和端口转换为路由器的公共IP地址。例如:
- iPad访问某网站,路由器会将
192.168.1.2:12345
转换为203.0.113.1:54321
(假设路由器的公共IP是203.0.113.1
) - iPhone访问同一网站,路由器会将 192.168.1.3:23456 转换为 203.0.113.1:65432
通过不同的端口号区分每个设备的会话,从而实现多设备共享一个公共IP
- iPad访问某网站,路由器会将
TCP 和 UDP 的端口号是一个 16 位无符号整数,因此端口号的范围是 0 到 65535,即最大端口号是 65535
HTTP
eg:假设浏览器输入http://www.baidu.com 浏览器
- 会打开与服务器百度的连接,并发送对该站点主页的GET请求,
- 服务器接收请求后,会检查其是否有效,用户是否有权限访问该页面,然后发送响应
- 响应有一个与之关联的数字代码;如服务器对GET请求发送200 OK响应,这意味着请求已被接收,响应的其余部分包含文档数据
DNS
http 默认是80;
File是应用层指定想要请求的文件
可以不输入域名,使用http://171.66.3.9/ 来代替http://cs144.scs.stanford.edu
- 域名解析:将域名转为IP地址
- 反向解析:将IP地址转为域名
DNS架构:
如上图:
- 根域名服务器:负责顶级域(如
.com
、.org
)的解析,顶级层次以.
表示 - 顶级域名服务器(TLD):负责管理顶级域(如
.com
) - 权威域名服务器:存储某个具体域名的解析记录
- 递归解析器:客户端的请求首先到达递归解析器,它负责递归查询过程
递归查询eg:
- 客户端请求
www.example.com
- 递归解析器先问根域名服务器获取
.com
的TLD服务器 - 再向
.com
的TLD服务器获取example.com
的权威DNS服务器 - 向权威DNS服务器获取最终的IP地址
DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是一个网络管理协议,用于动态分配IP地址及其他网络配置参数(如网关、DNS服务器等)给设备,使它们能够在网络中进行通信
- 自动分配IP地址
- 提供网络配置参数
- 子网掩码:确定网络部分和主机部分的范围
- 网关地址:为设备指定默认路由
- DNS服务器地址:设备用来解析域名的服务器
eg:
网络连接时发生了什么?
当 Ubuntu 系统连接到路由器(通过有线或 Wi-Fi),它会通过内置的 DHCP 客户端向路由器发送请求
路由器充当 DHCP 服务器,自动分配一个 IP 地址及其他网络参数给你的 Ubuntu 系统
Ubuntu 系统自动获取一个 IP 地址,例如 192.168.1.10
其他重要的网络参数:
子网掩码,例如 255.255.255.0
默认网关(通常是路由器的 IP 地址,如 192.168.1.1)
DNS 服务器(例如 8.8.8.8 或路由器作为中继 DNS)
子网掩码作用:
子网掩码用于判断两个设备是否在同一子网中
-
如果两台设备的网络部分相同,则它们位于同一子网,可以直接通信
-
如果网络部分不同,则需要通过路由器或网关中转通信
本机 IP:192.168.1.10 子网掩码:255.255.255.0 目标设备 IP:192.168.1.50 网络部分:两者都是 192.168.1 结论:在同一子网,可以直接通信 如果目标设备的 IP 是 192.168.2.50 网络部分不同:192.168.1 ≠ 192.168.2 需要通过路由器(默认网关)通信
配置默认网关:
当两台设备位于不同的子网时,数据包必须通过默认网关中转
默认网关负责将数据转发到其他子网或互联网
eg:
判断为不同子网:数据包发送到默认网关(192.168.1.1),由网关负责转发
1.数据包从 Ubuntu 系统发送到默认网关(路由器 192.168.1.1)
2.路由器检查目标 IP 地址,确定需要将数据包转发到外网
3.路由器使用 NAT(网络地址转换)将本地 IP 192.168.1.100 映射为路由器的公网 IP(例如 203.0.113.1),并将数据发送到 110.242.68.4(假设目标地址)