实现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协议包括以下三个部分:
  1. 数据帧封装方法
  2. 链路控制协议LCP,(Link, Control Protocol):它用于对封装格式选项的自动协商,建立和终止连接。探测链路错误和配置错误。
  3. 针对不同网络层协议的一族网络控制协议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协议处理模块,然后通过串口发送出去。

  1. pppd在make_ppp_unit函数调用ioctrl(PPPIOCNEWUNIT)创建一个网络接口(如ppp0),内核中的PPP协议模块在处理PPPIOCNEWUNIT时,调用register_netdev向内核注册ppp的网络接口,该网络接口的传输函数指向ppp_start_xmit。
  1. 当应用程序发送数据时,内核根据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发送数据包。
  2. 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框架结构:

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

  • 编译安装
./configure

make

 

 

  • 方法二: 直接安装

sudo apt-get install ppp

  • PPP拨号上网流程

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

因为树莓派上已经支持了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 baidu.com -I ppp0 // -I xxx 指定特定的网卡来上网

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

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

运营商(ISP) APN 拨号号码 账号 密码
中国联通WCDMA(China Unicom)) 3GNET *99#
中国电信CDMA2000(China Telecom) #777 [email protected] vnet.mobi
1X网络 #777 card(CARD) card(CARD)
中国移动 TD-SCDMA(China Mobile) CMNET *98*1#
中国移动 CPRS(China Mobile) CMNET *99***1#

猜你喜欢

转载自blog.csdn.net/qq_44045338/article/details/107296260