最近准备用vc实现个简单的pppoe server,用局域网内的客户机通过系统自带的拨号程序拨号连接,因为它是用标准的pppoe协议,要求拨号认证成功后才允许客户机上网.
下面是我的一些理解:
pppoe过程分为两个阶段,一个是pppoe的Discovery阶段,还有一个就是ppp会话阶段.
对于Discovery没有什么疑惑,但是会话阶段就感觉有点难理解了.
比如当会话建立好之后,客户端会根pppoe-server进行lcp等等协议的交互,但是客户端要进行操作时,主要是上网.具体是怎样一个情况呢?
(1)上网的数据包还要经过pppoe封装吗?
(2)上网的数据包要到达pppoe-server吗?再转发给web服务器.还是直接跟web服务器进行交互?pppoe server要有路由功能?也就是说对拨号拨上去之后的数据传送细节不清楚,包括原理还有封装.
看了下linux下的rp-pppoe的源码,不是很理解
请各位有经验的高手给详细讲解下pppoe server的原理!!

解决方案 »

  1.   

    回复WinEggDrop:你的回复不是很明白.
    我想了解pppoe server的收发包的流程,如何让客户机在和服务器端实现ppp连接后实现上网?
    是server端要负责转发每个client的数据包吗?
    还有TAG字段的Service-Name不是很理解
      

  2.   

    看过rfc2516,但这只是实现以太网上的客户和服务器的ppp连接,我是想知道怎么让客户机实现上网?
      

  3.   

    简单说一下吧
    首先是PPPoE的交互
       由于需要在Ethernet广播网里建立PPP的点对点的连接,客户端事先不知道服务器在哪里,需要发送PADI广播发现服务,服务器收到PADI后回复PADO,客户端再发送PADR请求服务,然后服务器发送PADS,然后建立起PPP的连接开始PPP交互,包括认证的实现,可以采用PAP、CHAP等认证方式。认证通过后,服务器分配给客户端一个IP地址以及默认网关,客户端上创建一个虚拟网卡(如ppp0),配置上该IP地址和默认网关,服务器端也会建立一个虚拟网卡,与客户端通信。
    客户端这时访问Internet的数据包会根据默认网关从该虚拟网口(ppp0)出去,在IP头上会加上一个PPP头,再加上PPPoE的头,再加上Ethernet的头发送出去。
      

  4.   

    楼主你可以先搭建一个PPPoE Server环境,然后建立一个客户端,自己动手测试一下,有助于理解。
    此外你可以参考Linux里的rp-pppoe的代码实现
      

  5.   

    PPPoE涉及到链路层方面的东西
    我想要从驱动方便着想吧