ppp协议

blog 归档 网络协议 ppp协议

ppp协议详解

1.概述

ppp协议分为几个部分:LCP(链路控制协议)、NCP(网络控制协议)、认证协议(包括PAP协议和CHAP协议)、另外还有CCP(压缩控制协议)。

如下图所示:

ppp是一个分层结构。在底层,它能使用同步媒介(如ISDNH或同步DDN专线),也能使用异步媒介(如基于Modem拨号的PSTN网络)。

在数据链路层,PPP在链路层建立方面提供了丰富的服务,这些服务以LCP协商选项的形式提供。

在上层,PPP通过NCPs提供对多种网络层协议的支持。PPP对于每一种网络层协议都有一种封装格式来区别它们的报文。

2.帧结构

基本的ppp帧如下:

标记用于标记一个ppp帧的开始和结束。

地址域和控制域为固定值(0xff,0x03)

协议的可选值如下:

协议代码对应协议

0XC021LCP协议

0XC023PAP协议

0XC223CHAP协议

0X8021IPCP协议

0X0021IP协议

3.建立连接

PPP协商过程分为几个阶段:Dead阶段,Establish阶段,Authenticate阶段,Network阶段和Termintate阶段,在不同的阶段进行不同协议的协商.只有前面的协商出现结果后,才能转到下一个阶段,进行下一个协议的协商.

当物理层不可用时,PPP链路处于dead阶段,链路必须从这个阶段开始和结束.当物理层可用时,PPP在建立链路之前首先进行LCP协商,协商内容包括工作方式是SP还是MP,验证方式和最大传输单元等.

LCP协商过后就进入Establish阶段,此时LCP状态为Opened,表示链路已经建立.

如果培植了验证(远端验证本地或者本地验证远端)就进入Authenticate阶段,开始CHAP或PAP验证.

如果验证失败进入Terminate阶段,拆除链路,LCP状态转为Down;如果验证成功就进入Network协商阶段(NCP),此时LCP状态仍为Opened,而IPCP状态从Initial转到Request.

NCP协商支持IPCP协商,IPCP协商主要包括双方的IP地址.通过NCP协商来选择和配置一个网络层协议.当选中的网络层协议配置成功后,该网络层协议就可以通过这条链路发送报文了.

PPP链路将一直保持通信,直至有明确的LCP或NCP帧关闭这条链路,或发生了某些外部事件.(例如,用户的干预).

在建立连接时需要用到LCP和NCP协议(IPCP)。

这些协议都会用到编码和ID字段(其实也可以这样分,地址、协议、控制三个字段属于ppp协议,后面的属于LCP或NCP或IP自己的协议)

编码字段的含义如下:

编码值对应含义

1配置请求(Req)

2接受配置(Ack)

3配置请求接受,其他拒绝(Nak)

4配置请求不认识或不被接受(Rej)

5终止链接

6终止确认

传输IP报文时,没有编码和ID字段,在协议字段之后直接就是IP报文。

4.验证

PAP验证,没啥好说的,客户端向服务器发送明文用户名和密码,服务器发回Acknowledge或Not Acknowledge

CHAP验证,比PAP验证安全,不明文发送密码。具体流程是这样:服务器向客户端发送一个随机生成的质询字符串(challenge string)和自己的主机名。

客户端用自己的密码作为秘钥,通过单向加密算法(HASH)对服务器发来的质询字符串进行加密,之后将自己的用户名(明文)和加密后的质询字符串发送到服务器。

服务器通过收到的用户名查询该用户的密码,用这个密码作为秘钥,也对刚刚的质询字符串进行单向加密,如果和用户发来的加密质询字符串一致的话,返回ACK,否则返回NAK。

更明了的图如下:

ppp协议提供服务器,ppp协议 - 作业部落 Cmd Markdown 编辑阅读器相关推荐

  1. 作业部落 Cmd Markdown 编辑阅读器

    Cmd Markdown 编辑阅读器 Cmd Markdown 编辑阅读器 WindowsMacLinux 全平台客户端 什么是 Markdown 书写一个质能守恒公式1 高亮一段代码2 高效绘制 流 ...

  2. 文档服务器搭建markdown,服务器部署 - 作业部落 Cmd Markdown 编辑阅读器

    1.整个项目重新部署: 删除原有程序 将打包好的ROOT.war包copy到服务器的webapps目录下,执行前需要配置好相关的适用服务器配置文件: WEB-INF下的web.xml文件 WEB-IN ...

  3. php文档阅读器,5.PHP - 作业部落 Cmd Markdown 编辑阅读器

    Apache-Ignite-1.9.0-中文开发手册 5.PHP 5.1.PHP PDO 5.1.1.摘要 PHP提供了一个轻量级.一致的接口来访问数据库,叫做PHP数据对象-PDO,这个扩展依赖于若 ...

  4. Mq测试仪c语言版,mq? - 作业部落 Cmd Markdown 编辑阅读器

    mq? 翻阅了一些资料,目前市面上流行的消息队列大概有zeroMQ,robbitMQ, kafka, activeMQ. zeroMQ feature:可以使用任意语言,在任何平台上. 信息可以负载在 ...

  5. php根据阅读记录推荐内容,php记录 - 作业部落 Cmd Markdown 编辑阅读器

    php记录 20151209 联系人管理 获取列表,获取单个列表(查看详情),添加和移除分组 设置显示字段,编辑筛选条件 sbase 项目 protected - handler-account-ch ...

  6. 计算机ps计划,PS学习计划 - 作业部落 Cmd Markdown 编辑阅读器

    PS学习计划作者:汐夜 时间:2016/03/18 一.了解阶段 PS的定义:Adobe Photoshop,简称"PS",是由Adobe Systems开发和发行的图像处理软件. ...

  7. java当线程离开临界区时_第2章 - 作业部落 Cmd Markdown 编辑阅读器

    第2章 translation 同步 线程交互通常是通过共享变量完成的,当线程之间没有交互,开发多线程的应用程序会变得简单许多.一旦交互发生了,很多诱发线程不安全(在多线程环境下不正确)的因素就会暴露 ...

  8. poi word转html 根号,根号算法 - 作业部落 Cmd Markdown 编辑阅读器

    根号算法 --如何让复杂度去掉维 数据结构 算法 By 分块 一般分块 板子&原理 SIZ=(int)sqrt(n);//块大小 for(inti=(x-1)*SIZ+1;i<=x*SI ...

  9. c语言编程实现二维数组的蛇形矩阵,蛇形矩阵 - 作业部落 Cmd Markdown 编辑阅读器...

    蛇形矩阵 C-study-code Erin最近学习了数组,她想通过数组实现一个蛇形方阵的打印,你可以帮她实现这个程序吗? input:整数n(2 output:n*n的方阵,从方阵右上角开始以顺时针 ...

最新文章

  1. CUDA系列学习(一)An Introduction to GPU and CUDA
  2. MySQL中,21个写SQL的好习惯
  3. java ajax post_2、Ajax与Java通过POST方式交互
  4. android数据存放map_go语言学习笔记(18)-二维数组和map
  5. 【资源分享】CS起源 V34.4044(经典版本)
  6. ByteBuffer 转 InputStream
  7. Python网页抓取
  8. CCF NOI1140 高精度乘法
  9. 锚杆拉拔试验弹性模量计算_锚杆拉拔试验检测标准
  10. 「opennurbs」我直接进行一个Opennurbs的手动编译
  11. java下载不了_教大家电脑java安装不了怎么办
  12. hget和get redis_redis使用手册-hset,hget 和 hmset,hmget
  13. Introductory Combinatorics 5th Solutions Chapter1 summary
  14. 《极限竞速地平线4》Teredo不合格解决
  15. 一个链接泄露这么多隐私,你还敢拼多多助力吗?
  16. UNR2 黎明前的巧克力
  17. ftp服务器中更改文件路径,ftp服务器中更改文件路径
  18. 一篇长文带你深析Linux动态链接的全过程
  19. 一种字符编码猜测工具的实现方法
  20. HTML外边框塌陷什么意思,你不知道的CSS(边框塌陷)?

热门文章

  1. PSE供电PD设备网口接法
  2. STM32 IAP升级--内部FLASH和外部FLASH两种方式实现
  3. JOne Action示例
  4. 用js简单实现单词默写系统
  5. Out of Distribution(OoD)检测相关方法综述
  6. 关于System32和SysWow64
  7. Java树形结构的实现
  8. CSS设置首行空两个格
  9. Redis很牛逼很秀!轻松实现实时订阅推送
  10. Android 内置字体 medium,我在字体家族Android Studio中找不到sans-serif-medium