雅安市建设网站百度数据研究中心官网
简介
PPPoE(Point-to-Point Protocol over Ethernet)是一种在以太网上封装PPP协议的方式,常用于在宽带接入中进行拨号。
PPPoE的拨号原理如下:
- 客户端发起PPPoE Active Discovery Initiation (PADI)报文,广播到网络中的所有PPPoE服务器,表示客户端想要建立连接。
- PPPoE服务器收到PADI报文后,回复PPPoE Active Discovery Offer (PADO)报文,告知客户端当前服务器的信息,包括服务名、会话ID等。
- 客户端从PADO报文中选择一个服务器,并发送PPPoE Active Discovery Request (PADR)报文,请求连接到该服务器。
- PPPoE服务器收到PADR报文后,向客户端发送PPPoE Active Discovery Session-confirmation (PADS)报文,告知客户端连接成功。
- 客户端和服务器建立PPPoE会话,并进行身份认证、配置等工作。
- PPPoE会话建立后,客户端和服务器开始进行数据传输。
在PPPoE会话建立之前,客户端必须先完成物理层和数据链路层的连接,也就是完成以太网的连接。此时,客户端和服务器之间还没有IP地址和路由信息,只能通过PPP协议进行数据传输。在建立了PPPoE会话之后,客户端和服务器可以互相分配IP地址,并通过路由协议交换路由信息,完成最终的数据传输。
需要注意的是,不同的ISP可能会有不同的PPPoE参数设置,例如MTU大小、认证方式等,因此在进行PPPoE拨号时,需要按照ISP的要求进行设置。
PPPOE拨号流程
PADI
在PPPoE中,PPPoE客户端需要发送PADI(PPPoE Active Discovery Initiation)消息以寻找PPPoE服务器。PADI消息包含以下字段:
- Version:一个1字节的字段,用于指示PADI消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADI消息的类型。在PADI消息中,该字段的值为1。
- Code:一个1字节的字段,用于指示PADI消息的代码。在PADI消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADI消息中,该字段的值为0。
- Payload:一个可变长度的字段,用于包含PADI消息的有效载荷。在PADI消息中,有效载荷为空。
PADI消息的详细解释如下:
- Version字段:该字段用于指示PADI消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADI消息中,Version字段的值为1。
- Type字段:该字段用于指示PADI消息的类型。在PADI消息中,Type字段的值为1,表示该消息是一个发现消息。
- Code字段:该字段用于指示PADI消息的代码。在PADI消息中,Code字段的值为0,表示该消息是一个发现请求消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADI消息中,Session ID字段的值为0,因为在这个阶段还没有建立PPPoE会话。
- Payload字段:该字段用于包含PADI消息的有效载荷。在PADI消息中,Payload字段为空,因为在发现阶段不需要任何数据。
PADO
当PPPoE服务器收到PPPoE Active Discovery Initiation (PADI) 消息后,会返回一个PPPoE Active Discovery Offer (PADO) 消息。PADO消息用于向PPPoE客户端提供PPPoE服务器的相关信息,以便客户端选择一个服务器与之建立PPPoE会话。
PADO消息包含以下字段:
- Version:一个1字节的字段,用于指示PADO消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADO消息的类型。在PADO消息中,该字段的值为2。
- Code:一个1字节的字段,用于指示PADO消息的代码。在PADO消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADO消息中,该字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADO消息的有效载荷。在PADO消息中,有效载荷包含服务器提供的信息,例如服务器的MAC地址、服务名称、最大传输单元(MTU)等。
PADO消息的详细解释如下:
- Version字段:该字段用于指示PADO消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADO消息中,Version字段的值为1。
- Type字段:该字段用于指示PADO消息的类型。在PADO消息中,Type字段的值为2,表示该消息是一个提供消息。
- Code字段:该字段用于指示PADO消息的代码。在PADO消息中,Code字段的值为0,表示该消息是一个提供成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADO消息中,Session ID字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADO消息的有效载荷。在PADO消息中,有效载荷包含服务器提供的信息,例如服务器的MAC地址、服务名称、最大传输单元(MTU)等。PPPoE客户端可以使用这些信息来选择一个合适的PPPoE服务器并建立PPPoE会话。
PADR
当PPPoE客户端收到PPPoE Active Discovery Offer (PADO) 消息后,会发送PPPoE Active Discovery Request (PADR) 消息来选择一个PPPoE服务器并建立PPPoE会话。PADR消息包含以下字段:
- Version:一个1字节的字段,用于指示PADR消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADR消息的类型。在PADR消息中,该字段的值为1。
- Code:一个1字节的字段,用于指示PADR消息的代码。在PADR消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADR消息中,该字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADR消息的有效载荷。在PADR消息中,有效载荷包含客户端选择的PPPoE服务器的相关信息,例如服务器的MAC地址、服务名称等。
PADR消息的详细解释如下:
- Version字段:该字段用于指示PADR消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADR消息中,Version字段的值为1。
- Type字段:该字段用于指示PADR消息的类型。在PADR消息中,Type字段的值为1,表示该消息是一个请求消息。
- Code字段:该字段用于指示PADR消息的代码。在PADR消息中,Code字段的值为0,表示该消息是一个请求成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADR消息中,Session ID字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADR消息的有效载荷。在PADR消息中,有效载荷包含客户端选择的PPPoE服务器的相关信息,例如服务器的MAC地址、服务名称等。客户端发送这些信息以请求与服务器建立PPPoE会话。
PADS
当PPPoE服务器收到PPPoE Active Discovery Request (PADR) 消息后,如果服务器可以接受该请求并准备好与客户端建立PPPoE会话,则服务器会返回一个PPPoE Active Discovery Session-confirmation (PADS) 消息。PADS消息用于确认PPPoE会话的建立,并向客户端提供会话的相关信息。
PADS消息包含以下字段:
- Version:一个1字节的字段,用于指示PADS消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADS消息的类型。在PADS消息中,该字段的值为3。
- Code:一个1字节的字段,用于指示PADS消息的代码。在PADS消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADS消息中,该字段的值与客户端在PADR消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADS消息的有效载荷。在PADS消息中,有效载荷包含服务器提供的信息,例如客户端的IP地址、服务器的IP地址、最大传输单元(MTU)等。
PADS消息的详细解释如下:
- Version字段:该字段用于指示PADS消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADS消息中,Version字段的值为1。
- Type字段:该字段用于指示PADS消息的类型。在PADS消息中,Type字段的值为3,表示该消息是一个会话确认消息。
- Code字段:该字段用于指示PADS消息的代码。在PADS消息中,Code字段的值为0,表示该消息是一个会话确认成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADS消息中,Session ID字段的值与客户端在PADR消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADS消息的有效载荷。在PADS消息中,有效载荷包含服务器提供的信息,例如客户端的IP地址、服务器的IP地址、最大传输单元(MTU)等。客户端接收这些信息以确认会话的建立,并使用它们来配置PPPoE接口以实现数据传输。
PPP身份验证
PPPoE建立连接后,后续的验证流程包括PPP身份验证和PPPoE会话阶段。
PPP身份验证是在PPP协议层进行的。PPP身份验证是为了验证客户端是否有访问服务器资源的权限。PPP身份验证分为PAP和CHAP两种方式。
PAP
PAP(Password Authentication Protocol)是一种简单的密码认证协议。PAP验证流程如下:
- 客户端将用户名和密码以明文形式发送给服务器。
- 服务器接收到用户名和密码后,将其与存储在服务器上的用户名和密码进行比较。
- 如果用户名和密码匹配,则服务器发送一个认证成功消息给客户端。否则,服务器发送一个认证失败消息给客户端。
CHAP
CHAP(Challenge-Handshake Authentication Protocol)是一种更加安全的密码认证协议。CHAP验证流程如下:
- 客户端向服务器端发送身份认证请求,请求认证自己的身份。
- 服务器端接收到请求后,生成一个随机数作为挑战,发送给客户端。
- 客户端收到挑战后,将挑战和密码通过某种加密算法(如MD5)进行加密,得到一个响应值,并将响应值发送给服务器端。
- 服务器端收到响应值后,使用相同的加密算法对挑战和密码进行加密,如果加密结果与客户端发送的响应值相同,则认证通过。
在这个过程中,客户端和服务器端需要协商使用哪种加密算法。CHAP协议定义了三种加密算法:MD5、SHA-1和Windows NT Hash。这些算法是在协议中被硬编码的,客户端和服务器端在协商加密算法时,会根据协议规定的算法列表进行选择。
具体来说,在CHAP协议中,挑战和响应值都是通过加密算法进行处理的。客户端和服务器端在进行加密时,会使用预共享的密码或密钥作为加密密钥。在这个过程中,客户端和服务器端都知道密码,但密码并不会在通信中明文传输,而是在加密过程中进行处理,以保证通信的安全性。
总的来说,CHAP协议的加密算法是在客户端和服务器端的挑战-响应过程中进行协商的,客户端和服务器端会根据协议定义的加密算法列表选择一种算法,并使用预共享的密码进行加密,以实现身份认证和通信的安全性。
PPP LCP Configure
在PPP链路层会话建立的过程中,客户端和服务器端之间需要进行链路参数的协商。协商的内容包括数据压缩、最大传输单元(MTU)、错误检测和校验、协议类型等等。协商的过程需要双方相互发送LCP Configure-Request和LCP Configure-Ack或LCP Configure-Nak或LCP Configure-Reject消息,直到双方都同意使用相同的链路参数为止。
当PPP客户端想要和PPP服务器端建立PPP链路层会话时,它会向服务器端发送LCP Configure-Request消息。这个消息包含了客户端希望协商的链路参数,例如MTU大小、最大协商值等等。PPP服务器收到Configure-Request消息后,会向客户端回复Configure-Ack、Configure-Nak或Configure-Reject消息,告知客户端是否接受这些链路参数或提供可选的链路参数值。如果接收到的是Configure-Ack消息,则说明链路参数已经协商完成,PPP链路层会话建立成功;如果接收到的是Configure-Nak或Configure-Reject消息,则说明链路参数协商失败,需要重新协商。
- 客户端接收到PADS消息后,向服务器发送一个PPP LCP Configure-Request消息,以协商PPP连接的配置参数。
- 服务器接收到客户端发送的Configure-Request消息后,向客户端发送一个PPP LCP Configure-Ack消息,以确认协商结果。
- 客户端和服务器通过发送PPP NCP Configure-Request和Configure-Ack消息来协商网络控制协议(NCP)的配置参数,以完成PPPoE会话的建立。