一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情。
前言
刚才我们已经简单讲过,用户发送的网络包会通过 ADSL 和 FTTH 等接入网到达运营商(国内的运营商主要有移动、联通、电信三家)的 BAS。
互联网本来就是由很多台路由器相互连接组成的,因此原则上应该是将接入网连接到路由器上。随着接入网发展到 ADSL 和 FTTH,接入网连接的路由器也跟着演进,而这种进化型的路由器就叫做 BAS。下面我们来具体讲一讲。
BAS 通过 PPPoE 实现用户认证和配置下发
首先我们先来看一下 BAS 支持的用户认证和配置下发功能。
ADSL 和 FTTH 接入网中,都需要先输入用户名和密码,登录之后才能访问互联网,而 BAS 就是登录操作的窗口,BAS 使用 PPPoE(Point-to-Point Protocol over Ethernet,以太网的点对点协议)方式来实现这个功能。PPPoE 是由传统电话拨号上网上使用的 PPP 协议发展而来的,所以我们先来看一看 PPP 拨号上网的工作方式。
PPP 工作方式
在使用电话线或者 ISDN 拨号上网时,PPP 工作流程如下所示。
首先,用户向运营商的接入点拨打电话,电话接通后输入用户名和密码进行登录操作。(相信这一步我们深有体会,小时候台式机上网就是这样,先拨打电话号,然后弹出一个输入窗口,输入完账号密码之后点击登录就可以上网了)。
用户名和密码通过 RADIUS(Remote Authentication Dial-in User Service,远程认证拨号用户服务)协议从 RAS(Remote Access Server,远程访问服务器)发送到认证服务器,认证服务器校验这些信息是否正确。当确认无误后,认证服务器会返回 IP 地址等配置信息,并将这些信息下发给用户。用户的计算机根据这些信息配置 IP 地址等参数,完成 TCP/IP 收发网络包的准备工作,接下来就可以发送 TCP/IP 包了。
这个过程的重点在于下发 TCP/IP 配置信息的步骤。在接入互联网时,必须为计算机分配一个公有地址。 但这个地址并不是事先确定的。因为在拨号连接时,可以根据电话号码来改变接入点,而不同的接入点具有不同的 IP 地址,因此无法实现在计算机上设置这个地址。所以,在连接时运营商会向计算机下发 TCP/IP 配置信息,其中就包括为计算机分配的公有地址。
在以太网上传输 PPP 消息
ADSL 和 FTTH 接入方式也需要为计算机分配公有地址才能上网,这一点和拨号上网是相同的。。不过,ADSL 和 FTTH 中,用户和 BAS 之间是通过电缆或光纤固定连接在一起的,因此没有必要验证用户身份,所以实际上并不需要 PPP 的所有这些功能。然而,通过用户名和密码登录的步骤可以根据用户名来切换不同的运营商,这很方便。因此,接入运营商在 ADSL 和 FTTH 中一般也会使用 PPP。
不过,拨号上网的 PPP 是无法直接用于 ADSL 和 FTTH 的,要理解这里的原因,我们先来看看 PPP 协议是如何传输消息的。
传输 PPP 消息的思路和将 IP 包装入以太网包中传输时一样的。PPP 协议中没有定义以太网中的报头和 FCS 等元素,也没有定义信号的格式,因此无法直接将 PPP 消息转换成信号来发送。要传输 PPP 消息,必须有另一个包含报头、FCS、信号格式等元素的“容器”,然后将 PPP 消息装在这个容器里才行。于是,在拨号接入中 PPP 借用了 HDLC(High-level Data Link Control,高级数据联接控制)协议作为容器,而 HDLC 协议原本是为在专线中传输网络包而设计的,拨号接入方式对这一规格进行了一些修正。
对于 ADSL 和 FTTH,如果可以和前面一样借用 HDLC 来作为容器,PPP 协议就可以直接使用了。但是 ADSL 和 FTTH 并不能使用 HDLC,因此需要寻找另一个机制作为替代。因此,我们使用以太网包替换 HDLC 来装载 PPP 协议。此外,以太网和 PPP 在涉及上有所不同,为了弥补这些问题,就重新涉及了一个新的规格,这就是 PPPoE。
于是,ADSL 和 FTTH 也可以像拨号上网一样传输 PPP 消息了。只要将 PPP 消息装入以太网包中进行传输,ADSL 和 FTTH 就也可以像拨号上网一样通信了。
BAS 通过隧道将网络包发送给运营商
BAS 除了作为用户认证的窗口之外,还可以使用隧道方式来传输网络包。所谓隧道,就类似于套接字之间建立的 TCP 连接。在 TCP 连接中,我们从一侧的出口(套接字)放入数据,数据就会原封不动地从另一个出口出来,隧道也是如此。也就是说,我们将包含头部在内的整个包从隧道的一头扔进去,这个包就会原封不动地从隧道的另一头出来,就好像在网络中挖了一条地道,网络包从这个地道里穿过去一样。
像这样,如果在 BAS 和运营商路由器之间的 ADSL/FTTH 接入服务商的网络中建立一个水到,将用户到 BAS 的接入网连接起来,就形成了一条从用户一直到运营商路由器的通道,网络包通过这条通道,就可以进入互联网内部了,这样的机制就类似于将接入网一直延伸到运营商路由器。
隧道实现方式
TCP
第一种方式是是使用 TCP 连接。
这种方式中,首先需要在网络上的两台隧道路由器之间建立 TCP 连接,然后将连接两端的套接字当作是路由器的端口,并从这个端口来收发数据。
封装
另外一种隧道的实现方式是封装。
这种方式是将包含头部在内的整个包装入另一个包中传输到隧道的另一端。在这种方式中,包本身可以原封不动地到达另一端的方式,从结果上看和基于 TCP 连接的方式是一样的,都实现了一个可供包进行穿梭的通道。
接入网的整体工作过程
理解了 PPPoE 和隧道的原理之后,下面我们来看一下接入网的整体工作过程。
接入网的工作从用户端的互联网接入路由器进行连接开始。
首先,接入路由器中需要配置运营商分配的用户名和密码。然后,接入路由器会根据 PPPoE 的发现机制来寻找 BAS。这一机制和 ARP 一样是基于广播来实现的。
接下来,进入用户认证和下发配置的阶段。这里有两个重点:
- 用户名和密码如何发送给 BAS。这里有两种方式,一种是将密码进行加密的 CHAP(
Challenge Handshake Authentication Protocol,挑战握手认证协议)方式,另一种是不加密的 PAP(Password Authentication Protocol,密码验证协议),在互联网接入路由器的设置画面中可以选择。 - 在校验密码之后 BAS 如何向用户下发 TCP/IP 配置信息。这里下发的配置信息包括分配给上网设备的 IP 地址、DNS 服务器的 IP 地址以及默认网关的 IP 地址。当使用路由器连接互联网时,路由器会根据这些信息配置自身的参数。这样一来,路由器的 BAS 端的端口就有了公有地址,路由表中也配置好了默认网关,接下来就可以将包转发到互联网中了。
接下来,客户端就会开始发送用来访问互联网的网络包,网络包头部会被加上 MAC 头部和 PPPoE 头部,然后,网络包会被转发成信号,从响应的端口发送出去。
接下来,网络包会到达 BAS,而 BAS 会将 MAC 头部和 PPPoE 头部去掉,取出 PPP 头部以及后面的部分,然后通过隧道机制将包发送出去。最后,PPP 包会沿隧道到达另一端的出口,也就是网络运营商的路由器。
除 PPPoE 之外的其他方式
刚才我们讲的内容都是基于 PPPoE 方式的,实际的接入网还有其他一些方式,这里我们简单了解一下。
首先,我们先看看使用 PPPOA(Point-to-Point Protocol over ATM)方式的 ADSL 接入网(PPPoA 不能用于 FTTH,因为 FTTH 不使用 ATM 信元)。
ADSL 使用 PPPoE 方式上,是先将 PPP 消息装入以太网包中,然后再将以太网包拆分并装入信元,而 PPPOA 方式是直接将 PPP 消息装入信元。
由于只是开头加不加 MAC 头部和 PPPoE 头部的区别,PPP 消息本身是没有区别的,因此密码校验、下发 TCP/IP 配置参数、收发数据包等过程都是和 PPPoE 基本相同的。不过,虽然开头加不加 MAC 头部和 PPPoE 头部看起来只是很小的区别,但却会对用户体验产生一定的影响。
由于 PPPOA 没有 MAC 头部,所以 PPP 消息是无法通过以太网来传输的,这就意味着需要和 BAS 收发 PPP 消息的设备,也就是计算机和路由器,必须和 ADSL Modem 是一体的,否则 PPP 机制就无法工作了。
当然,PPPoA 和 PPPoE 相比也有一些优势。PPPoE 方式中,需要添加 PPPoE 头部和 PPP 头部,这意味着 MTU 就相应变小了,这可能会降低网络的效率。而 PPPoA 不使用以太网包来传输 PPP 消息,因此不会发生 MTU 变小的问题。
参考文档
- 《网络是怎样连接的》—— 户根勤
往期文章
- 网络是怎样连接的(一)—— 浏览器访问 Web 服务器过程概览
- 网络是怎样连接的(二)—— 浏览器生成 HTTP 消息
- 网络是怎样连接的(三)—— 通过 DNS 服务器查询 IP 地址
- 网络是怎样连接的(四)—— DNS 服务器工作介绍
- 网络是怎样连接的(五)—— 委托操作系统进行收发消息过程概览
- 网络是怎样连接的(六)—— 协议栈内部探索步骤
- 网络是怎样连接的(七)—— 协议栈的内部结构
- 网络是怎样连接的(八)—— 探索套接字
- 网络是怎样连接的(九)—— 连接连的到底是啥
- 网络是怎样连接的(十)—— 连接操作的实际过程
- 网络是怎样连接的(十一)—— 协议栈发送数据特性
- 网络是怎样连接的(十二)—— 数据收发操作中重要标志位 ACK
- 网络是怎样连接的(十三)—— 从服务器断开并删除套接字
- 网络是怎样连接的(十四)—— 网络包传输概览(IP 模块视角)
- 网络是怎样连接的(十五)—— 网络包传输概览(IP 模块视角)
- 网络是怎样连接的(十六)—— 生成包含接收方 IP 地址的 IP 头部
- 网络是怎样连接的(十七)—— 生成以太网用的 MAC 头部
- 网络是怎样连接的(十八)—— 将服务器的响应包从 IP 传递给 TCP
- 网络是怎样连接的(十九)—— UDP协议的收发操作
- 网络是怎样连接的(二十)—— 信号在网线和集线器中传输
- 网络是怎样连接的(二十一)—— 交换机工作模式
- 网络是怎样连接的(二十二)—— 路由器的结构和基本原理
- 网络是怎样连接的(二十三)—— 路由选择
- 网络是怎样连接的(二十四)—— 路由的附加功能
- 网络是怎样连接的(二十五)—— 互联网和家庭网、以太网的区别
- 网络是怎样连接的(二十六)—— ADSL 接入网的结构和工作方式
- 网络是怎样连接的(二十七)—— 光纤接入网(FTTH)