• 网络基础篇之HDLC、PPP(原理)


    一、广域网传输

      之前讲解的都是关于局域网的数据传输,这次讲解的是广域网的传输。

      广域网简称WAN,是一种跨越超大的、地域性的计算机网络集合。通常跨省、市、甚至一个国家。广域网包括很多子网,子网可以是局域网;也可以是小型的广域网。

       由于串行通信有着传输距离远、成本低的特点,所以远距离、超远距离的通信中较常使用串行通信。

    二、传输协议及方式

      在广域网的传输中,有几种协议,本文章说明一下HDLC、PPP

    三、HDLC

      1. 什么是HDLC

      HDLC是高级数据链路控制协议,是一种数据链路层的协议。HDLC是一个ISO标准的面向位的数据链路协议,其在同步串行数据链路上封装数据,最常用于点对点链接。HDLC主要有以下几个特性:

      协议不依赖于任何一种字符编码集。

      数据报文可透明传输,用于透明传输的“0比特插入法”易于硬件实现。

      全双工通信,不必等待确认可连续发送数据报文,有较高的数据链路传输效率。

      所有帧采用CRC校验,并对信息帧进行编号,可防止漏收或重收,传输可靠性高。

      传输控制功能与处理功能分离,具有较大的灵活性和较完善的控制功能。

      HDLC的主要缺点在于,没有指定字段来标识已封装的第三层协议。因此,已经基于HDLC定义了其他几种协议。

      2. HDLC支持两种类型的传输模式:同步传输模式和异步传输模式。

      异步传输模式:是以字节为单位来传输数据,并且需要采用额外的起始位和停止位来标记每个字节的开始和结束。因此,每个字节的发送都需要额外的开销。可以面向点对点或点对多点的传输。

      同步传输模式:是以帧为单位来传输数据,在通信时需要使用时钟来同步本端和对端设备的通信。只能用于面向点对点的传输。DCE(数据通信设备),提供了一个用于同步DCE设备和DTE设备之间数据传输的时钟信号,通常情况下使用DCE产生的时钟信号。

      3. HDLC帧结构

      一个完整的HDLC帧最多由六个字段组成:标志字段(Flag)、地址字段(Address)、控制字段(Control)、信息字段(Information)、帧校验序列字段(FCS)构成。

      标志字段这是一个8位序列,标记帧的开始和结束。 标志的位模式是01111110。也可以作为帧与帧之间的填充字符。

      ② 地址字段包含接收者的地址。 如果该帧是由主站发送的,则它包含从站的地址。 如果它是从站发送的,则包含主站的地址。 地址字段可以从1个字节到几个字节。

      ③ 控制字段用于构成各种命令及响应,以便对链路进行监控。长度1或2字节。

      ④ 信息字段承载来自网络层的数据。它的长度有FCS字段或通讯节点的缓存容量来决定。使用较多的上限是1000-2000比特;下限是0(S帧)。

      ⑤ 帧校验字段这是一个2字节或4字节的帧检查序列,用于对两个标志字段之间的内容进行错误检测。使用的是标准代码CRC(循环冗余代码)。

      4. 根据不同的控制字段分为不同类型的帧

      ① I帧I帧或信息帧承载来自网络层的用户数据。 它们还包括附带在用户数据上的流和错误控制信息。 I帧控制字段的第一位为0。

      

      S帧S帧或监控帧不包含信息字段。当不需要负载时,它们用于流和错误控制。S帧的前两位控制域为1 0。

      

      ③ U帧 -U帧或未编号的帧用于多种其他功能,例如链接管理(链路的建立与拆除)。 如果需要,它可能包含一个信息字段。 U帧控制字段的前两位为1 1。

      

       5. HDLC接口地址租用

      接口没有IP地址,就无法生产路由,也就无法转发数据报文。IP地址借用允许一个没有IP地址的接口从其他的接口上借用IP地址,这样可以避免一个接口独占IP地址,从而造成IP地址的浪费。一般是借用loopback接口的IP地址。因为这类接口总是处于活跃(active)状态,因而能提供稳定可用的IP地址。

    四、PPP

      1. 什么是PPP

      PPP协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。

      2. PPP协议的优点

      ①PPP协议既支持同步传输也支持异步传输。而X.25、FR等链路层协议仅支持同步传输;SLIP仅支持异步传输。

      ②PPP协议具有很好的扩展性,在以太网中时,可以扩展为PPPoE。

      ③PPP协议提供了LCP(链路控制协议)用于链路层参数的协商;提供了NCP(网络控制协议)用于网络层参数的协商。

      ④PPP协议提供了CHAP(质询握手认证协议)、PAP(密码身份验证协议),更好的保证了网络的安全性。

      ⑤无重传机制,网络开销小,速度快。

      3. PPP连接的建立过程

      ① Dead阶段:此阶段表示物理层不可用。当通信双方检测到物理线路激活时,会从Dead阶段变为Establish阶段(链路建立阶段)。

      ② Estblish阶段:此阶段进行LCP参数协商。内容包括最大接收单元MRU、认证方式等选项。当协商成功后,会进入Opened状态,表示底层链路已经建立;反之,则返回到Dead阶段。

      ③ Authenticate阶段:此阶段可有可无(多数情况下是有的)。如果需要认证,则在底层链路建立过程中必须进行认证。认证通过或无认证,则进入Network阶段;反之,则进入终止阶段,再返回到Dead阶段。

      ④ Network阶段:此阶段进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络参数的协商。只有相应的网络参数协商成功后,才会建立网络层通信。反之,则会进入终止阶段,在进入Dead阶段。

      ⑤ 当NCP协商成功后,PPP链路将保持通信状态。

      ⑥ Terminate阶段:此阶段所有资源都被释放,通信双方将回到Dead阶段。

      4. PPP帧格式

      

       PPP帧格式与HDLC协议的帧格式相类似。

      ①Flag域标识一个物理帧的起始与结束,该字节为二进制序列01111110(0X7E)。

      ②PPP帧的地址域根HDLC的地址域有差异。PPP帧的地址域为固定的11111111(0XFF)。是一个广播地址。

      ③PPP帧的默认控制域为00000011(0X03),表示无序号帧。

      ④FCS是个16位的校验和,用于检测PPP帧的完整性。

      ⑤协议字段用于表示PPP帧封装的协议报文类型:0XC021代表LCP报文;0XC023表PAP报文;0XC223代表CHAP报文。

      ⑥信息字段包含协议中指定协议的数据包。数据字段的默认最大长度(不包含协议字段)称为最大接收单元MRU(MRU缺省值为1500字节)。

      ⑦Code字段。主要用于标识LCP数据报文的类型。

      ⑧Identifier域为1字节,用于匹配和响应请求

      ⑨Length字段表示该LCP报文的总长度。

      ⑩数据字段承载各种TLV(Type/Length/Value)参数用于协商配置选项。(包括最大接收单元,认证协议等等)

      5. LCP

      LCP(链路控制协议):LCP可以自动检测链路环境(如是否存在环路);协商链路参数(如数据包最大长度);提供认证功能(只有认证成功后才会建立连接)。

      5.1. LCP报文类型共有四种:

      ① Configure-Request(配置请求):链路层协商过程过程中发送的第一个报文,该报文表示点对点双方开始进行链路层参数的协商。

      ② Configure-Ack(配置响应):收到对端发来的Configure-Request报文,如果参数取值完全接受,则以此报文进行响应。

      ③ Configure-Nak(配置不响应):收到对端发来的Configure-Request报文,如果参数取值不被接受,则以此报文进行响应并携带本端可接受的配置参数。

      ④ Configure-Reject(配置拒绝):收到对端发来的Configure-Request报文,如果参数取值不被完全接受,则以此报文进行响应并携带本端不能接受的配置参数。

      5.2. LCP协商常见参数:

      最大接收单元MRU:表示PPP数据帧中Information字段和Padding字段的总长度。在VRP平台上。MRU参数使用接口上配置的最大传输单元(MTU)来表示。MRU参数缺省值为1500字节。

      ② 认证协议:认证对端使用的认证协议。常用的PPP认证协议有PAP与CHAP,一条PPP链路可以使用不同的认证协议,但是被认证方必须支持认证方的认证协议并配置正确的用户名和密码等信息。

      ③ 魔术字:用以检测链路和其他异常情况。在Config-Request的配置选项参数中进行发送时会随机产生一个数字并一块发出,当设备收到一个Config-Request报文时,会与上次发送发送的Config-Request报文中的魔术字进行对比。(不相同的设备产生的魔术字可能相同,只不过概率非常低而已,但不是不可能)。若不相同,则表示没有环路;若相同,则设备会发送Config-Nak报文并重新生成新的魔术字进行发送。再次收到Config-Nak报文时,依旧进行魔术字的对比。若不相同则表示没有环路;若相同则会重新发送Config-Request报文,若一直相同会随着对比次数,存在环路的可能性越来越大,等到了一定的级别,则认为网络中存在环路。

      5.3. LCP认证过程

      ① PAP认证过程:

      a. 被认证方将配置的用户名和密码信息使用Authenticate-Request报文以明文方式发送给认证方。

      b.认证方收到被认证方发送的用户名和密码之后,根据本地配置的用户名和密码数据库进行匹配,若匹配,则返回Authenticate-Ack报文表示认证成功。否则返回Authenticate-Nak报文,表示失败。

      ② CHAP认证过程:

      a. 认证方发送一个Challenge报文给被认证方,报文中包含Identifier信息与一个随机产生的Challenge字符串,此Identifier极为后续报文使用的Identifier。

      b. 被认证方收到此Challenge报文后,进行一次加密运算,运算公式为MD5(Identifier + 密码 + Challenge)。从而得到一个16字节长的摘要信息,然后将此信息和在端口上配置的CHAP用户名一起封装在Response报文中回应认证方。

      c. 认证方收到被认证方发送的Response报文后,按照其中封装的用户名查找对应的密码,得到密码后,按照上面的计算公式也进行一次计算,计算结果与Response报文中的进行对比,相同则认证成功,不相同则认证失败。

      在CHAP认证方式中,由于密码是加密之后传输,所有极大的提高了安全性。

      6. NCP(IPCP)

      NCP(网络控制协议):每一个NCP对应了一种网络协议,用于网络地址等参数的协商。下面说下NCP中的IPCP(IP Control Protocol)协议。

      IPCP使用与LCP相同的协商机制、报文类型,但不是调用LCP,只是工作方式、报文类型等和LCP相同,协商方式有两种,具体协商过程:

      6.1. IPCP静态地址协商

      ① 每一端都要发送包含本端的IP地址的Configure-Request报文给对端。

      ② 每一端都会收到包含对端的IP地址的Configure-Request报文,检查其中的IP地址,若IP地址是一个合法的单播IP且和本端的IP地址不冲突,则认为对端可以使用该IP地址,并且回应一个Configure-Ack报文。

      6.2. IPCP动态地址协商

      ① 协商端(没有IP地址)向被协商端发送一个Configure-RequestA报文,由于协商端没有IP地址,因此此报文中包含的IP地址为0.0.0.0。表示向被协商端请求IP地址。

      ② 被协商端收到Configure-Request报文之后,认为其中的IP地址不合法,使用Configure-Nak回应一个新的IP地址(需提前建立IP Pool,并且与端口进行关联)。

      ③ 协商端收到Configure-Nak报文后,更新本端的IP地址,之后重新发送一个Configure-Request报文,此报文包含新的IP地址。

      ④ 被协商端收到新的Configure-Request报文后,认为其中的IP是合法的地址,回应一个Configure-Ack报文。并且也会将包含本端IP地址的Configure-Request报文发送给协商端。

      ⑤ 协商端收到被协商端发送的Configure-Request报文后,认为其中的IP地址合法,会回应一个Configure-Ack报文。至此,IPCP的协商完成。

    五、扩展---PPPoE

      1. DSL(Digital Subscriber Line)应用

      为解决在网络服务提供商与最终用户之间的“最后一公里”的传输瓶颈问题,使用铜缆电话线路接入因特网。在使用DSL接入网络时,用户需安装调制解调器(也就是大家熟知的“猫”),然后通过现有的电话线与DSLAM(数字用户线路接入复用器)相连。DSLAM是各种DSL系统的局端设备,属于“最后一公里”接入设备。

      之后,DSLAM通过异步传输(ATM)网络或者Ethernet(以太网)网络将用户的数据转发给BRAS(宽带远程接入服务器)。BRAS是面向带宽网络应用的接入网关,位于骨干网的边缘层。

      2. PPPoE在DSL中的应用

      由于PPP协议可以提供良好的访问控制和计费功能,于是有PPP协议扩展而成的PPPoE协议。此协议可以在以太网络中进行传输PPP报文。此协议具有适用范围广、安全性高、计费方便等特点,深受宽带接入运营商的认可且被广泛应用。

      3. PPPoE的报文格式

      

      PPPoE报文是适用Ethernet格式进行封装的。

      ① DMAC: 表示目的设备的MAC地址,通常为以太网络单播目的地址或者以太网络广播地址(0xFFFFFFFF)。

      ② SMAC:表示源设备的MAC地址。

      ③ Type:表示协议类型字段。0x8863表示PPPoE发现阶段的报文;0x8864表示PPPoE会话阶段的报文。

      ④ FCS:进行报文完整性校验。

      PPPoE字段表示:

      ① Ver:表示PPPoE的版本号,值为0x01。

      ② Type:表示类型,值为0x01。

      ③ Code:表示PPPoE报文类型,不同的取值对应不同的PPPoE报文类型(下面会细说明)。

      ④ Session ID:与以太网SMAC和DMAC一起定义了一个PPPoE会话。

      ⑤ Length:表示PPPoE报文的Payload长度,不包括以太网头部和PPPoE头部的长度。

      

      4. PPPoE协议报文类型

      ① PADI(PPPoE Active Discovery Initiation)用户主机发起的PPPoE服务器探测报文。源MAC为客户端MAC地址;目的MAC为广播地址;Code字段为0x09;Session ID字段为0x0000。

      ② PADO(PPPoE Active Discovery Offer)PPPoE服务器收到PADI报文后的回应报文。源MAC为PPPoE服务器MAC地址;目的MAC为客户端MAC地址;Code字段为0x07;Session ID字段为0x0000。

      ③ PPPoE服务器回应的PADO报文后,单播发起请求报文。源MAC为客户端MAC地址;目的MAC为选定的PPPoE服务器MAC地址;Code字段为0x19;Session ID字段为0x0000。

      ④ 分配一个唯一会话进程ID,通过此报文发送给客户端。源MAC为发出报文的PPPoE服务器MAC地址;目的MAC为客户端MAC地址;Code字段为0x09;Session ID字段为PPPoE服务器为会话而产生的Session ID。

      ⑤ PADT(PPPoE Active Discovery Terminate)

      5. 建立回话过程

      会话过程分为三个阶段

      5.1 发现阶段(PPPoE协商阶段):获取对方以太网地址;确定唯一的PPPoE会话。

      ① 客户端在以太网中广播一个PADI报文,此报文包含了客户端所需要的服务信息。所有PPPoE服务器收到PADI报文后,会将报文中包含的请求与自己提供的服务进行对比。

      ② 所有PPPoE服务器收到PADI报文后,会将报文中包含的请求与自己提供的服务进行对比。若PPPoE服务器可以满足客户端的服务请求,就会回复一个PADO报文,所以一个客户端可能会收到多个PPPoE服务器发出的PADO报文。

      ③ 客户端收到PADO报文后,会从中选择最先收到的PADO报文所对应的PPPoE服务器为指定PPPoE服务器,并且发送一个PADR报文给指定PPPoE服务器。

      ④ PPPoE服务器收到PADR服务器后,会生成一个唯一的Session ID来标识与客户端的会话,并通过PADS报文将Session ID发送给客户端。

      ⑤ 当客户端收到PPPoE服务器发出的PADS报文后,会话建立成功,进入会话阶段。

      5.2 会话阶段:包括两部分 PPP协商阶段 与 PPP报文传输阶段 。

      ① PPP协商阶段:此阶段与普通PPP协商方式一致,分为LCP、认证、NCP三个阶段。

      ② PPP报文传输阶段:协商成功后,就可以承载PPP数据报文,在这一阶段传输的数据包中的Session ID必须与发现阶段PPPoE服务器生成并且发送给客户端的Session ID保持一致。

      5.3 会话终结阶段:会话建立之后的任意时刻,发送报文结束PPPoE会话。

       当PPPoE服务器端或客户端希望关闭连接时,便会发送PADT报文(那一端希望关闭就由那一端发送),Session ID为希望关闭的连接的Session ID,另外一端一旦收到此报文,连接随即关闭。

  • 相关阅读:
    async await promise 执行时序
    理解prototype
    X-Requested-With
    event事件传播规则
    【小文】Flask web Hello程序!
    【小文】php-gtk: Hello!
    【小文】HTTP 状态码
    【小文】Python环境安装配置
    C语言:趣味小问题 鸡兔同笼
    C语言:趣味小问题 百钱买百鸡
  • 原文地址:https://www.cnblogs.com/641055499-mozai/p/11689005.html
Copyright © 2020-2023  润新知