目录

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框架结构:

  • 安装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拨号上网流程

  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 ctnet@mycdma.cn vnet.mobi
1X网络 #777 card(CARD) card(CARD)
中国移动 TD-SCDMA(China Mobile) CMNET *98*1#
中国移动 CPRS(China Mobile) CMNET *99***1#

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

  1. Linux系统下通过PPP拨号上网

    Linux/Android系统通过PPP拨号上网 嵌入式系统经常需要具备无线上网的功能,但在有的应用场景中无法使用wifi,这时可以通过GPRS模块上网.GPRS模块是基于AT命令进行控制的.对于单片 ...

  2. Linux系统下使用pppd拨号上网

    1.首先拷贝pppd和chat到/usr/sbin目录; 2.然后编写三个脚本,option脚本要注意的是串口设备名称,不要复制网上的脚本,一定要看芯片手册写的modem口的名称,connect脚本要 ...

  3. 树莓派搭载EC200U 4G模块(USB网卡上网和PPP拨号上网)

    文章目录 一.EC200U模块4G模块介绍 二.USB转串口驱动设置 (1)打开树莓派的串口 (2)lsusb是否有EC200U模块 (3)添加 VID 和 PID 信息 三.USB网卡驱动上网 四. ...

  4. 移植移远4G模块EC20过程记录2-QMI+PPP拨号上网

    目录 1.背景 2.移植QMI_WWAN驱动 2.1 准备源码 2.2 修改源码 2.3 make 2.4 安装 2.5 编译cdc_wdm 2.6 再次安装 2.7 验证QMI驱动 3.ppp拨号 ...

  5. 树莓派中SIM7600G-H 4G DONGLE模块使用记录(一)PPP拨号上网/4G上网

    项目场景: 如何使用SIM7600系列的4G通信模块进行PPP网上拨号以实现4G通信,在讲解前,未搭建好树莓派远程连接桌面的读者可以先转向树莓派4B环境搭建+电脑远程连接+打开文件管理闪退(上). 模 ...

  6. 4G模块 EC20 R2.0 USB Serial/GobiNet/QMI WWAN 驱动移植过程

    4G模块 EC20 R2.0 USB Serial/GobiNet/QMI WWAN 驱动移植过程 一.开发环境 二.确定 EC20 R2.0 的基本信息 三.USB Serial 驱动移植 opti ...

  7. 第三节 树莓派EC20之PPP拨号上网

    EC20 ppp拨号上网步骤 1. 准备工作 2.安装软件 3.上网测试 树莓派内核现在已集成了EC20的驱动,不需要再去进行驱动移植,虽然没有MiniPcie的接口,但用usb转minipcie也是 ...

  8. 怎么在Linux内核模块加打印,在ARM-linux上实现4G模块PPP拨号上网

    在ARM平台上实现4G模块的PPP拨号上网,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚是高兴,现将此过程整理如下.当然,除此之 ...

  9. linux怎么使用4g模块的网络,在ARM-linux上实现4G模块PPP拨号上网(示例代码)

    在ARM平台上实现4G模块的PPP拨号上网,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚是高兴,现将此过程整理如下.当然,除此之 ...

最新文章

  1. [计划]二〇〇七年年度计划
  2. 美光扭转下滑趋势:收入增加亏损减少
  3. WhatsApp CEO向FreeBSD捐赠一百万美金
  4. 一组动图看懂3D打印原理
  5. Weblogic负载均衡/Session复制之集群架构续
  6. windows 64位PHP5.5配置xhprof
  7. Debian下的内核编译
  8. 某计算机房空气调节系统设计,空气调节工程思考题习题答案(精品DOC)
  9. Itextpdf5 基础知识
  10. 使用PaddlePaddle轻松实现语音合成
  11. 詹姆斯高斯林_詹姆斯·高斯林接下来要做什么?
  12. php粒子背景特效_12个精致炫酷的背景装饰特效库(分享)
  13. Mysql关于主键自增后的插入语句编写
  14. windows server域的信任关系(一)
  15. GO语言gin框架实战-02-Jwt和登录认证
  16. 中国大学MOOC货币金融学试题及答案
  17. 项管行知05--可交付成果
  18. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法
  19. HiBench算法简介
  20. python-opencv 眼球跟踪(已开源)

热门文章

  1. java P1157 组合的输出
  2. 架构思想--基础架构
  3. 四十五中大冒险 1.0版本 c++小游戏
  4. opencv 大津算法讲解与实现
  5. android在学习——Menu背景图片,背景色的设置
  6. 如何更改手机屏幕上的待机快捷键...
  7. MyEclipse更改项目名称
  8. NRF52832基于SDK15.3 S332协议栈实现adv和rsp广播厂商自定义数据
  9. v-if控制元素的显示与隐藏
  10. matlab sapi.spvoice,matlab说话和唱歌