浅析广域网

广域网概念

广域网是 连接不同地区局域网 的网络,与局域网相比,传输距离更长,并且广域网基本由 ISP 提供而不是属于单位或组织。 在 TCP/IP 模型中,广域网与局域网的区别主要在数据链路层和物理层。广域网常用的数据链路层标准包括 HDLC(High-level Data Link Control,高级数据链路控制)、PPP(Point-to-Point Protocol,点到点协议)、FR(Frame Relay,帧中继)、 ATM异步传输模式等

广域网设备角色

广域网的网络设备基本角色有 CE(Customer Edge,用户边缘设备)、PE( Provider Edge 服务提供商边缘设备)和 P(Provider,服务器提供商设备

CE:用户端连接服务提供商的边缘设备,CE 连接一个或多个 PE,实现用户接入 PE:服务提供商连接 CE 的边缘设备。PE 同时连接 CE 和 IP 设备,是重要的网络节点 P:服务提供商不连接任何 CE 的设备

  • HDLC 协议是一种通用的协议,工作在数据链路层。数据报文加上头开销和尾开销后封装成 HDLC 帧,只支持在点到点的同步链路上的数据传输,不支持IP地址协商与认证,过于追求高可靠性,导致数据帧开销较大,传输效率较低。
  • PPP 协议工作在数据链路层,主要用在支持全双工的同、异步链路上,进行点到点之 间的数据传输。由于它能够提供用户认证,易于扩充,并且支持同、异步通信,因而获得广泛应用。
  • 帧中继是一种工业标准的、交换式的数据链路协议,通过使用无差错校验机制,加快了数据转发速度。
  • ATM 是建立在电路交换和分组交换基础上的一种面向连接的交换技术,ATM 传送信息的基本载体是 53 Byte 固定长度 ATM 信元。

PPP 协议

PPP 协议作为常见的广域网数据链路层协议,主要用于全双工的链路上的点对点的数据传输封装。 PPP 提供了 PAP (Password Authentication Protocol,密码验证协议) 和 CHAP (Challenge Handshake,挑战握手认证协议) PPP 可在以太网上扩展为 PPPoE。 在计算机网络课上讲过一些 PPP 协议的基础知识,包括帧格式、工作状态等等,可以在这篇 [大佬文章]( 计算机网络数据链路层 | luo’s Blog (luo41.top) ) 中复习一下

PPP 链路建立过程

  1. 链路层协商:使用 LCP(Link Control Protocol)报文进行链路参数协商,建立链路层连接
  2. 认证协商(可选):通过链路建立阶段协商的认证方式进行链路认证
  3. 网络层协商:通过 NCP(Network Control Protocol)协商来选择和配置一个网络层协议并进行网络层参数协商

链路建立过程中 PPP 的协商由链路两端接口完成,接口的状态表示了协议的协商过程

  1. 通信双方开始建立 PPP 链路时,先进入到 Establish 阶段。
  2. 在 Establish 阶段,进行 LCP 协商:协商通信双方的 MRU(Maximum Receive Unit, 最大接收单元)、认证方式和魔术字(Magic Number)等选项。协商成功后进入 Opened 状态,表示底层链路已建立。
  3. 如果配置了认证,将进入 Authenticate 阶段。否则直接进入 Network 阶段。
  4. 在 Authenticate 阶段,会根据连接建立阶段协商的认证方式进行链路认证。认证方式有两种:PAP 和 CHAP。如果认证成功,进入 Network 阶段,否则进入Terminate阶段,拆除链路,LCP 状态转为Down。
  5. 在 Network 阶段,PPP 链路进行 NCP 协商。通过 NCP 协商来选择和配置一个网络层协议并进行网络层参数协商。最常见的 NCP 协议是 IPCP,用来协商 IP 参数。
  6. 在 Terminate 阶段,如果所有的资源都被释放,通信双方将回到 Dead 阶段。 • PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate 阶段。

链路层(LCP)协商过程

LCP 协商由不同的 LCP 报文交互完成,协商由任意一方发送 Configure-Request 报文发起,如果对端接收此报文且参数匹配,则通过回复 Configure-Ack 响应协商成功

R1先发送 Configure-Request 报文,此报文中包含 R1 配置的链路层参数,当 R2 收到报文后,如果 R2 能识别并接受报文中的所有参数,则回送 Ack 报文,同理,R2 也要发送一个 Request 报文来让 R1 检测 R2 的参数。 R1 若没收到 Ack 报文,会每隔3秒重传一次 Request 报文,如果连续10次发送后没收到 Ack 报文,则认为对端不可用,停止发送 Request 报文。

但如果参数 不匹配 的话,R2 回复 Configure-Nak 报文告知 R1 修改参数重新协商。在这个 Nak 报文中,包含 R2 可以接受的链路层参数。R1接收到 Nak 报文后,重新选择本地配置的其他参数,并重新发送 Request 报文

如果出现参数 不识别 的情况,R2 将回复 Configure-Reject 响应告知对端删除不识别的参数并重新协商

认证协商

认证协商有两种模式:PAP 和 CHAP

PAP

PAP 双方有两次握手,协商报文以明文的形式在链路上传输。LCP 协商完成后,认证方 要求 被认证方 使用 PAP 认证。

  1. 被认证放将配置的用户名和密码信息使用 Authenticate-Request 报文以明文方式发送给认证方
  2. 认证方收到报文后对比信息是否匹配本地的配置信息,匹配则返回 Ack 报文,否则返回 Nak 报文,表示认证失败

CHAP

CHAP 有三次握手,协商报文被加密后再在链路上传输。

  1. 认证方 主动发起认证请求,认证方向被认证方发送 Challenge 报文,报文内包含 随机数和 ID
  2. 被认证方收到此 Challenge 报文后,进行一次 MD5 加密(ID + 随机数 + 密码),得到一个 16 Byte 长的摘要信息,然后将此摘要信息和端口上配置的 CHAP 用户名一起封装在 Response 报文中回送给认证方。
  3. 认证方根据接收到的用户名,在数据库上查找对应的密码信息,加上之前发送的 ID 和随机数,再进行一次加密运算,对比接收到的摘要信息,相同则认证成功,否则失败 CHAP 认证方式相较于 PAP ,使用了加密,提高了一定的安全性,但由于是 MD5 加密,安全性有限,因此在协议支持的加密算法选择范围内,优先使用更安全的算法,例如 AES/SHA2/HMAC-SHA2 等

网络层(NCP)协商

NCP 协商在数据链路上所传输的数据包的 格式和类型 , 以常见的 IPCP 协议为例,它分为静态 IP 地址协商和动态 IP 地址协商

  • 静态 IP 地址协商

需要手动在链路两端配置 IP 地址,每一端都要发送 Configure-Request 报文,每一端收到 Request 报文后,检查其中的 IP 地址,如果 IP 地址是一个合法的单播 IP 地址,而且与本地 IP 不冲突,则回应 Ack 报文

  • 动态 IP 地址协商

  1. R1向R2发送一个 Request 报文,此报文中会包含一个IP地址 0.0.0.0,表示向对端请求 IP 地址;
  2. R2收到 Request 报文后,认为其中包含的地址(0.0.0.0)不合法,使 用 Nak 回应一个新的 IP 地址 10.1.1.1;
  3. R1收到此 Nak 报文之后,更新本地 IP 地址,并重新发送一个 Request 报文,包含新的 IP 地址 10.1.1.1;
  4. R2收到 Request 报文后,认为其中包含的IP地址为合法地址,回应一个 Ack 报文;
  5. 同时,R2 也要向 R1 发送 Request 报文请求使用地址 10.1.1.2,R1 认为此地址合法,回应 Ack 报文。

PPPoE 协议

PPPoE 是一种把 PPP 帧封装到以太网帧中的链路层协议,常见的使用场景:运营商把一个站点上的多台主机连接到同一台远程接入设备(通过一个远端接入设备接入因特网),利用以太网将大量主机组成网络,运用 PPP 协议对接入的每个主机进行控制、计费。

在小时候上网的时候就是需要这样一个客户端,然后输入账号密码才能开始上网,而现在使用光纤以后似乎就没有这个步骤了,但实际上在光猫或者路由器上仍然需要使用 PPPoE 进行拨号上网。

PPPoE 会话建立

分为 发现、会话和终结 三个阶段

PPPoE 报文

PPPoE 报文封装在 Ethernet 帧中,PPPoE 报文中的 PPP-Packet 报文就是 PPP 帧结构

Eth-Type 为 0x8863 时表示承载的是 PPPoE 发现阶段 的报文,0x8864 表示承载的是 PPPoE 会话阶段 的报文。

Session ID 是与以太网 SMAC、DMAC 一起定义的 PPPoE会话。

发现阶段

  1. 客户端在本地以太网中 广播 一个 PADI 报文,包含了客户端需要的服务信息,报文中 Code 字段为 0x09,Session ID 字段为 0x0000
  2. 服务器端会将报文请求的服务和自己能提供的服务进行比较,如果可以提供服务,回送客户端一个 PADO 报文,Code 字段为 0x07,Session ID 为 0x0000
  3. 客户端可能会收到多个 PADO 报文,此时选择 最先 收到的 PADO 报文对应的服务器端回送一个 PADR 报文,Code 字段为 0x19,Session ID 为0x0000
  4. 服务器端收到 PADR 报文后,生成一个 唯一 的 Session ID 来标识会话,并发送 PADS 报文,Code 字段为 0x65,Session ID 字段是 PPPoE 服务器端为本 PPPoE 会话产生的 ID

会话阶段

会话阶段可以分为 PPP协商PPP 数据传输 两个阶段 PPP 协商与前面提到的 LCP、认证、NCP 三个阶段一致;协商完以后就开始传输 PPP 数据报文,会话过程中 Session ID 应该保持不变。

终结阶段

当客户端或者服务器端任意一端希望关闭连接时,会向对端发送一个 PADT 报文,Session ID 为希望终止的 Session ID ,对端收到一个 PADT 报文便随即关闭连接。

参考文章