PPP & PPPoE & L2TP & PPTP 一文全介绍
PPP & PPPoE & L2TP & PPTP 一文全介绍
PPP(Point-to-Point Protocol)、PPPoE(PPP over Ethernet)、PPTP(Point-to-Point Tunneling Protocol)和L2TP(Layer 2 Tunneling Protocol)是网络通信中常用的几种协议。本文将详细介绍这些协议的工作原理、帧格式、报文流程等内容,帮助读者全面了解它们的特点和应用场景。
PPP
1.1 PPP 介绍
PPP协议:
- 点到点链路数据链路层协议,在SLIP(Serial Line Internet Protocol)基础上发展起来。
- 可提供用户验证,易扩充,支持全双工同步异步通信。
SLIP:
- 只支持异步传输、不支持协商(不能协商双方IP地址等网络层属性)、只能承载IP报文等缺陷。SLIP逐步被PPP替代。
PPP可在串行通信线路上传输多种网络层协议,如IP、IPX、AppleTalk。
PPP既支持同步又支持异步,而X.25、FR(Frame Relay)等链路层仅支持同步,SLIP仅支持异步。
点到点直接连接是简单的广域网连接形式,如PPP。
PPP有良好扩展性,如需在以太网上承载PPP协议时,可扩展为PPPoE。
PPP包含:
- LCP(Link Control Protocol)协议:
- 建立、拆除和监控PPP数据链路。
- NCP(Network Control Protocol)协议:
- 协商网络层格式与类型。
- CHAP 和 PAP:
- CHAP:(Challenge-Handshake Authentication Protocol)。
- PAP:(Password Authentication Protocol)。
1.2 PPP 帧格式
Flag域:
- 标识一个物理帧的起始和结束,该字节为0x7E。
Address域:
- 唯一标识对端,点对点链路无须对方链路层地址,0xFF即可。
Control域:
- 默认为0x03,表明为无序号帧,PPP默认不采用Seq和ACK来实现可靠传输。
Address和Control域一起标识此报文为PPP报文,即PPP报头为FF03。
Protocol域:标识信息域中数据包类型:
- 0x0021 IP
- 0xC021 LCP
- 0x8021 NCP
- 0xC023 PAP
- 0xC025 LQR
- 0xC223 CHAP
Information域:
- 最大长度MRU默认1500字节,可实际协商。长度不够可填充。
FCS域:
- 校验。
链路建立过程:
PPP链路建立过程:
- Establish阶段:LCP协商
- 协商内容:SP(Single-link PPP)还是MP(Multilink PPP)、MRU、认证方式、魔术字等选项。
- LCP协商成功后进入Opened状态,表示底层链路建立。
Authenticate阶段:CHAP或PAP验证,成功后为SUCCESS状态。
Network阶段:NCP协商
- IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)
- IPCP会协商双方IP
- NCP协商后,链路建立成功。
运行过程中,可能随时中断连接,物理链路断开、认证失败、超时等都可能导致链路进入Terminate阶段。
Terminate阶段,所有资源被释放,通信双方回到Dead。
1.3 LCP
LCP报文:
- Code域:即编码,标识LCP报文类型
- 0x01 Configure-Request
- 0x02 Configure-Ack
- 0x03 Configure-Nak
- 0x04 Configure-Reject
- 0x05 Terminate-Request
- 0x06 Terminate-Ack
- 0x07 Code-Reject
- 0x08 Protocol-Reject
- 0x09 Echo-Request
- 0x0A Echo-Reply
- 0x0B Discard-Request
Identifier:即ID,
- 用来匹配请求和响应。
- 请求报文的ID从0x01递增。
Length:
- 即长度,Data域总长度,即Type、Length和Data总长度。
Data字段:
- 即LCP数据段。
- type:报文类型
- 0x01 MRU 最主要
- 0x02 Async-Control-Character-Map
- 0x03 Authentication-Protocol (身份验证PAP or CHAP,若无认证则不包含该type)
- 0x04 Quality-Protocol(协商使用链路检测的方法)
- 0x05 Magic-Number (防止环路)
- 0x06 RESERVED
- 0x07 Protocol-Field-Compression(PPP协议字段的压缩协商)
- 0x08 Address-and-Control-Field-Compression(链路层地址和控制字段的压缩协商)
Configure-Request:
- 没收到Configure回复时,每隔3秒重传一次Configure-Request,最多10次。
- 对应响应有:
- Configure-Ack:表示协商成功。
- Configure-Nak:表示参数不能接受,其中只包含不能识别的参数列表。
- Configure-Reject:表示参数不能识别,其中只包含不能识别的参数列表。
Echo-Request、Echo-Reply:
- 定期发送,用于链路状态检测。
Terminate-Request,Terminate-Ack:
- 链路关闭。
1.4 认证
LCP协商有两种:
- PAP认证:
- 使用PAP authenticate-request、PAP authenticate-ack报文协商。
- PAP authenticate-request包含明文用户名和密码。
- CHAP认证:
- 服务器发送CHAP challenge报文,包含ID值及一个随机字符串。
- 客户端根据hash得到字符串,并在CHAP Response中回复。
- 服务器hash计算后CHAP Response中hash比较。若一致回复success,否则回复failure。
1.5 NCP
协商IPCP协议, 包括IP地址。
PPPoE
2.1 介绍
PPPoE:主要利用了PPP协议中的访问控制和计费功能。
以太网具有广播属性,通信双方无法验证对方身份,因而通信不安全。PPPoE通过Session ID保障用户安全。
2.2 拓扑
ADSL 和FTTH(光纤到户)的拨号都使用PPPoE协议。
PPPoE不使用ARP,可防止ARP攻击。
2.3 报文格式
PPPoE报文格式:
- 以太网头:
- 目标MAC。
- 源MAC。
- 类型:
- 标识PPPoE报文类型,0x8863(发现阶段),0x8864(PPP会话阶段)。
- PPPoE头部:
- Ver(4 bits): PPPoE协议版本号,值为0x1。
- Type(4 bits): PPPoE帧类型,值为0x1。
- Code(1字节): PPPoE报文具体类型。
- 0x00:会话数据。
- 0x07:PADO或PADT。
- 0x09:PADI。
- 0x19:PADR。
- 0x65:PADS。
- Session ID(2字节):标识PPPoE会话,由服务器分配。实际会话ID还结合源目MAC。
- Length(2字节): PPPoE的Payload长度,不包括以太网头和PPPoE头。
- PPP帧:
- PPP帧被封装在PPPoE报文中,包括:标志字节、地址字节、控制字节、协议字节、信息字段和校验字段等。
2.4 报文流程
发现阶段
Client广播PADI(PPPoE Active Discovery Initiation)。
Server 回应 PADO(PPPoE Active Discovery Offer),包含Access Concentrator Name Tag。
Client 选定合适 Server,并单播回复 PADR(PPPoE Active Discovery Request)。
Server 回复 PADS(PPPoE Active Discovery Session-confirmation),其中包含唯一会话ID
四个报文都包含server name Tag。
2.5 PPP会话阶段
PPPoE Client 和 PPPoE Server 通常在同一局域网。
2.6 BCP
即PPP Bridging Control Protocol,基于PPP链路,桥接双方子网。
BCP 属于 PPP 协议中 LCP 链路配置协商参数。可结合 PPTP 或 L2TP 使用实现大二层组网。
为实现L2TP+BCP,需要的应用:
- xl2tpd + pppd
- openl2tp + pppd
- 还可以 L2TP + BCP + IPsec。
ESP 协议属于 IPsec。
PPTP
PPTP(点对点隧道协议)由微软、3Com等联合开发。
最大特点:
- 配置简单(只需用户名,密码,服务器IP)。
- 安全性不如IPSec。
PPTP 是在 PPP 基础上开发增强型安全协议,PPTP 使用用户级 PPP 身份验证,用于 Microsoft 点对点加密 (MPPE)的数据加密。
配置界面
3.1 工作原理
PPTP第一步是建立TCP连接,该TCP连接只用于PPTP控制报文,负责链路控制。而后续数据包不用TCP连接,以PPP协议封装,然后在IP协议上传输。
PAC: 即 PPTP Access Concentrator, PPTP网络集中器。客户端。
PNS: 即 PPTP Network Server,PPTP网络服务器。服务器。
PPTP 报文分为:
- PPTP控制报文:
- 用于创建、维护、终止PPTP连接。
- PPTP数据报文:
- 用来传送PPP数据包,PPP数据包封装在GRE中。
3.2 报文格式
控制报文和数据报文格式不同。
3.2.1 控制报文
需提前建立TCP连接。
3.2.2 数据报文
PPPoE可算是隧道,PPPoE头类似GRE头。
对于数据报文, Server和Client都使用到两个IP。
- 一个公网IP,用于连接Internet。
- 另一个是PPTP 拨号分配的内网IP。
Server 可手动配置的内网 IP,而 Client 的内网地址是从 Server 获取的。
PPP Compressed Datagram 中又包含 IP TCP 应用层数据。
3.3 报文流程
Client向Server的1723端口建立TCP连接。
PPTP链路控制:
- 2.1 Client 发送 Start Control Connection Request。
- 2.2 Server 回复 Start Control Connection Reply。
- 2.3 Client 发送 Outgoing Call Request。创建隧道,包含一个客户端到服务器方向的发送数据的PPTP隧道ID
- 2.4 Server 回复 Outgoing Call Reply。隧道创建成功。包含一个从服务器到客户端方向的发送数据的PPTP隧道ID。
- 2.5 Client 发送Set-Link-Info:包含协商PPP选项。
- 隧道数据传输
PPTP 隧道建立后,就可在客户机与服务器之间传送 PPP 数据。
PPTP发送数据包封装过程:
- 应用层数据封装成IP包。
- 将IP包发送到VPN虚拟接口。
- VPN虚拟接口将IP数据包压缩和加密(可选),并添加PPP头。
- VPN虚拟接口将PPP帧发送给PPTP驱动。
- PPTP驱动在PPP帧外加GRE头。
- PPTP驱动将GRE头提交给TCP/IP协议栈。
- TCP/IP协议栈为GRE添加IP头。
- 最后为IP包进行数据链路层封装,并通过物理网卡发出。
收包解封装过程:
3.4 实现
- 加载相关模块:
- modprobe pptp.ko
- modprobe ppp_mppe.ko
- 运行进程:
- pppd nodetach nodefaultroute lock usepeerdns user $pptp_user password $pptp_pass
- plugin pptp.so pptp_server $pptp_srv_ip file /tmp/options.pptp nobcp &
其中 /tmp/options.pptp 内容为:
- noipdefault
- noauth
- nobsdcomp
- nodeflate
- novj
- novjccomp
- noaccomp
- maxfail 0
- mtu 1414
- mru 1414
- +mppe-128 or nomppe-stateful # 表示是否加密。
L2TP
4.1 介绍
L2TP(Layer Two Tunneling Protocol):二层隧道协议,扩展了PPP。
适用于用户远程拨号接入企业总部。
LAC(L2TP Access Concentrator):
L2TP 访问集中器,即L2TP客户端。
LNS(L2TP Network Server):
L2TP 网络服务器,即L2TP服务器。
VPDN:基于拨号网络的VPN,如:
- PPTP L2F L2TP
L2TP 集合PPTP和L2F优点。
4.2 典型组网
远端系统 = dial clients = 企业分支
LAC:L2TP Access Concentrato
三种应用场景:
- 拨号用户访问企业内网:
- 用于用户不经常访问企业总部时,LAC检测用户下线,自动拆除隧道。
- 需要用于自己登录L2TP账户密码。
- LAC自动拨号
- LAC 与 LNS 间建立一条永久性 L2TP 会话,无需用户 PPP 拨号,只需 IP 连接即可。
- 移动办公用户访问企业内网
- 由用户发起 L2TP 连接。
4.3 配置界面
BCP:
- 属于PPP协议中LCP链路配置协商参数。
- 用于在PPP连接的两端协商和管理网络桥接,如配置、状态和参数。
- 通知对端设备是否启用桥接、桥接的类型、桥接端口等信息。
4.4 数据格式
层二 VPN:可用L2TP + BCP。
报文头格式:ETH + IP + UDP + L2TP + (PPP+BCP) + ETH + IP
层三VPN:不使能PPP的BCP协议。
报文头格式:ETH + IP + UDP + L2TP + PPP + IP
4.5 控制通道和数据通道
在一对 LAC和 LNS 间可建立多条 L2TP 隧道。每个L2TP隧道连接包括:一个控制连接和多个会话连接。
控制通道:隧道的建立、维护和关闭。
数据通道:用于传输用户数据。
L2TP报头包含Tunnel ID和Session ID信息,用来标识不同的隧道和会话。
隧道标识与会话标识是由对端分配,只对接收端有意义,对发送端没有意义。
隧道建立过程:
- SCCRQ(Start-Control-Connection-Request):
- 一般由LAC向LNS发起请求。
- SCCRQ(Start-Control-Connection-Reply):
- 表示接受对端连接请求。
- SCCCN(Start-Control-Connection-Connected):
- 表示隧道建立完成。
会话建立过程:
- ICRQ(Incoming-Call-Request):
- 当LAC检测到拨号时,向LNS发送ICRQ,请求在隧道中建立一个会话。
- ICRP(Incoming-Call-Reply):
- 表示ICRQ成功,LNS会在ICRP中标识L2TP会话必要参数。
- ICCN(Incoming-Call-Connected):
- 表示L2TP会话建立完成。
4.6 PPTP 和 L2TP 比较
PPTP 要求为IP网络。
L2TP 要求面向数据包的点对点连接(支持IP、ATM、帧中继、X.25等网络)。
PPTP只支持单一隧道。
L2TP支持多隧道。
PPTP不支持包头压缩、隧道验证。
L2TP支持包头压缩、隧道验证。
PPTP包头占6个字节。
L2TP压缩包头占4个字节。