家庭网络漫游指南

光猫

光网络终端(英语:Optical Network Terminals,俗称光猫或光 modem),是指通过光纤介质进行传输,将光信号调制解调为其他协议信号的网络设备。光猫设备作为大型局域网、城域网和广域网的中继传输设备。

光猫的主要功能为信号转换,它的后端接口除了连接电脑,还可以连接电视或电话。

路由器

路由器(英语:Router,又称路径器)是一种电讯网络设备,提供路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host 到 host 之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在 OSI 模型的第三层——即网络层,例如网际协议(IP)。

基本概念

路由器就是连接两个以上个别网络的设备。

由于位于两个或更多个网络的交汇处,从而可在它们之间传递分组(一种数据的组织形式)。路由器与交换机在概念上有一定重叠但也有不同:交换机泛指工作于任何网络层次的数据中继设备(尽管多指网桥),而路由器则更专注于网络层。

路由器与交换机的差别,路由器是属于 OSI 第三层的产品,交換机是 OSI 第二层的产品。第二层的产品功能在于,将网络上各个计算机的 MAC 地址记在 MAC 地址表中,当局域网中的计算机要经过交換机去交换传递数据时,就查询交換机上的 MAC 地址表中的信息,将数据包发送给指定的计算机,而不会像第一层的产品(如集线器)每台在网络中的计算机都发送。而路由器除了有交換机的功能外,更拥有路由表作为发送数据包时的依据,在有多种选择的路径中选择最佳的路径。此外,并可以连接两个以上不同网段的网络,而交換机只能连接两个。并具有 IP 分享的功能,如:区分哪些数据包是要发送至 WAN。路由表存储了(向前往)某一网络的最佳路径,该路径的“路由度量值”以及下一个(跳路由器)。参考条目路由获得这个过程的详细描述。

WAN 口和 LAN口

路由器通常包含一个 WAN 口多个 LAN 口(PS: 有些特殊的路由器包含多个 WAN 口)。

广域网(英语:Wide Area Network,缩写为 WAN),又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。

局域网(Local Area Network,简称 LAN)是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的计算机网络。相比之下,广域网(WAN)不仅覆盖较大的地理距离,而且还通常涉及固接专线和对于互联网的链接。 相比来说互联网则更为广阔,是连接全球商业和个人计算机的系统。

通常情况下,宽带安装好以后使用网线连接光猫和路由器 WAN 口,其他设备连接路由器 LAN 口或者无线网络即可浏览互联网。

路由器的六种无线模式

无线访问节点 (AP「Access Point」)

该模式下路由器的无线网卡就像一个”无线 HUB”,负责建立无线路由器和电脑之间的数据链路(相当于无形的网线)。正常情况下,家用的无线路由器的无线连接都默认工作在此模式下。

客户端 (Client)

像笔记本电脑上的无线网卡那样工作,仅连接其它的无线网络,而不发射自己的无线网络信号。对于无线路由器来说,这种模式相当于启用了一个无线的 WAN 口,且下面的电脑只能通过有线方式接到此设备。内部的LAN口组成的局域网和连接上的无线网段处于相同的 IP 地址段。内部的 DHCP 请求也会被转发到主无线网络上。

客户端网桥 (Client Bridge)

和“客户端”模式一样,相当于启用了一个无线的 WAN 口,且下面的电脑只能通过有线方式接到此设备。不过,该模式下无线路由器仍然提供 DHCP 及 NAT 功能,内部 LAN 口组成的单独 IP 地址段局域网,通过无线路由器上自己的网关,连上外部主网络。

Adhoc

Adhoc 有个形象的比喻,就像是将两台电脑之间直接找根网线连起来,只不过在这里这根网线是个无线的。最常见的使用adhoc连接的设备多数是一些手持游戏机。该模式在无线路由器上使用的场合比较罕见。

中继 (Repeater)

顾名思义,中继就是一边是接受信号,一边又发射自己的无线信号。在这种模式下无线路由器以无线网卡客户身份接入主 AP,然后再以新增虚拟界面(Virtual Interfaces)来为客户端提供无线接入。该模式的最大意义在于可以解决无线信号受到距离或者障碍物的影响不能传输到更远的问题。
接入到该无线路由器上的电脑终端,是和主无线网网络处在相同的 IP 地址段。内部的 DHCP 请求,也会被转发到主无线网络上。

中继桥接 (Repeater Bridge)

和”中继”模式一样,可以解决无线信号受到距离或者障碍物的影响不能传输到更远的问题。不过,这种模式下无线路由器仍然提供 DHCP 及 NAT 功能,即所有的内部 LAN 口以及无线客户接入组成的是一个单独的局域网网段。

DHCP

动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP)是一个用于局域网的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要有两个用途:

  • 用于内部网或网络服务供应商自动分配IP地址给用户
  • 用于内部网管理员作为对所有计算机作中央管理的手段

解析 DHCP 的工作方式

当一台机器新加入一个网络的时候,肯定一脸懵,啥情况都不知道,只知道自己的 MAC 地址。怎么办?先吼一句,我来啦,有人吗?这时候的沟通基本靠“吼”。这一步,我们称为 DHCP Discover。

新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255。广播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版,但是如果你去抓包的话,很可能看到的名称还是 BOOTP 协议。

在这个广播包里面,新人大声喊:我是新来的(Boot request),我的 MAC 地址是这个,我还没有 IP,谁能给租给我个 IP 地址!

格式就像这样:
48ff99d2.png

如果一个网络管理员在网络里面配置了 DHCP Server 的话,他就相当于这些 IP 的管理员。他立刻能知道来了一个“新人”。这个时候,我们可以体会 MAC 地址唯一的重要性了。当一台机器带着自己的 MAC 地址加入一个网络的时候,MAC 是它唯一的身份,如果连这个都重复了,就没办法配置了。

只有 MAC 唯一,IP 管理员才能知道这是一个新人,需要租给它一个 IP 地址,这个过程我们称为 DHCP Offer。同时,DHCP Server 为此客户保留为它提供的 IP 地址,从而不会为其他 DHCP 客户分配此 IP 地址。

DHCP Offer 的格式就像这样,里面有给新人分配的地址。

646daabe.png
DHCP Server 仍然使用广播地址作为目的地址,因为,此时请求分配 IP 的新人还没有自己的 IP。DHCP Server 回复说,我分配了一个可用的 IP 给你,你看如何?除此之外,服务器还发送了子网掩码、网关和 IP 地址租用期等信息。

新来的机器很开心,它的“吼”得到了回复,并且有人愿意租给它一个 IP 地址了,这意味着它可以在网络上立足了。当然更令人开心的是,如果有多个 DHCP Server,这台新机器会收到多个 IP 地址,简直受宠若惊。

它会选择其中一个 DHCP Offer,一般是最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等,并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器,谢谢你们的接纳,并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。
d17afbba.png
此时,由于还没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。在 BOOTP 里面,接受某个 DHCP Server 的分配的 IP。

当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。

6dc28c84.png

最终租约达成的时候,还是需要广播一下,让大家都知道。

IP 地址的收回和续租

既然是租房子,就是有租期的。租期到了,管理员就要将 IP 收回。

如果不用的话,收回就收回了。就像你租房子一样,如果还要续租的话,不能到了时间再续租,而是要提前一段时间给房东说。DHCP 也是这样。

客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。客户机接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。这样,IP 租用更新就完成了。

好了,一切看起来完美。DHCP 协议大部分人都知道,但是其实里面隐藏着一个细节,很多人可能不会去注意。接下来,我就讲一个有意思的事情:网络管理员不仅能自动分配 IP 地址,还能帮你自动安装操作系统!

NAT

网络地址转换(英语:Network Address Translation,缩写:NAT;又称网络掩蔽、IP 掩蔽)在计算机网络中是一种在IP数据包通过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有 IP 地址访问因特网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT 也让主机之间的通信变得复杂,导致了通信效率的降低。

NAT 转换规则

  • 对于 TCP/UDP 使用
    Host ‘s 私有 IPv4 + Port <——> NAT 公网 IPv4 + Port

  • 对于ICMP使用
    Host ‘s 私有 IPv4 + session ID <——> NAT 公网 IPv4 + session ID

规则其实非常好理解,由于 session ID 在 NAT 设备上是独一无二的,所以NAT可以很容易区别局域网内部的不同 host。

至于其它传输协议,NAT 使用的也是类似 session ID 的转换规则,即使用可以将不同 host 轻易分辨出来的字段做键值(KEY),动态创建映射表项,做双向的地址+ KEY 的转换。

不同类型的 NAT

完全圆锥型 NAT(Full cone NAT),即一对一(one-to-one)NAT

  • 一旦一个内部地址(iAddr:port)映射到外部地址(eAddr:port),所有发自 iAddr:port 的包都经由 eAddr:port 向外发送。任意外部主机都能通过给 eAddr:port 发包到达 iAddr:port(注:port不需要一样)

3417f32a.png

受限圆锥型 NAT(Address-Restricted cone NAT)

  • 内部客户端必须首先发送数据包到对方(IP=X.X.X.X),然后才能接收来自 X.X.X.X 的数据包。在限制方面,唯一的要求是数据包是来自 X.X.X.X。
  • 内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自 iAddr:port1 的包都经由 eAddr:port2 向外发送。外部主机(hostAddr:any)能通过给 eAddr:port2 发包到达 iAddr:port1。(注:any指外部主机源端口不受限制,但是目的端口必须是 port2。只有外部主机数据包的目的 IP 为 内部客户端的所映射的外部 ip,且目的端口为 port2 时数据包才被放行。)
    077d46e4.png

端口受限圆锥型NAT(Port-Restricted cone NAT)

类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。

  • 一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自 iAddr:port1 的包都经由 eAddr:port2 向外发送。
  • 在受限圆锥型NAT基础上增加了外部主机源端口必须是固定的。
    e59a101f.png

对称 NAT(Symmetric NAT)

  • 每一个来自相同内部 IP 与端口,到一个特定目的地地址和端口的请求,都映射到一个独特的外部 IP 地址和端口。
  • 同一内部 IP 与端口发到不同的目的地和端口的信息包,都使用不同的映射
    只有曾经收到过内部主机数据的外部主机,才能够把数据包发回

9692d914.png

UPnP

通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议。该协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。UPnP 通过定义和发布基于开放、因特网通讯网协议标准的 UPnP 设备控制协议来实现这一目标。

可以理解为有了 UPnP 软件可以根据需求让路由器进行动态地进行端口映射。而不是你去路由器后台一个个手动设置。

提升 NAT 类型

一般来说,我们希望 NAT 层数越少越好。每多一层 NAT 就意味着更加复杂的情况与配置。依旧是典型的网络拓扑:

入户光纤① → 猫② → 路由器③ → 终端设备

我们目标是把 NAT 降到1层(只有③),当然这是目标,但不是必须的。

拿到公网 IP

拥有公网 IP 对于 P2P 应用来说绝对是一个基础要求,这可以省掉许多麻烦(使①不发生 NAT)。如何确定自己是不是公网 IP 也很简单。访问这里你可以得到一个 IP 地址,把它与路由器中显示的 WAN 口 IP 进行比较,如果一致那么就是公网 IP 了。

如果不一致,那么只能联系运营商,自己是没有办法的。一般来说一级运营商(电信/联通)比较容易,而一些二级甚至三级运营商(长城)就没什么希望了。如果拿不到公网 IP,只能期望运营商不要把 NAT 类型限制太死吧。

光猫改为桥接模式

区分桥接与路由模式

现在原来越多的猫“越权管理”,增加了路由功能,也就是说猫和路由器一体化了。每一个路由器可以理解为一层网络,我们不希望层数过多。同时猫的路由功能往往不完善,难以进行高级配置。而桥接模式就是让猫回归本质,只负责信号转换。

区分路由与桥接模式最方便的办法是:如果你的路由器(电脑)直接连到猫上就可以上网,那么是路由模式;如果路由器需要配置 PPPoE 拨号那么就是桥接模式。

更改模式

一般来说更改模式需要猫的超级密码,这个用户是没有的。请联系运营商客服请求修改。改为桥接后②也不会发生 NAT 了。

警告:没能力折腾的不建议自己破解改。更改桥接模式之后记得重新配置路由器,输入宽带账号密码才可以正常上网。

更改路由器设置

首先要修改 NAT 类型,并不是所有的路由器或者路由器系统都支持这一设置。打开 NAT 并将类型设置为最宽松的 NAT1(Full cone NAT)。

接着启用 UPnP,绝大部分路由器都支持的,耐心找一找。如果真的不支持那我建议换路由器。

如果不支持上述的 NAT 类型设置,我们还有一个大招。大部分的路由器都支持 DMZ (非军事化区),DMZ 指定的设备完全暴露在公网上。但是一个网络一般只能够设置1个 DMZ,显然如果设置多个路由器就不知道应该把数据包交给谁了。由于 DMZ 是和 IP 绑定的,而 IP 是动态分配的。所有首先我们将 IP 与 MAC 绑定(不同的路由器设置不同),然后将此 IP 设置为 DMZ 即可。

更改系统设置

最后如果你的系统启用了防火墙那么记得将需要的程序添加例外,或者关闭防火墙(不推荐)。最后进行测试,NAT 类型应该可以提升到完全圆锥型NAT(Full cone NAT)。

无线中继和桥接

以 hiboy 的老毛子 Padavan 系统路由器为例,介绍一下无线中继和桥接的异同:

  • 无线中继:选择 AP + AP Client,接 LAN 就要关闭本路由 DHCP,上级路由开启 DHCP,本路由的 IP 不能和上级一样,但要在一个网段里。例子:一个是 192.168.1.1,另一个是 192.168.1.2。
  • 无线桥接:选择 AP + AP Client,接 WAN 就要开启本路由 DHCP,上级路由开启 DHCP,本路由的 IP 不能和上级同网段。例子:一个是 192.168.1.1,另一个是 192.168.2.1。

参考

  1. 维基百科,自由的百科全书
  2. NAT 科普与类型提升 – 晨鹤小站(。・∀・)ノ゙
  3. 老毛子Padavan固件 无线中继实践心得分享 - Padavan - 恩山无线论坛 - Powered by Discuz!
  4. 无线网络的中继和桥接有什么区别? - 知乎
  5. NAT转换是怎么工作的? - 知乎
给我加个菜?