《TCP/IP详解卷1:协议》学习笔记---NAT
NAT
NAT,Network Address Translation网络地址转换,通常还包括NAPT(把端口也转换了)
解决问题:IP地址枯竭
功能:
- 转换:IP地址和端口号的转换
- 包过滤:取决于NAT行为和是否存在NAT映射,是否把数据包传入NAT映射对应的内网主机
实现:
- 当内网主机需要发送数据包,NAT就会创建一个NAT映射。服务器回复内网主机会使用到NAT映射
- NAT编辑器:需要修改数据包中IP地址,UDP/TCP的端口号字段,重新计算校验和,有些应用协议使用到的IP也要进行修改,有这样能力的NAT称为NAT编辑器
- TCP:
- NAT检测到传出的SYN包,建立NAT映射,激活连接计时器
- ACK到达,清除连接计时器,激活会话计时器(分钟换成小时)
- ACK在超时前没到达,删除NAT映射
- NAT检测到交换两个FIN包后或RST包,删除NAT映射
- 非正常关闭连接,NAT在计时器到期后进行探测,向内网主机发送数据包
- 收到ACK则重置会话计时器
- 超时没收到ACK或收到RST包,删除NAT映射
- NAT检测到传出的SYN包,建立NAT映射,激活连接计时器
- UDP:
- NAT检测到内部发送的数据包,建立NAT映射,激活映射计时器
- 对外更新:数据包从内部传到外部,更新映射计时器
- 对内更新(可选):数据包从外部传到内部,更新映射计时器
问题:NAT无法正确处理IP分片,因为只有第一个分片(里面有运输层首部)有端口号信息
NAT行为
圆锥型
-
独立于端点的(完全圆锥型):
- 转换行为:对于所有Y:y(外部主机),X':x'唯一
- 过滤行为:只要存在X':x',就允许所有X:x的数据包传入
-
依赖于地址的(地址受限圆锥型):
- 转换行为:对于不同的Y,不同的X':x'
- 过滤行为:只要X之前发送过数据包到Y,就允许Y的数据包传入X:x,对y没有限制
-
依赖于地址和端口的(端口受限圆锥型):
- 转换行为:对于不同的Y:y,不同的X':x'
- 过滤行为:只要X之前发送过数据包到Y:y,就允许Y:y的数据包传入X:x
对称型:
- 对称NAT:
- 转换行为:对于相同的X:x和不同的Y:y,不同的X':x'
- 过滤行为:只要X:x之前发送过数据包到Y:y,就允许Y:y的数据包传入X:x
位于NAT后的服务器
使用端口转发,像静态NAT映射
发夹和NAT环回:当客户端和服务器都位于同一个NAT后,借用到NAT时会使用全球IP地址。因为某些应用需要全球IP地址来识别对方
NAT穿越
- 针孔:NAT映射
- 打孔:利用针孔使位于NAT之后的两个主机直接通信的方法
- NAT行为是独立于端点为前提,①主机A访问服务器S1,主机B访问服务器S1,类似于登录的概念,分别在自己的NAT打孔;②S1知道了主机A和主机B的外部路由地址,那么主机A和主机B也可以知道对方的外部路由地址,即可进行通信
- NAT行为是其他两种依赖为前提,①主机A、B访问服务器S1;②服务器S1让主机B访问主机A,主机A会过滤,但主机B完成了打孔;③服务器S1让主机A访问主机B,因为主机B已经打孔,所以可以进行通信
STUN
Session Traversal Utilities for NAT,NAT会话穿越应用程序,是一个客户机/服务器协议
- 功能:STUN服务器让客户机找到自己公网地址和NAT行为,提供目的主机的NAT映射外部地址,相当于上面说到的服务器S1
TRUN
Traversal Using Relays around NAT,利用NAT中继的穿越
- 功能:TURN服务器进行为客户机进行转发
- 解决问题:位于对称型NAT后的主机无法通信