复习 | 计算机网络

Author Avatar
Aryb1n 3月 09, 2018

NAT

概念

NAT大概是工作在网络层, 维基百科上对它的描述:

是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中

…根据规范,路由器是不能这样工作的…这是个什么意思…

我们连上路由器…然后只登陆一个人的账号, 其他连接的设备就都能上网了, 这个就是家用路由器产生的NAT在起作用

原来内网穿透说的就是NAT穿透

需要在专用网连接到因特网的路由器上安装NAT软件
也就是边界路由器有NAT吧
…防火墙和路由器的区别…到底在哪,,,是不是说路由器可以做防火墙
NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中

RFC 1632 里有NAT相关说明
NAT还有使得内网主机更加安全的作用

CIDR

NAT是为了解决IPv4地址耗尽的方法, 在NAT之前提出了一个CIDR(无类域间路由)
看起来这玩意是为了汇集网络地址

实现

在一本 数据通信与网络 里看到说实现大概是, 需要一张转换表

Basic NAT

使用一个ip地址

这个时候表里只有两列, 就是内网ip和公网ip
在内网主机给外网主机发送一个请求的时候, 表就记下来这样一堆对应关系, 当外网主机在回复内网主机的时候, 就在表里找到外网主机ip对应的内网主机ip, 就OK
但这样子的话缺点也很明显, 就在于, 不能有多台内部主机同时访问同一外网ip, 不然这样子的话, 在回复的时候就找不到这个外网ip对应的内网主机是啥了(一对多, 就GGG了)

应用ip地址池

这个时候我们有数个公网ip可用, 比如有四个可用的话, 我们就可以同时有4太内网主机访问同一网页…但实质上不是一个解决问题的好方法

NAPT(Network Address Port Translation)

这个好像是更常用的…
雾, 如果前面那种不包含端口的话, 那相当于内网地址(iAddr:port1)只能对于(eAddr:port1), 而不能映射到其他端口
同时使用ip和端口号
这样子的表格大概有这么5列

+++++++++++++++++++++++++++++++++++++++++++++
专用地址|专用端口|外部地址|外部端口|传输协议|
+++++++++++++++++++++++++++++++++++++++++++++

维基百科上是写

内网ip: 内网端口 -> 外网ip: 外网端口

疑问

那端口映射这功能是不是相当于, 定死了NAT的表项, 相当于静态NAT ???

缺点

来自维基百科

一些需要初始化从外部网络创建的TCP连接和无状态协议, 比如UDP, 无法实现

NAT带来的影响

我大概就是要研究和解决这些影响?

因为NAT后的主机发送请求之后, NAT设备才能记录下信息

类型 RFC 3489

在网上看到说, 一般来说, 目前NAT中针对TCP的实现基本上是一致的, 其间并不存在太大差异, 这是因为TCP协议本身便是面向连接的, 因此无需考虑网络连接无状态所带来复杂性, 所以这个分类基本上可以认为是针对UDP
Notice: 这其中出现了三个地址:

  • 内网ip (iAddr:port1)
  • 外网ip (eAddr:port2)
  • 目标ip (dAddr:port3)

安全性: 对称型 > 端口受限圆锥 > 受限圆锥 > 完全圆锥
穿透性: 完全圆锥 > 受限圆锥 > 端口受限圆锥 > 对称型

锥形 非对称

应该是有三种, 下面的三个不同的圆锥形都算是非对称的
锥形是说, (iAddr:port1)出去的都会映射到(eAddr:port2), 就是这个映射是不变的…而不同锥形对于外部主机能够联系到内部主机的安全策略不通(应该是这样子说??), 满足某个条件, 外部主机才能联系到内部主机, 就是这个条件的强弱不同

完全圆锥形 Full cone NAT

一对一…相当于我们常说的端口映射, 感觉像是完全静态的
正是因为是静态的, 固定的, 所以外部的服务器也可以主动发起请求到内部主机

受限圆锥形 Address-Restricted cone NAT

内部主机(iAddr:port1)要先给目的主机(A.B.C.D)发送过数据包, 然后外部主机(A.B.C.D:any_port)就可以通过内部主机映射的(eAddr:port2)发回给内部主机

端口受限圆锥形 Port-Restricted cone NAT

在受限圆锥形上加上了端口限制, 就是
内部主机(iAddr:port1)要先给目的主机的特定端口(A.B.C.D:port3)发送过数据包, 然后外部主机使用特定端口port3(其他端口不可以)才能通过内部主机映射的(eAddr:port2)发回给内部主机

对称形 Symmetric NAT

yep, 我要做的就是这个
同一内部IP与端口发到不同的目的地和端口的信息包,都使用不同的映射
那看起来就比非对称形简单?….卧槽,,,那为什么这种叫对称形呢

只有曾经收到过内部主机数据的外部主机,才能够把数据包发回

还是没懂这个和端口受限形的NAT的区别在哪…?

好像是这样的, 锥形还是相当于静态的…就是目的主机是A时候, 这次iAddr:port1对应了eAddr:port2…, 当给一台新的主机发送消息时候还会复用port2这个端口
而对称型的, 同一内网主机同一端口号,每一次与不同的外网主机通讯,就重新分配另一个端口号, iAddr:port1给目标A发送信息, 会使用eAddr:port2, 而给目标B发送信息, 会使用eAddr:port3
这篇文章 http://blog.csdn.net/mycloudpeak/article/details/53550405

todo

翻译一下这个? https://computer.howstuffworks.com/nat.htm/printable
还有这个 http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf
upnp

doing

那这个NAT穿越的组合共有10种, 因为双方的情况其实是C(5, 2)….我是研究, 对称-非对称对称-对称还是只研究对称-对称呢…

参考

同时开启tcp_timestamps和tcp_tw_recycle选项时,会导致客户反馈连接成功率降低 http://perthcharles.github.io/2015/08/27/timestamp-NAT/

弱智的思考

所以, 无论是哪种NAT, 只要Client的二元组(iAddr:port1)变化了, 包括iAddr, port1, 任何一个变换了, 都会重新NAT一个端口,
对于Server

  • 如果Server的ip变了…会影响对称NAT后面client的映射端口, 不会影响非对称的NAT后的Clinet
  • 如果Server的port变了, 好像不会对映射的端口发生影响
    上面说的, 不影响是指不会改变端口, 但能不能打通还另有条件
  • 完全圆锥: 可以直接通
  • 受限圆锥: Client(iAddr:port1)要给Server(sAddr)发送过消息
  • 端口受限圆锥: Client(iAddr:port1)要给Server(sAddr:port3)发送过消息
  • 对称型: ???和上面的条件一样???