GPRS实现pppd拨号

本文深入探讨了pppd拨号程序在系统中的作用,详细阐述了其在网络连接、通信过程中的角色及其三层结构的独立控制机制。重点介绍了链路层、网络层和应用层如何通过特定的配置和检测方法来维持链路状态,特别指出在弱信号环境下链路检测的局限性,并提出了上层协议的重要性。同时,文章强调了这些机制在拨号流程中的关键作用,以及如何通过心跳和注册机制确保网络连接的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 pppd拨号程序
1.1.1 系统说明

系统采用pppd拨号之后,建立ppp0设备,与eth0相当,对系统来说就是提供了另外一个网路接口。
系统中存在两个网路接口,而上层的网路通信接口几乎都不指定使用哪个接口进行通信,这样就必须将ppp0设置为系统的默认网关。结果就是:系统根据目标地址将不是本地(即指不在eth0子网范围内)的数据包发送到ppp0上。
1.1.2 拨号控制分层

Ppp链路层 

主要是pppd进程对ppp链路的维护;

网路层  

对应用程序来说是对sock的操作函数部分;

应用层 

 主要是对应用层链路的维护,即心跳,注册等;

这三部分是独立控制的。如建立网路通信通信时,并不考虑ppp链路是否存在。但在整个链路的维持上,它们是由依赖的。

下面介绍这3层是如何维持链路的。

Ppp链路层 

通过定时向服务器发送LCP数据包,检测链路状态

lcp-echo-failure = 10
lcp-echo-interval = 60s
意思是每60s进行lcp链路检测,查看modem与运营商基站之间网络链接情况,如果在lcp-echo-failure次没有正常应答,pppd就会取消ppp0网卡,应用程序通过检测ppp0网卡运行状态,来确定网络连接是否可用。
当用这种方法检测网络是否可用,很难验证。需要在拨号成功后切断猫和基站之间的连接,可以做的是拔掉天线,但即使这样,猫也可能在信号极其微弱的情况下,偶尔与基站之间通信正常,而很难达到连续失败10次而检测到网络断开!!!
测试发现在信号很弱的情况下,上述检测链路通断的方法并不可靠。可能出现的情况是上述检测方法显示网络连接正常,而发生数据包和建立tcp链路失败。所以需要更上层的协议来加强网络状态的检测和处理。

网路层 

通过系统提供的socket操作函数来对网路层的连接进行检查。

一般正常断开tcp连接可以检测到。当对于拔掉网线的情况,则无法检测,可依赖上层心跳机制来识别;为避免频繁建立连接,也限制了建立于主站服务器连接的时间。即第一次连接失败,则等待1s,第二次则等待2s后开始建立连接。。。若等待时间大于512s则等待512s,若连续32次失败,则重启ppp链路层,并重置等待时间为0。
另外它的状态也会影响应用层的注册和心跳。即若该层连接未建立,则上层的心跳和注册任务是不会运行的。这样避免了登录上主站发送1个心跳和1个注册的问题,并且也避免了上报帧序号不连续的问题。

应用层 

主要通过注册和心跳的回复是否正常来判断链路是否正常。心跳任务流程如下:

连接上应用服务器后,发送注册,若主站不回应,则每隔T(目前为1)分钟后重发,若重发次数大于了3(即发送了4个注册),则将网络层连接重连,并将间隔增加到2T分钟,依次类推,直到间隔大于32T。若连续失败5*4次,则将ppp链路重启,并将间隔置为1T,重新循环。

pppd拨号流程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值