目录
1. 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包含:
1. LCP(Link Control Protocol)协议:
建立、拆除和监控PPP数据链路。
2. NCP(Network Control Protocol)协议:
协商网络层格式与类型。
3. 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链路建立过程:
1. Establish阶段:LCP协商
协商内容:SP(Single-link PPP)还是MP(Multilink PPP)、MRU、认证方式、魔术字等选项。
LCP协商成功后进入Opened状态,表示底层链路建立。
2. Authenticate阶段:CHAP或PAP验证,成功后为SUCCESS状态。
3. 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协商有两种:
1. PAP认证:
使用PAP authenticate-request、PAP authenticate-ack报文协商。
PAP authenticate-request包含明文用户名和密码。
2. CHAP认证:
服务器发送CHAP challenge报文,包含ID值及一个随机字符串。
客户端根据hash得到字符串,并在CHAP Response中回复。
服务器hash计算后CHAP Response中hash比较。若一致回复success,否则回复failure。
1.5 NCP
协商IPCP协议, 包括IP地址。

2. PPPoE
2.1 介绍
PPPoE:主要利用了PPP协议中的访问控制和计费功能。
以太网具有广播属性,通信双方无法验证对方身份,因而通信不安全。
PPPoE通过Session ID保障用户安全。
2.2 拓扑


ADSL 和FTTH(光纤到户)的拨号都使用PPPoE协议。
PPPoE不使用ARP,可防止ARP攻击。
2.3 报文格式


PPPoE报文格式:
1. 以太网头:
目标MAC。
源MAC。
类型:
标识PPPoE报文类型,0x8863(发现阶段),0x8864(PPP会话阶段)。
2. 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头。
3. 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。
3. 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 报文分为:
1. PPTP控制报文:
用于创建、维护、终止PPTP连接。
2. 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 报文流程
1. Client向Server的1723端口建立TCP连接。
2. 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选项。

3. 隧道数据传输
PPTP 隧道建立后,就可在客户机与服务器之间传送 PPP 数据。
PPTP发送数据包封装过程:
1. 应用层数据封装成IP包。
2. 将IP包发送到VPN虚拟接口。
3. VPN虚拟接口将IP数据包压缩和加密(可选),并添加PPP头。
4. VPN虚拟接口将PPP帧发送给PPTP驱动。
5. PPTP驱动在PPP帧外加GRE头。
6. PPTP驱动将GRE头提交给TCP/IP协议栈。
7. TCP/IP协议栈为GRE添加IP头。
8. 最后为IP包进行数据链路层封装,并通过物理网卡发出。

收包解封装过程:

3.4 实现
1. 加载相关模块:
modprobe pptp.ko
modprobe ppp_mppe.ko
2. 运行进程:
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 # 表示是否加密。
4. 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
三种应用场景:
1. 拨号用户访问企业内网:
用于用户不经常访问企业总部时,LAC检测用户下线,自动拆除隧道。
需要用于自己登录L2TP账户密码。



2. LAC自动拨号
LAC 与 LNS 间建立一条永久性 L2TP 会话,无需用户 PPP 拨号,只需 IP 连接即可。


3. 移动办公用户访问企业内网
由用户发起 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发起请求。
SCCRP(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个字节。

1万+

被折叠的 条评论
为什么被折叠?



