全部博文(776)
分类: LINUX
2010-12-28 20:59:33
7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 36 7D 21 7D 24 7D 25 DC 7D 22 7D 26 7D 20 7D 20
7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7D 23 7D 24 C0 23 26 B4 7E
对出现7D后面的字节的第6位要取反
地址 控制 代码 LCP包长度 数据域,格式由代码域决定 PPP结束标志
7E FF 03 C0 21 01 01 00 16 01 04 05 DC 02 06 00 00 00 00 07 02 08 02 03 04 C0 23 26 B4 7E
PPP 协议域 标识符 一组 二组 三组 四组 五组 CRC
标志 这里表示 循环冗余检校
字符 LCP包 或FCS
帧检验序列
LCP包
当遇到字符0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。
当遇到转义字符0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时需连续传送0x7d和0x21两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。
PPP封装中:
PPP标志字符和PPP结束标志是永远不变化的。
协议域是可变的,在RFC1700中。
Value (in hex) Protocol Name0001 Padding Protocol填料协议0003 to 001f reserved (transparency inefficient)保留(透明度效率低的)0021 信息字段为IP数据报(可以直接传输IP包)007d reserved (Control Escape)保留(控制逃逸)00cf reserved (PPP NLPID)保留(PPP NLPID)00ff reserved (compression inefficient)保留(压缩效率低的)8001 to 801f unused(未使用)8021 IPCP807d unused(未使用)80cf unused(未使用)80ff unused(未使用)c021 Link Control Protocol链路控制协议c023 Password Authentication Protocol密码认证协议c025 Link Quality Report链路品质报告c223 Challenge Handshake Authentication Protocol挑战-认证握手协议LCP包中
代码 | 标识符 | 长度 | 数据
一条Configure- Request,必须得到回复后才可以发另外不同标识符的Configure- Request,要不需要重发。不可以并发不同标识符的Configure- Request。必须回复要不操时断开连接
代码: 代码域是一个八位字节,确定LCP包的种类。在RFC1700中。Code Packet Type---- ----------- 1 Configure-Request 2 Configure-Ack 3 Configure-Nak 4 Configure-Reject 5 Terminate-Request 6 Terminate-Ack 7 Code-Reject 8 * Protocol-Reject 9 * Echo-Request 10 * Echo-Reply 11 * Discard-Request 12 * Identification 13 * Time-Remaining 14 + Reset-Request 15 + Reset-Reply* LCP Only+ CCP Only标识符标识符域是一个八位字节,对匹配请求和回复中有帮助。当带有无效标识符域的包被接收时候,该包将不影响自动机制,被静静的丢弃。在请求中随机指定一个标识符的值,然后peer回复该请求的应答中应该用同样值作为标识符。长度 长度域是二个八位字节,指出整个LCP包的长度,包括代码,标识符,长度和数据域。该长度必须不超过链路的MRU。长度域以外的字节被当作填料而忽略处理。当收到带有无效长度域该包将不影响自动机制,被静静的丢弃。数据数据域是零或多个八位字节,由长度域声明。数据域的格式由代码域决定。是对于链路的一些配置选项。因为数据就是一些配置,并且可以包括不止一项配置的设置。所以该数据有其特定的格式,用来进行各种配置的设定。每项配置都由该项配置的类型、长度和数据域组成,有几项配置就有几组类型、长度和数据域。 | 类型 | 长度 | 数据 | 类型 | 长度 | 数据………| 类型 | 长度 | 数据 一组 二组 ……………… n组配置类型: 类型域是一个八位字节指出所要进行什么样的配置,在RFC1700中。Type Configuration Option---- -------------------- 1 Maximum-Receive-Unit 2 Async-Control-Character-Map 3 Authentication-Protocol C023 密码证明协议PAP C223 挑战握手验证协议CHAP 4 Quality-Protocol C025 链路质量报告 5 Magic-Number 6 RESERVED 7 Protocol-Field-Compression 8 Address-and-Control-Field-Compression 9 FCS-Alternatives 1 Null FCS 2 CCITT 16-Bit FCS 4 CCITT 32-bit FCS 10 Self-Describing-Pad 11 Numbered-Mode 12 Multi-Link-Procedure 13 Callback 14 Connect-Time 15 Compound-Frames 16 Nominal-Data-Encapsulation 17 Multilink-MRRU 18 Multilink-Short-Sequence-Number-Header-Format 19 Multilink-Endpoint-Discriminator 20 Proprietary [KEN] 21 DCE-Identifier [SCHNEIDER] 长度该项配置的长度,包括类型域,长度域,数据域。
数据
就是对该项配置选项进行数值上的配置
PAP包
当PPP包中协议域为C023,那么PPP信息字段的就是PAP包;
什么时候可以进入这个验证阶段来发送PAP包?
注:之前的LCP包配置链路时应该有一组配置为 03 04 C0 23
收到的类似PAP包格式有点不一样缺少了前面的地址和控制 FF 03
代码 | 标识符 | 长度 | 数据
代码:
代码域是一个八位字节,确定PAP包的种类。在RFC1700中没有。
1 Authenticate-Request
2 Authenticate-Ack
3 Authenticate-Nak
标识符:
标识符域是一个八位字节,对匹配请求和回复;
长度:
长度域是二个八位字节,指出整个PAP包的长度,包括代码,标识符,长度和数据域。
数据
数据域是零或多个八位字节,数据域的格式由代码域决定。
Authenticate-Request的数据域内容:
Peer-ID-Length 一个字节,表示Peer-ID的长度
Peer-ID 零或多个字节,表示用户ID
Peer-Password-Length 一个字节,表示Peer-Password的长度
Peer-Password 零或多个字节,表示用户Password
Authenticate-Ack和Authenticate-Nak的数据域内容:
Msg-Length 一个字节,表示Message的长度
Message 零或多个字节,表示可显示的ACC-II字符从32到126
CHAP包
当PPP包中协议域为C223,那么PPP信息字段的就是CHAP包;
注:之前的LCP包配置链路时应该有一组配置为 03 05 C2 23 X(X=0,1,2,3,4,5(MD5))红色表示所选哈希算法
代码 | 标识符 | 长度 | 数据
代码:
代码域是一个八位字节,确定CHAP包的种类。在RFC1700中没有。
1 Challenge
2 Response
3 Success
4 Failure
标识符:
标识符域是一个八位字节,对匹配challenge,response和replies;
长度:
长度域二个八位字节,指出整个CHAP包的长度,包括代码,标识符,长度和数据域。
数据
数据域是零或多个八位字节,数据域的格式由代码域决定。
Challenge和Response的数据域内容:
Value-Size 一个字节,表示Value 的长度
Value 零或多个字节,首先传输最高位
Challenge 的Value可变字节流,长度独立于哈希算法,每次发送Challenge必须改变Value
Response 的Value是在字节流上用哈希算法计算得到的,字节流包括标识符,后面是secret,在后面是Challenge的Value。长度依赖于哈希算法,(对于MD5,Rsponse Value是16个字节)
Name 一个或多个字节,表示发送方系统的标识
Success和Failure的数据域内容:
Message 零或多个字节,表示可显示的ACC-II字符从32到126
IPCP包
当PPP包中协议域为8021,那么PPP信息字段的就是IPCP包;
IPCP包不可以在PPP协议达到网络层的协议阶段之前被交换。
代码 | 标识符 | 长度 | 数据
代码:
代码域是一个八位字节,确定IPCP包的种类。在RFC1700中有。
Code在(1-7)之外的其他编码应该被处理为未经承认并且应该导致结果Code-Rejects。Code Packet Type---- ----------- 1 Configure-Request 2 Configure-Ack 3 Configure-Nak 4 Configure-Reject 5 Terminate-Request 6 Terminate-Ack7 Code-Reject
标识符:
标识符域是一个八位字节,匹配请求和回复;
长度:
长度域二个八位字节,指出整个IPCP包的长度,包括代码,标识符,长度和数据域。
数据
数据域是零或多个八位字节,数据域的格式由代码域决定。
数据域内容:为选项配置类似与LCP包
类型:一个字节,表示数据域为什么选项配置; 1 IP-地址(Addresses) 2 IP-压缩协议
3 IP-地址(Address)
当类型为2时,即IP-压缩协议的IPCP包数据域为
| 类型 | 长度 | IP-压缩协议 || 数据...类型 一个字节,这里值2长度:一个字节,为为整个IPCP数据域的长度包括类型,长度,IP-压缩协议,数据IP-压缩协议: 二个字节,给本域的值总是和给那个相同的压缩协议的PPP协议数据链路层协议域值同样的东西。002d Van Jacobson Compressed TCP/IP 可以压缩TCP/IP报头缺省情况下不使用压缩协议数据:数据区是零,或者,由特别压缩协议决定的更多的八位字节的附加数据数据。当类型为3时,即IP-地址的IPCP包数据域为| 类型 | 长度 | IP-地址 |类型 一个字节,这里值3 长度:一个字节,为为整个IPCP数据域的长度包括类型,长度,IP地址,这里值为6 IP-地址4个八位字节IP地址是发件人在Configure-Request中要求的本端地址。如果全部4个八位字节都是零值,它表示请求对端提供IP-地址信息。Van Jacobson TCP/IP报头压缩可以压缩TCP/IP报头 IP包当协议字段0021( 典型IP),002d(压缩TCP),002f(未压缩TCP)可以传输IP包此时信息字段就是IP包。但必须在IPCP之后才能传输,此时发送PPP封装的IP包了。 注意:PPP中的FCS是利用没有转义前的不包括前后FLAG(7F)的PPP包中的其他信息(地址FF,控制03,协议域,信息字段,填充),计算出来后加在结束FLAG前。 LCP Configure-Request7E FF 03 C0 21 01 01 00 16 01 04 05 DC 02 06 00 00 00 00 07 02 08 02 03 04 C0 23 26 B4 7ELCP Configure-Ack7E FF 03 C0 21 02 01 00 16 01 04 05 DC 02 06 00 00 00 00 07 02 08 02 03 04 C0 23 D0 47 7E7E FF 7D 23 C0 21 7D 22 7D 21 7D 20 7D 36 7D 21 7D 24 7D 25 DC 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22 7D 23 7D 24 C0 23 D0 47 7EPAPAuthenticate-Request7E FF 03 C0 23 01 02 00 06 00 00 4D 34 7F
链路死亡阶段 |
链路建立阶段 |
认证阶段 |
在链路死亡阶段通过拨号
ATD*99***1#
进入链路建立阶段
在链路建立阶段,利用LCP
进行链路的一些Configure
完成配置后进入认证阶段
在认证阶段才可以发送PAP或者CHAP
利用PAP进行认证Authenticate
只有通过认证才可以进入网络层协商阶段
网络层协商阶段 |
在网络层协商阶段,利用IPCP包进行
网络层方面的协商,如分配IP地址
只有通过了协商得到了IP地址才可以
进行通信
当然还有其他的IP已外的网络层协议
如IPX,AppleTalk等,这里不考虑
上网阶段 |
载波信号丢失,认证失败,
链路质量失败
链路终止阶段
LCP Terminate 包等可以终止链路
Type Configuration Option---- -------------------- 1 Maximum-Receive-Unit 最大接收单元 1500 BYTES 2 Async-Control-Character-Map 3 Authentication-Protocol C023 密码证明协议PAP C223 挑战握手验证协议CHAP 4 Quality-Protocol C025 链路质量报告 5 Magic-Number 6 RESERVED 7 Protocol-Field-Compression 协议域压缩??? 现在的表现是少了帧中的(FF 03) 8 Address-and-Control-Field-Compression 9 FCS-Alternatives 1 Null FCS 2 CCITT 16-Bit FCS 4 CCITT 32-bit FCS 10 Self-Describing-Pad 11 Numbered-Mode 12 Multi-Link-Procedure 13 Callback 14 Connect-Time 15 Compound-Frames 16 Nominal-Data-Encapsulation 17 Multilink-MRRU 18 Multilink-Short-Sequence-Number-Header-Format 19 Multilink-Endpoint-Discriminator 20 Proprietary [KEN] 21 DCE-Identifier [SCHNEIDER]
上面的配置协商是谁发送Request,那么谁就可以接收而不是发送配置中协商的格式的数据
利用PPP封装IP包协议域应该是0021,信息域就是完整的IP包
地址 控制 IP报头 UDP报头 用户数据 PPP结束标志
7E FF 03 00 21 $$$$$$$$ &&&&****************************************** 26 B4 7E
PPP 协议域 UDP包 CRC
标志 这里表示 循环冗余检校
字符 典型IP包 或FCS
帧检验序列
IP包
UDP包
发送端口号 16位 |
接收端口号 16位 |
UDP包长(报头和数据)单位为octet 16位 |
检查和(不用的时候可以为0) 16位 |
数据部分 |
IP包
IP版本 默认为4 4位 |
IP报头长 4 octet 4位 |
服务类型 IP服务的质量 8位 |
包长度(包括IP报头和IP数据) 单位为octet 16位 | |
标识 在分段处理的时候作为重组的时候用 16位 |
标志 分段控制信息 3位 |
段位移量 表示所分割的段是在原数据的什么位置上,单位为 8 octet 13位 | ||
生存时间 表示这个IP包可以经过路由器的个数 8位 |
协议 传输层协议所采用的通信协议(UDP:17) 8位 |
报头检查和 IP报头部分的检查和 16位 | ||
发送端IP地址 32位 | ||||
接收端IP地址 32位 | ||||
可选项(可有可无) |
填充物(为了配合IP报头长的单位) (在有可选项时让IP报头是32位的整数倍) | |||
数据(传输层数据包)这里为UDP包(UDP报头和数据) |