HDLC是( )协议 A基于计数的 B面向字节的 C面向比特的 D面向字符的 2单选(1分) 1分) 发送窗口大于1,接收窗口大于1的ARQ协议是( ) A 选择ARQ协议 B 停等ARQ协议 C 连续ARQ协议 D 实用ARQ协议 3单选(1分) HDCL中,用来发送接收准备好、接收未准备好、拒绝接收或选择拒绝接收的帧是( ) A监督帧 B信息帧 C无编号帧 D都不对 4单选(1分) HDLC协议的数据帧,当()时,为无编号帧 A 控制字段的第1个比特为1,且第2个比特为0 B 控制字段的第1个比特为1 C 控制字段的第1个比特为1,且第2个比特为1 D 控制字段的第1个比特位为2 5单选(1分) HDLC协议的数据帧,当()时,为监督帧 A控制字段的第1个比特为1 B控制字段的第1个比特为0,且第2个比特为1 C控制字段的第1个比特位为1 D控制字段的第1个比特为1,且第2个比特为0
时间: 2023-06-16 15:07:26 浏览: 53
1. HDLC是面向比特的协议。
2. 发送窗口大于1,接收窗口大于1的ARQ协议是连续ARQ协议。
3. HDLC中,用来发送接收准备好、接收未准备好、拒绝接收或选择拒绝接收的帧是监督帧。
4. HDLC协议的数据帧,当控制字段的第1个比特为1,且第2个比特为0时,为无编号帧。
5. HDLC协议的数据帧,当控制字段的第1个比特为1,且第2个比特为1时,为监督帧。
相关问题
HDLC协议为什么是面向比特的
HDLC协议是一种面向比特的协议,这意味着它将数据分成比特流进行传输,而不是像面向字节的协议那样将数据分成字节进行传输。
HDLC协议之所以是面向比特的,是因为它需要对每个比特进行精确的同步和定时。HDLC协议使用同步字符来确保发送和接收方的时钟同步,并使用比特填充来保持帧的固定长度,以便接收方可以准确地确定帧的结束。
此外,HDLC协议还使用了比特透明传输的技术,这意味着它可以传输任意比特序列,而不会将某些特定的比特序列误解为控制信息。这样可以确保数据的完整性和可靠性。
总之,HDLC协议之所以是面向比特的,是因为它需要对比特进行精确的同步和定时,并使用比特透明传输的技术来保证数据传输的完整性和可靠性。
用C语言编写HDLC协议代码
下面是一个简单的HDLC协议代码示例,使用C语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLAG 0x7e
#define ESCAPE 0x7d
#define XOR_BYTE 0x20
unsigned char buffer[1024]; // 接收缓冲区
int buffer_pos = 0;
void send_frame(unsigned char* data, int len) {
unsigned char frame[1024];
int frame_pos = 0;
int i;
// 添加起始标志
frame[frame_pos++] = FLAG;
// 转义并添加数据
for (i = 0; i < len; i++) {
if (data[i] == FLAG || data[i] == ESCAPE) {
frame[frame_pos++] = ESCAPE;
frame[frame_pos++] = data[i] ^ XOR_BYTE;
} else {
frame[frame_pos++] = data[i];
}
}
// 添加结束标志
frame[frame_pos++] = FLAG;
// 发送帧
// ...
}
void receive_byte(unsigned char byte) {
if (byte == FLAG) {
// 帧开始
buffer_pos = 0;
} else if (byte == ESCAPE) {
// 转义字符
// 等待下一个字节
} else {
// 普通字节
buffer[buffer_pos++] = byte;
if (buffer_pos >= sizeof(buffer)) {
// 缓冲区溢出
// ...
}
if (byte == FLAG) {
// 帧结束
unsigned char data[1024];
int data_pos = 0;
int i;
// 反转义并提取数据
for (i = 0; i < buffer_pos; i++) {
if (buffer[i] == ESCAPE) {
i++;
data[data_pos++] = buffer[i] ^ XOR_BYTE;
} else {
data[data_pos++] = buffer[i];
}
}
// 处理数据
// ...
}
}
}
int main() {
// 测试发送
unsigned char data[] = {0x01, 0x02, 0x03};
send_frame(data, sizeof(data));
// 测试接收
unsigned char frame[] = {0x7e, 0x01, 0x7d, 0x5e, 0x02, 0x7d, 0x5d, 0x03, 0x7e};
int i;
for (i = 0; i < sizeof(frame); i++) {
receive_byte(frame[i]);
}
return 0;
}
```
这个代码示例演示了如何使用C语言实现HDLC协议的基本功能,包括帧的发送和接收,以及字节的转义和反转义。请注意,这只是一个简单的示例,实际应用中可能需要根据具体的需求进行修改和优化。