4.14 路由器的优缺点
通常的,路由器不会转发本地回环地址(例如 127.0.0.1)、本地网络地址(例如形如 192.168.x.x 的仅在当前网络中有效的地址)、广播包(例如 255.255.255.255)。
优点:
- 网络连接:路由器可以连接多个网络,支持不同的网络协议,并根据 IP 地址进行智能数据转发,隔离了冲突域。
- 安全性:路由器能提供防火墙、网络地址转换 NAT 等安全功能。
- 流量管理:路由器能提供 QoS 等功能,优化网络性能。
缺点:
- 成本:高性能的路由器往往价格高昂。
- 配置复杂:路由器的设置和管理需要一定的技术知识。
- 延迟:存储转发技术会引入延迟。
4.14.1 地址解析协议 ARP(P133 4.2.4)
地址解析协议 ARP(Address Resolve Protocol) 用于在局域网中将 IPv4 地址解析为 MAC 地址。
当局域网中一台主机需要获取另一个 IPv4 地址的主机的 MAC 地址时:
- 该主机广播 ARP 请求,即将请求数据包 MAC 帧目的地址置为
FF:FF:FF:FF:FF:FF
,意图为“请问哪一台主机的 IPv4 地址是 xxx.xxx.xxx.xxx,请告诉我你的 MAC 地址”。 - 当网络内 IPv4 地址匹配的主机 收到 ARP 请求后,则直接向源 MAC 地址发送 ARP 响应。
注意:
- 路由器不转发 ARP 协议数据包。
- 交换机会将 ARP 请求发送给所有端口,但仅将 ARP 响应发送给对应端口。
4.14.2 默认网关(Gateway)
当设备接入网络时,除了要获取或设置 IP 地址及子网掩码,通常还需要获取或设置默认网关地址,当与目的 IP 地址不在同一个网络中时,则将数据报转发给默认网关。
当主机需要发送一个 IP 数据报时,首先使用子网掩码计算目的 IP 是否在同一个网络:
- 若在同一个网络,则使用 ARP 直接解析目的 IP 地址的 MAC 地址。
- 若不在同一个网络,则使用 ARP 解析默认网关的 MAC 地址。
最后向解析结果的 MAC 地址发送数据报。
4.14.3 网络地址转换 NAT(P185 4.8.1)
由于 IPv4 地址的枯竭,为了缓解这种情况,网络地址转换 NAT(Network Address Translation) 技术出现了。
由于网络中的用户对网络的利用率其实并不高,因此 NAT 实现了当网络内用户发送数据时,源地址使用公共地址池中分配的一个临时地址。
NAT 会修改每个 IP 数据报,当网络中的设备发送数据到外部网络时,NAT 会从公共地址池中随机分配一个临时地址,并修改数据报中 IP 数据报中的源 IP 地址为此地址,且记录下映射关系。
当一个 NAT 映射建立成功后,通常会保持一段时间,这个时间被称为 NAT 会话超时(NAT Session Timeout)。当此设备不再发送数据,并保持一段时间,NAT 会清除此次映射。
例如,一个网络内有 100 个设备,使用了 100 个内网 IP,公共地址池中有 10 个 IP,由于网络内 100 个设备并不会持续发送数据,于是当有用户需要发送数据时,使用的公网地址将从公共地址池中选取。
相关词条:
-
(P186 4.8.1)专用地址(Private Address)
又称内网地址,指只能用于内部通信的地址,目的地址为专用地址的数据报路由器不得转发。
IPv4 私有地址块有三个:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
IPv6 没有专用地址的概念。
4.14.3.1 网络地址端口转换 NAPT
网络地址端口转换 NAPT(Network Address and Port Translation) 在 NAT 的基础上增加了端口转换,现代网络中提到 NAT 基本可以等同于 NAPT,本文也不再做区分。
由于一个网络中的用户其实并不会同时使用大量与外部建立连接,绝大多数应用和服务仅使用有限数量的端口,因此为了进一步节省公网 IP 的使用,NAPT 实现了网络内多个设备使用同一个公网 IP 与外部建立连接,并使用不同端口来区分不同连接。
NAPT 会跟踪每一个会话,当网络中的应用发送数据到外部网络时,NAPT 不仅会修改 IP 数据报中的源 IP 地址为公网 IP 地址,还会修改 TCP 或 UDP 首部中的源端口号,并记录下修改前和修改后对映射关系。
例如,一个网络内有 100 个设备,使用了 100 个内网 IP,每个设备仅使用 20 个端口与外部建立连接,而 NAT 可以实现使这 100 个设备公用一个公网 IP,使用 2000 个端口(即 )与外部建立连接,这样极大的节约了 IP 的使用。
当一个 NAPT 映射建立成功后,同样会保持一段时间,通常情况下,如果是 TCP 连接,那么会在 TCP 连接关闭或限制一段时间后清除映射,如果是 UDP 连接,会在发送完成后短时间内清除映射。
4.14.3.2 NAT 穿越
NAT 穿越(NAT Traversal) 俗称 NAT 打洞,常见的 NAT 穿越协议包括 STUN(Session Traversal Utilities for NAT) 和 TURN(Traversal Using Relays around NAT) 等。
根据 NAT 原理,如果两个用户通过不同的 NAT 网络连接到互联网,那么其本地获取到的 IP 极大概率并不能互相直接访问,NAT 穿越可以协助这两个用户获取其在经过 NAT 映射之后的公网地址,以供相互发起连接。
NAT 穿越大致原理如下:
- 当用户 A 使用地址 和端口 通过 NAT 网络 访问服务器 S 时, 将其映射为地址 和端口 。
- 服务器 S 收到的来自 A 请求,源地址和源端口实际上是 和 。
- 由于 NAT 映射建立后会保持一段时间,此时服务器 S 将收到的源地址和源端口告知位于另一个 NAT 网络 中的用户 B,于是用户 B 可直接通过 和 访问用户 A 的 端口。
- 用户 B 请求与 A 建立连接时, 也会映射用户 B 的地址和端口,用户 A 看到的源地址和源端口也是映射后的地址和端口,同理,用户 A 也能通过这个映射后的地址和端口与用户 B 建立连接。