600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 实现4G模块EC20在树莓派系统下的PPP拨号上网

实现4G模块EC20在树莓派系统下的PPP拨号上网

时间:2022-05-28 22:29:00

相关推荐

实现4G模块EC20在树莓派系统下的PPP拨号上网

目录

PPP协议

PPP通信建立

PPP认证方式

ppp协议栈

pppd数据传输

Pppd 控制协议数据流程

Linux中的PPP实现

安装PPP

方法一:源码安装

方法二: 直接安装

PPP拨号上网流程

拨号脚本脚本文件

开始PPP拨号上网

添加默认网关

查看网关

上网测试

各个运营商拨号上网设置:

PPP协议

什么是PPP协议

PPP协议(Point-to-Point Protocol)是一种网络协议中最为基础的协议,工作于数据链路层,它是为在同等单元之间传输数据包这样的简单链路而设计的,这种链路提供了全双工操作,并按照顺序传递数据包。PPP为基于各种主机,网桥和路由器的简单连接提供一种共通的解决方法。

主要特点:

链路控制协议 LCP(Link Control Protocol);

网络控制协议 NCP(Network Control Protocol);

认证协议:口 令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge-Handshake Authentication Protocol)。

PPP协议包括以下三个部分:数据帧封装方法链路控制协议LCP,(Link, Control Protocol):它用于对封装格式选项的自动协商,建立和终止连接。探测链路错误和配置错误。针对不同网络层协议的一族网络控制协议NCP(Network Control Protocol): PPP协议规定了针对每一种网络层协议都有相应的网络控制协议,并用他们来管理各个协议不同的需求

PPP通信建立

1.LCP协商,协商内容包 括除RFC1661中所定义的选项之外,还要考虑PPPOA和PPPOE协议中规定的内容。

2.LCP协商过 后就到了Establish阶段,开始PAP或CHAP认证。PAP为两次握手认证,口令为明文。PAP认证过程如下:发送用户名同口令到认证方,认证方 查看是否有此用户,口令是否正确,然后发送相应的响应。CHAP为三次握手认证,口令为密文(密钥)CHAP认证由认证方发送一些随机产生的报文,交给被 认证,被认证方用自己的口令字用MD5算法进行加密,传回密文,认证方用自己保存的口令字及随机报文用MD5算法加密,比较二者的密文,根据比较结果返回 响应的响应。

3.认证成功即进 行Network阶段协商(NCP),在IP接入中主要是IPCP协商(如IP地址和DNS地址的协商等)。任何阶段的协商失败都将导致链路的拆除。

4.协商成功,则 链路建立成功,可以开始传输网络层数据报文。

PPP认证方式

口令验证协商(PAP)

PAP是一种简单的明文验证方法。NAS(网络接入服务器)要求用户提供用户名和口令,PAP一明文方式返回用户信息。

挑战-握手验证协议(CHAP)

CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真是密码。NAS向远程用户发送一个挑战口令(challenge),其中包含会话ID和一个任意生成的挑战字符串(arbitrary challenge string)。远程用户必须使用MD5单向哈希算法返回用户名和加密的挑战口令,会话ID以及用户口令,称为Secret PASSword,其中用户名以非哈希方式发送。

ppp协议栈

主要负责PPP层数据的封装、压缩与解压缩.另外,它还对普通数据包和Ppp过程的数据包进行了分流,将普通数据包提交到TCP/IP协议栈,而将Ppp过程的数据包放到/dev/ppp设备队列中,等待Pppd去收取并处理。

pppd数据传输

应用程序通过socket 接口发送TCP/IP数据包,这些TCP/IP数据包流经PPP协议处理模块,然后通过串口发送出去。

pppd在make_ppp_unit函数调用ioctrl(PPPIOCNEWUNIT)创建一个网络接口(如ppp0),内核中的PPP协议模块在处理PPPIOCNEWUNIT时,调用register_netdev向内核注册ppp的网络接口,该网络接口的传输函数指向ppp_start_xmit。当应用程序发送数据时,内核根据IP地址和路由表,找到ppp网络接口,然后调用ppp_start_xmit函数,此时控制就转移到PPP协议处理模块了。ppp_start_xmit调用函数ppp_xmit_process去发送队列中的所有数据包,ppp_xmit_process又调用ppp_send_frame去发送单个数据包, ppp_send_frame根据设置,调用压缩等扩展处理之后,又经ppp_push调用pch->chan->ops->start_xmit发送数据包。pch->chan->ops->start_xmit是什么?它就是具体的传输方式了,比如说对于串口发送方式,则是ppp_async.c: ppp_asynctty_open中注册的ppp_async_send函数,ppp_async_send经ppp_async_push函数调用tty->driver->write把数据发送串口。

Pppd 控制协议数据流程

pppd是一个用户空间的后台服务进程(daemon。pppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。pppd只是一个普通的用户进程,pppd与内核中的PPP协议处理模块之间通过设备文件(/dev/ppp)进行通信。pppd有一个辅助工具chat,用来与GSM模组建立会话。它向串口发送AT命令,建立与GSM模组的会话,以便让PPP协议可以在串口上传输数据包。

Linux中的PPP实现

Linux中的PPP架构

PPP协议工作在数据链路层,上有IP协议等网络层,下有以太网,串口等物理层,发送数据时,TCP/IP数据包经过PPP打包之后经过串口发送,接收时,从串口上来的数据经过PPP解包后上报TCP/IP协议层,Linux下PPP框架结构:

安装PPP

方法一:源码安装

下载源码:官网下载比较慢,大家可以去我的git仓库clone,地址:http://tjcshx.club:8808/tree/Linux_src.git解压:

tar -xzvf ppp-2.4.7.tar.gz ppp-2.4.7/

编译安装

./configuremake

方法二: 直接安装

sudo apt-get install ppp

PPP拨号上网流程

硬件准备:测试系统:树莓派,测试硬件:EC20,电话卡:中国联通;软件准备:

因为树莓派上已经支持了4G模块的驱动,插上之后能自动检测出来,需要准备的只有应用层的pppd程序,两种方式,网上下载源码到树莓派上编译安装,另一种 sudo apt-get install ppp都可,在安装好ppp相关驱动后,就可以开始写我们的拨号脚本啦!

拨号脚本脚本文件

编写rasppp脚本文件

sudo vim /etc/ppp/peers/rasppp

编写chat-rasppp-connect脚本文件

sudo vim peers/rasppp-chat-connect

编写chat-rasppp-disconnect脚本文件

sudo vim /etc/ppp/peers/rasppp-chat-disconnect

开始PPP拨号上网

sudo pppd call rasppp

可以使用ctrl+z放到后台运行,但是不能使用ctrl+c终止拨号。

拨号成功后,会返回两个DNS域名,如果拨号失败,要注意不同运营商的拨号方式是不一样的,比如电信需要填写用户名和密码,而。.移动和联通则不需要,拨号号码也不相同联通是 *99# ,电信是 #777。

使用ifconfig查看ppp0网卡是否存在

ifconfig

​​​​​​​添加默认网关

sudo route add gw your_ipaddr

查看网关

route -n

上网测试

在我们自己的系统中可能会有多个网卡,如果我们想指定特定的网卡来上网,可以使用:

ping -I ppp0 // -I xxx 指定特定的网卡来上网

这样我们的ppp拨号上网就配置好了。

各个运营商拨号上网设置:​​​​​​​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。