在实现过程中,软件接收对端的LCP包,然后根据LCP的状态跳转表来决定自己下一步的状态,并产生相应的事件和动作,将响应包通过软件发向对端,达到软件实现链路连接的目的。
软件可以将链路活动的状况,接收和发送的数据包、链路的当前状态一一显示出来。用户可以通过软件详细了解到网络的活动情况和状态。
1 实现方法
软件实现的开发工具为Borland C++Builder可视化开发环境,运行的环境是简体中文Windows 98。软件具有信息回显界面,便于用户测试和分析。以下详细说明软件实现的方法。
1.1 总体流程
软件的实现部分用到2个子线程,这2个线程分别负责接收和处理数据,并对数据缓冲区进行操作。总体流程如图1所示。
1.2 线程结构
软件上采用多线程的技术实现。除了主线程,有2个子线程用于实现链路操作:一个作为数据包接收线程,一个作为数据包处理线程。
当程序开始时,主线程初始化,将自己的状态置为Initial,同时启动数据接收线程。因为这时PPP连接双方这时开始进行连接和协商,所以会收到对端设备的LCP包,接收线程接收LCP包,并交给处理线程处理。处理线程对接收的数据进行解包,解出LCP包的内容,结合当前的情况,得到产生的事件,并根据当前的状态和状态跳转表,决定要模拟的下一个状态,如果必要,将相应的响应发给对端。

处理线程是整个程序的重点,这个线程的流程如图2所示。

可以分为以下几步:
(1)得到接收线程交给的对端数据包。
(2)分析数据包中的内容,根据数据包的类型和当前本端的状态,查找状态跳转表,决定本端下一步的状态。
(3)通过状态-事件的对应,本端执行相应的事件。
(4)将产生的事件,系统的情况通过界面显示。
(5)根据状态跳转表确定是否应该给对端发送LCP包。如果需要,则按照LCP包标准封装数据并发送。
1.3 数据结构
在数据结构上,程序使用一个缓冲区,共有10个元素,每个元素有1 500 B左右大小,用来存储每次送 上来的数据以备分析。2个线程分别对缓冲区进行读写。设有一个头指针和一个尾指针以免访问冲突,接收线程从底层读上数据,简单判断后保存在头指针所指向的那个缓冲区元素中,设置其未用标志,头指针加1;处理线程从尾指针指向的缓冲区元素中读出数据,然后进行处理,设置其已用标志,尾指针加1。具体的数据结构如下:

1.4 链路情况回显
链路状况和状态转换的情况可以通过LCP包处理子线程来完成。处理子线程每处理一次对端发来的LCP包,就把状态的变化和链路的情况显示在界面上,同时对于超时异常、计时器重启这类事件也能显示出来。用户可以实时的监视线路连接的情况,这对于分析线路有着重要的作用。
2 软件实现的应用前景
PPP协议LCP操作的软件实现有重要的实际意义。用户可以通过实现软件的界面显示来判断线路的情况和定位故障的发生地点。一些厂家已经根据本文所说的原理和实现方法做出产品,现在正在推广应用中。 .
- 上一篇:HSRP协议原理及特点
- 下一篇:详解实现EOS技术的封装协议