目录

  • 前言
  • 一、ppp/pppd/chat关系及数据收发
    • 1、协议相关介绍
      • 1.1 什么是PPP
        • PPP认证
      • 1.2 什么是PPPD
      • 1.3 什么是chat
      • 1.4 他们之间的联系
        • 应用关系
        • 数据收发流程
          • 发送数据流程
          • 接收数据流程
  • 二、拨号上网流程
    • 2.1 硬件准备
    • 2.2 软件准备
    • 3.3拨号脚本
    • 开始拨号

前言

在学习4G拨号前,我们要先把ppp/pppd/chat关系及数据收发给捋清楚了。为了加深映像,特此写下这篇博客


提示:以下是本篇文章正文内容,下面案例可供参考

一、ppp/pppd/chat关系及数据收发

1、协议相关介绍

1.1 什么是PPP

PPP(Point- to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层 协议。这种链路提供全双工操作,并按照顺序传递数据包。设计目的主要是用来通 过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。

  1. 链路控制协议 LCP(Link Control Protocol);
  2. 网络控制协议 NCP(NetworkControlProtocol);
  3. 认证协议:口令验证协议PAP(PasswordAuthenticationProtocol)和挑战握手验证协议CHAP(Challenge-HandshakeAuthentication Protocol)。

PPP认证

  1. LCP协商,协商内容包 括除1661中所定义的选项之外,还要考虑OA和OE中规定的内容。
  2. LCP协商过后就到了Establish阶段,开始PAP或CHAP认证。PAP为两次握手认证,口令为明文。PAP认证过程如下:发送用户名同口令到认证方,认证方查看是否有此用户,口令是否正确,然后发送相应的响应。CHAP为三次握手认证,口令为密文(密钥)CHAP认证由认证方发送一些随机产生的报文,交给被认证,被认证方用自己的口令字用MD5算法进行加密,传回密文,认证方用自己保存的口令字及随机报文用MD5算法加密,比较二者的密文,根据比较结果返回响应的响应。
  3. 认证成功即进行Network阶段协商(NCP),在IP接入中主要是IPCP协商(如IP地址和地址的协商等)。任何阶段的协商失败都将导致链路的拆除。
  4. 协商成功,则链路建立成功,可以开始传输网络层数据报文。

1.2 什么是PPPD

pppd是一个后台服务进程(daemon),是一个用户空间的进程,所以把策略性的内容从内核的PPP协议处理模块移到pppd中是很自然的事了。pppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。

在pppd里,每种协议实现 都在独立的C文件中,它们通常要实现protent接口,该接口主要用于处理数据包,和fsm_callbacks接口,该接口主要用于状态机的状态切 换。数据包的接收是由main.c: get_input统一处理的,然后根据协议类型分发到具体的协议实现上。而数据包的发送则是协议实现者根据需要调用output函数完成的

1.3 什么是chat

chat 程序是一个自动聊天程序,程序非常简单,chat根据配置的信息主动向stderr 输出信息,同时,从stdin获得期望输入。chat程序输入端口为stdin,输入端口为stderr。所以,如果使用本程序进行拨号上网时,必需将stdin与stderr映射到对应的串口。

1.4 他们之间的联系

应用关系

PPP协议(PPPD协助) PPP
pppd是一个普通的用户进程,pppd 与内核中的PPP协议处理模块之间采用最传统的内核空间与用户空间之间通信方式:设备文件;设备文件名是/dev /ppp。通过read系统调用,pppd可以读取PPP协议处理模块的数据包,当然,PPP协议处理模块只会把应该由pppd处理的数据包发给 pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrl系统调用,pppd可以设置PPP协议的参 数,可以建立/关闭连接。

chat是pppd所带一个辅助工具。 chat用来与GSM模组建立会话。它的实现比较简单,它向串口发送AT命令,建立与GSM模组的会话,以便让PPP协议可以在串口上传输数据包。

数据收发流程

应用程序通过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|                                                           ||                                                           |socket                                                    /dev/ppp|                                                           ||                                                           |PPP协议模块||tty||GSM模组

pppd的控制协议数据发送过程:
pppd --Pap/chap/eap(etc)–> /dev/ppp --> PPP协议模块 --> tty --> GSM模组

接收数据流程

ppp_async.c在初始化时(ppp_async_init),调用tty_register_ldisc向tty注册了行规程处理接口,也就是一组回调函数,当串口tty收到数据时,它就会回调ppp_ldisc的ppp_asynctty_receive函数接收数据。ppp_asynctty_receive调用ppp_async_input把 数据buffer转换成sk_buff,并放入接收队列ap->rqueue中。

ppp_async另外有一个tasklet(ppp_async_process)专门处理接收队列ap->rqueue中的数据包,ppp_async_process一直挂在接收队列ap->rqueue上,一旦被唤醒,它就调用ppp_input函数让PPP协议处理模块处理该数据包。

在ppp_input函数中,数据被分成两路,一路是控制协议数据包,放入pch->file.rqb队列,交给pppd处 理。另外一路是用户数据包,经ppp_do_recv/ppp_receive_frame进行PPP处理之后,再由netif_rx提交给上层协议处理,最后经socket传递到应用程序。

 应用程序                                          pppd|                                               ||                                               |socket                                           /dev/ppp|                                         ||                                         |PPP协议模块||tty||GSM模组

二、拨号上网流程

2.1 硬件准备

树莓派3B
EC20 4G模块
嵌入式开发板
模块天线
联通电话卡
(由于东西还没准备好,后期更新放上来)

2.2 软件准备

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

3.3拨号脚本

脚本的编写可简单可复杂,为了清晰明了,下面就介绍简单版本的。(没有通过传参配置会导致我们每次想修改配置的时候都要改脚本)
脚本出处:https://blog.csdn.net/weixin_45121946/article/details/107284629?spm=1001.2014.3001.5501

初始化脚本
rasppp

# /etc/ppp/peers/rasppp# Usage: sudo pppd call rasppp# 连接调试时隐藏密码
hide-password# 该手机不需要身份验证4
noauth# 用于呼叫控制脚本
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-connect'# 断开连接脚本
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/rasppp-chat-disconnect'# 调试信息
debug# 4G模块
/dev/ttyUSB2# 串口波特率
115200# 使用默认路由
defaultroute# 不指定默认IP
noipdefault# 不使用PPP压缩
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local# 最好锁定串行总线
lock
dump# 保持pppd连接到终端
nodetach# 用户名 密码
# user
# password
#移动,联通拨号不需要用户名密码,文末给出不同运营商的配置# 硬件控制流
crtscts
remotename 3gppp
ipparam 3gppp# 请求最多两个DNS服务器地址
usepeerdns

rasppp-chat-connect

# 连续15秒,收到以下字符,则退出执行
TIMEOUT 15
ABORT   "BUSY"
ABORT   "ERROR"
ABORT   "NO ANSWER"
ABORT   "NO CARRTER"
ABORT   "NO DIALTONE"# 40秒内没有收到指定字符,则退出
# 例如 OK \rATZ,发送ATZ,希望收到的是OK
""AT
OK \rATZ# 建立连接,联通为3gnet,文末给出各运营商配置
OK \rAT+CGDCONT=1,"IP","3gnet"# 拨号,*99#是联通的拨号号码
OK-AT-OK ATDT*99#
CONNECT \d\c

rasppp-chat-disconnect

ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k"
""+++ATH"
SAY "\nGood bye !\n"

开始拨号

(这里所用的PPP拨号脚本与上面的不同)

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

现在,使用ifconfig查看网卡。可以看到多了一个网卡ppp10,这其实是pppd模拟出来的一个虚拟网卡,其数据最终仍然是发送到usb3上进行处理。现在就可以使用该网卡上网了。


参考资料:
https://blog.csdn.net/eydwyz/article/details/54602459
https://blog.csdn.net/weixin_45121946/article/details/107284629?spm=1001.2014.3001.5501

实现 EC20 4G模块PPP拨号上网相关推荐

  1. linux 串口4g ppp,在ARM-linux上实现4G模块PPP拨号上网

    原标题:在ARM-linux上实现4G模块PPP拨号上网 在ARM平台上实现 的 ,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚 ...

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

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

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

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

  4. 在ARM-linux上实现4G模块PPP拨号上网

    搞了3.4天4G模块,从毫无头绪到可以ping通外网,着实不轻松.用的是一不知名品牌EC20, 技术支持很少,资料很乱,然后自己搜集资料,一步一步调试,才搞通. 环境: ubuntu12.04.02 ...

  5. sim900芯片—GPRS模块ppp拨号上网

    --------------------------------------- 主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4  开发板平台: FL2440 ...

  6. 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)

    目录 一.EC20 4G模块简介 二.根据移远官方文档修改EC20 4G模组驱动   1.因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/u ...

  7. Centos 7.6 下使用美格SLM750(4G模块)拨号上网

    文章目录 概述 准备 编译内核源码 添加串口的ID 删除NDIS和ADB端口 开始编译 编译NDIS驱动 编译Gobinet拨号工具 服务化拨号工具 概述 ​ 想要实现4G上网有两种方式,要么加多一个 ...

  8. 树莓派 4G模块 PPP 拨号 NDIS 拨号

    资料参考:树莓派使用4G模块(华为ME909s-821)亲身尝试的可行方法(上) 转载于:https://www.cnblogs.com/suozhang/p/8488008.html

  9. linux下GPRS模块ppp拨号上网

     交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900 ...

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

    目录 PPP协议 PPP通信建立 PPP认证方式 ppp协议栈 pppd数据传输 Pppd 控制协议数据流程 Linux中的PPP实现 安装PPP 方法一:源码安装 方法二: 直接安装 PPP拨号上网 ...

最新文章

  1. 5地图组件 uni_uni-app学习笔记(一)-- uni-app简介
  2. MySQL REGEXP:正则表达式查询
  3. OpenStack Liberty 连接vCenter
  4. ora-12528 : message 12528 not found; product=RDBMS ; facility=ora
  5. js小案例:定时轮播图
  6. codevs 1043 方格取数 2000年NOIP全国联赛提高组
  7. shp与json互转(转载)
  8. C语言数字3转变字符 3 程序,大学c语言知识点总结
  9. ClickedOnce部署方法
  10. 43个热门Flex和ActionScript 3.0 APIs,技巧和工具
  11. php .net mvc,总是觉得asp.net MVC 写着很别扭,对比PHP的mvc,asp.net 麻烦很多?
  12. flutter的PDF阅读器
  13. android逆向去广告,教程]安卓逆向去广告教程送给大家(
  14. 影子系统 重启蓝屏 开机蓝屏 安全模式蓝屏 进PE蓝屏 解决方案
  15. gini指数与cart 决策树
  16. Java音频格式转换,支持amr、aud、slk、silk转成mp3
  17. 蛋白质中二硫键特征的质谱分析技术及其应用
  18. IOS 应用安全测试内容
  19. 电机速度曲线规划1:梯形速度曲线设计与实现
  20. TCP扫描增强器实现65000端口,10S完成,快准狠(Go语言编程)

热门文章

  1. Statistic Helper 开发自查帮助文档(五):Sliced Inverse Regression
  2. 投递简历用什么邮箱最好用?
  3. echarts 时间轴处理_echarts 带时间轴可缩放的折线图
  4. UE4(Unreal Engine4)快捷键
  5. 骨灰级玩家体验带你测试体验天使纪元OL折扣端
  6. SQLServer下载安装详细图解
  7. oracle自学OCA,上海学习oracle OCA
  8. uniapp + vue3微信小程序开发(6)地图展示
  9. 2015互联网校招总结—一路走来
  10. 计算机网络——wireshark抓包