物理层定义了电气和器件的规程,一般都是固化的,与咱们Hacking关系不大,所以偶觉得先从数据链路层入手比较好;这几天看了一大堆协议,头晕眼花中。。。又有什么HDLC,PPP,一会又是Ethernet II,IEEE802.3等。。。就想把它们放到一个框架下面,层次感更清楚一些;在这里总结一下:
1.HDLC:(面向比特)
注:控制字段 C 共 8 bit,是最复杂的字段。HDLC 的许多重要功能都靠控制字段来实现
(1)HDLC 采用零比特填充法使一帧中两个 F 字段之间不会出现 6 个连续 1
(2)在发送端,当一串比特流数据中有 5 个连续 1 时,就立即填入一个 0
(3)在接收帧时,先找到 F 字段以确定帧的边界。接着再对比特流进行扫描,每当发现 5 个连续 1 时,就将其后的一个 0 删除,以还原成原来的比特流.(特别强调:在封装帧时,是先封装数据,再放标志位,我之所以说这些是为了解决容易迷惑的一个问题“在封装帧时,如果遇到6个连1我怎么才能知道哪个是标志位哪个是数据呢”,有了这个先后顺序,就很容易理解了。)
2.PPP:(面向字符)
(1)当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样,注意:虽然是面向字符的但是在同步传输的时候也支持比特填充,有些网上的资料是说不能那是错的)。
(2)当 PPP 用在异步传输时,就使用一种特殊的字符填充法。
什么是字符填充法
(1)将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列(0x7D, 0x5E)。
(2)若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列(0x7D, 0x5D)。
(3)若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
(1)当协议字段为 0x0021 时,PPP 帧的信息字段就是IP 数据
(2)若为 0xC021, 则信息字段是 PPP 链路控制数据。
(3)若为 0x8021,则表示这是网络控制数据.
(4)0xC023——信息字段是安全性认证PAP
(5)0xC025——信息字段是LQR
(6)0xC223——信息字段是安全性认证CHAP
3. Ethernet数据帧:
字节:8
字节:7
字节:7
字节:7
注:其中DSAP和SSAP都为0xAA,控制字段为0x03,机构代码一般跟源MAC地址头3字节相同;
其实用得最多还是Ethernet II拉。
4.SDLC:
注:为适应不同环境,SDLC 具有一些派生类:
LAPB,一种 ITU-T 协议,适用于 ISDN 网络;
LAPF,一种 ITU-T 协议,适用于帧中继(Frame Relay)网络;
IEEE 802.2,通常指 LLC,具有三种类型,适用于局域网(Local Area Network);
QLLC,适用于在 X.25 网络上传输 SNA 数据。
6.LAPD:(与LPAB一样适用于ISDN)