← 前一天目录后一天 →

每日科普 · 2026-11-04 周三

考研 408 × 求职面试

知识点 · 计算机网络 · 基础

数据封装、解封装与协议数据单元 PDU

数据封装是发送方让数据“穿上”各层协议头(有时还有帧尾)的过程。 1. 应用层产生应用数据(报文)。 2. 传输层加TCP/UDP头,形成报文段或用户数据报。 3. 网络层加IP头,形成分组或数据报。 4. 数据链路层加帧头和帧尾,形成帧。 5. 物理层把帧变成比特流发送。 接收方做反向操作:物理层收比特,链路层验帧并拆帧,网络层拆IP头,传输层拆TCP/UDP头,最后把应用数据交给应用。每层处理的对象叫协议数据单元PDU,即应用数据、报文段/数据报、分组、帧、比特流。可类比寄快递:信纸、信封、地址、运输单逐层包装,收件人再逐层拆开。

每日一题 · 计算机网络

数据封装、解封装与协议数据单元 PDU

下列各层与其典型PDU对应正确的是: A. 传输层—帧 B. 网络层—分组(数据报) C. 数据链路层—报文段 D. 物理层—数据包

解析

选B。封装时,传输层TCP形成报文段、UDP形成用户数据报;网络层加IP头形成分组/数据报;数据链路层形成帧;物理层传输比特流。A、C、D均把PDU层次错位。

面试小贴士 · 计算机网络

数据封装、解封装与协议数据单元 PDU

常问“网页数据到网卡如何封装”或各层PDU名称。答题按应用→传输→网络→链路→物理逐层加头/尾,接收端反向解封装;易错是把TCP报文段、IP分组、以太网帧混称。

代码实现 · C

代码示例

#include <stdio.h>
#include <string.h>

typedef struct {
    char app[32];
    char tcp[64];
    char ip[64];
    char frame[96];
} PDU;

int main(void) {
    PDU p = {0};
    strcpy(p.app, "Hello");
    printf("应用层数据: %s\n", p.app);

    snprintf(p.tcp, sizeof(p.tcp), "[TCP头]%s", p.app);      // 加传输层头
    printf("传输层PDU(报文段): %s\n", p.tcp);

    snprintf(p.ip, sizeof(p.ip), "[IP头]%s", p.tcp);         // 加网络层头
    printf("网络层PDU(分组): %s\n", p.ip);

    snprintf(p.frame, sizeof(p.frame), "[帧头]%s[帧尾]", p.ip); // 加链路层头尾
    printf("数据链路层PDU(帧): %s\n", p.frame);

    // 解封装:接收端按相反顺序去掉帧头帧尾、IP头、TCP头
    printf("解封装示例: 从帧中取出分组 -> %s\n", p.ip);
    return 0;
}
← 前一天目录后一天 →