PPP协议及工作流程

1. ppp协议介绍

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

主要特点:

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

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

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

2. 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.协商成功,则 链路建立成功,可以开始传输网络层数据报文。

3. ppp协议栈

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

4. ppp架构框图

PPP 协议之下是以太网和串口等物理层,之上是IP协议等网络层。这里,对于下层,我们只讨论串口的情况,对于上层,我们只讨论TCP/IP的情况。发送 时,TCP/IP数据包经过PPP打包之后经过串口发送。接收时,从串口上来的数据经PPP解包之后上报给TCP/IP协议层。linux下ppp框架结构如下图:

4.1 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把数据发送串口。

4.2 Pppd 控制协议数据流程

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

参考文献:

https://www.cnblogs.com/newjiang/p/7625499.html

https://blog.csdn.net/eydwyz/article/details/54602459

https://www.cnblogs.com/ljf181275034/articles/3293040.html

android 上网流程 ppp,Android/Linux ppp拨号流程相关推荐

  1. Linux驱动(4)--Linux的启动流程

    Linux的启动流程 1.Linux的启动流程概述 2. 从串口打印日志中分析 3. 以Exynos 4412启动流程为例 1.Linux的启动流程概述 ARM Linux 的启动流程大致为:Uboo ...

  2. linux ppp拨号 USB,linux下ppp拨号上网

    转帖 如何用 Linux 拨号上网 一.Linux 上的 PPP Linux 中已经包括了点对点协议PPP,其主体是 pppd ,如果你已经使用过 Windows95 或 NT 的拨号网络,那么你已经 ...

  3. linux ppp用户管理,linux下ppp拨号上网

    转帖 如何用 Linux 拨号上网 一.Linux 上的 PPP Linux 中已经包括了点对点协议PPP,其主体是 pppd ,如果你已经使用过 Windows95 或 NT 的拨号网络,那么你已经 ...

  4. arm linux ppp拨号gprs上网移植

    sim900芯片-GPRS模块ppp拨号上网 2016-08-04 19:33 本站整理 浏览(369) --------------------------------------- 主机操作系统: ...

  5. android pppoe 源码,android移植pppoe拨号上网的全过程

    硬件环境:Tiny6410开发板 软件环境:fedora14 + Android 2.3.4 + linux-2.6.36 1.编译内核支持ppp android自带pppd,所以仅仅须要移植pppo ...

  6. linux ppp漏洞,Linux下ppp拨号的实现(Arm)

    Linux发行版自带PPP拨号需要的pppd和chat命令,以2.6.18内核的Linux虚拟机为例,在/usr/sbin目录下,/etc/ppp目录也已自动创建.参考模权创建拨号脚本ppp-on,p ...

  7. Android系统启动流程 -- bootloader、linux kernel、android

    转载:http://blog.csdn.NET/arnoldlu/article/details/8264721 目录: 第一部分:Bootloader启动 一.Bootloader的定义和种类 二. ...

  8. linux ppp 串口 gprs,linux下GPRS ppp拨号默认路由问题(存在eth0)

    问题描述:(linux版本是Linux 2.6.33-rc4,) 第一种情况: eth0:192.168.1.2 eth0 gw:192.168.1.1 ppp0:10.0.0.1 eth0的IP地址 ...

  9. linux ppp拨号 USB,Linux中实现ppp拨号连接

    以SIM7600 3G/4G模块.联通sim卡为例实现ppp拨号连接,具体过程如下: 1)安装pppd拨号软件,下载源码ppp-2.4.5.tar.gz,编译并安装(如是嵌入式环境,需交叉编译),编译 ...

最新文章

  1. devc代码补全没效果_从零开始写文本编辑器(二十八):自动补全(上)
  2. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
  3. CentOS7卸载并安装mysql教程
  4. html编写edm时要注意的事
  5. Redis 过期策略与源码分析
  6. 数据结构(十四)归并排序
  7. 如果全世界人口压缩到100人
  8. python状态码及其含义_Shell退出状态码及其应用详解
  9. python之常用标准库
  10. 腾讯测试发型的那个软件,全栈发型设计软件
  11. 雷电模拟器无法桥接网络解决办法
  12. 第五周助教工作总结——NWNU李泓毅
  13. iOS苹方字体使用说明
  14. RTKLIB学习总结(五)后处理函数调用流程、postpos、execses_b、execses_r、execses、procpos、rtkpos
  15. OpenCV学习笔记--下载和安装
  16. 离线地图for SQLite
  17. AI美颜SDK功能算法代码解析
  18. Java知识之Git
  19. 关于信息化管理的建议
  20. 建方公寓挂牌房源信息爬取

热门文章

  1. [2021.8.18]深入理解PackageManagerService
  2. Electron应用-云桌面客户端
  3. 导入的java文件不显示文字_java 引入自定义字体font后出现的硬盘吃光的问题
  4. CentOS7设置GRUB系统内核开机选单
  5. 微信软文怎么写比较好?
  6. 萤石云枪机球机云台接入控制实战-含源码-layui
  7. 华为服务器安装系统流程图,华为a安装手册.docx
  8. 有道linux安装路径,Ubuntu 16.04下安装有道词典出错的解决方法
  9. 【随缘侃史】蹈舞求生许敬宗
  10. 东芝计算机配置,东芝z830配置 东芝Z830-K02S参数【图文】