网络通信PDU和SDU的区别

原文:http://blog.csdn.net/wind19/article/details/4669637

SDU(service Data Unit):服务数据单元,又叫业务数据单元,是指定层的用户服务的数据集,传送到接收方的时候同一协议层时数据没有发生变化,即业务部分,然后发给下层之后,下层将其封装在PDU中发送出去。服务数据单元是从高层协议来的信息单元传送到低层协议。第N层服务数据单元SDU,和上一层的协议数据单元(PDU)是一一对应的。根据协议数据单元的数据的不同,送到接收端的指定层。

PDU(N) = SDU(N - 1)

SDU(N) = PDU(N + 1)


PDU(Ptotocol data unit): 协议数据单元:计算机网络各层对等实体间交换的单位信息,例如TCP层的PDU就是segment(分节)、应用层间交换的PDU则是application data(应用数据)


简单的理解就是:

本层的PDU为下层的SDU;

本层的SDU为上层的PDU


SDU服务数据单元,对应于某个子层中没有被处理的数据。对于某个子层而言,进来的是SDU。
PDU协议数据单元,对应于被该子层处理形成特定格式的数据。对于某个子层而言,出去的就是PDU。



N层用户与N层协议之间传递的数据称为服务数据单元(SDU)
N层协议实体之间传递的数据称为协议数据单元(PDU),通过数据发送/接收管理把用户提交的SDU以PDU的形式,通过下层通道发送到对端协议实体。在接收端再将PDU还原成SDU送给收端用户。
PDU的封装/解封装:在发送方,将用户递交的SDU加上协议控制信息PCI,封装成PDU;在接收方,讲接收到的PDU解封装,去掉PCI,还原成SDU送交接收方用户。
SDU分段/装配 :如果下层通道的带宽不能满足传递SDU的需要,就需要将一个SDU分成多段,分别封装成PDU发送出去(分段);在接收方再将这些PDU解封装后重新装配成SDU。
SDU拼接/分离:拼接是指在发送方(n)层协议实体把多个长度较短的(n)SDU封装成一个(n)PDU来发送,在接收放再将接收到的(n)PDU解封装,将多个(n)SDU分离出来。采用拼接功能的目的是提高通道的利用率。
PDU分割/组合:PDU分割是指在发送端(n)层协议实体把一个(n)PDU分割成多个(n-1)SDU,并行地从多个(n-1)通道发送出去;接收端再将收到的多个(n- 1)SDU组合成一个(n)PDU。由于这是一个N层功能,所以组合操作在N层中进行,即N层先得到多个分割开的(n)PDU,然后把它们组合成一个(n)PDU。
### CAN网络中协议数据单元(PDU)的使用与管理 #### PDU的概念及其组成 在CAN网络中,协议数据单元(PDU)是指用于在网络上传输的信息单位。具体来说,PDU包含了两部分:服务数据单元(SDU)协议控制信息(PCI)[^3]。 - **SDU (Service Data Unit)**: 这是实际要传输的有效载荷数据,即用户希望发送的具体内容。这部分数据来自更高层次的应用程序或模块,并被传递给较低层次以便进一步处理。 - **PCI (Protocol Control Information)**: 此字段提供了必要的元数据来支持通信过程中的各种操作,比如寻址、错误检测等。特别是在CanTp层面上,为了实现多帧消息的可靠传送而加入了额外的N-PCI信息[^2]。 因此,在CAN总线上,当涉及到更复杂的通讯需求时——例如通过多个物理分组来携带较大的有效负载,则会在CanTp层添加相应的头部信息作为PCI的一部分,以确保整个报文能够正确无误地到达目的地并重新组装成原始的消息形式。 #### PDU的结构特点 对于标准CAN协议而言,一个典型的PDU通常会包含如下要素: - **标识符(ID, Identifier)**: 它用来唯一识别每条消息的目的地址以及优先级等级; - **数据域(Data Field)**: 存储着待交换的实际应用层面的数据字节序列; - **CRC校验码(Cyclic Redundancy Check Code)**: 用作一种冗余保护机制防止因噪声干扰而导致的数据损坏; - **ACKnowledge Slot**: 接收方在此处回应确认信号表明已成功接收到当前帧的内容。 这些组成部分共同构成了完整的CAN-PDU格式,使得节点间可以高效稳定地交互各类指令集或是状态报告等重要情报[^1]。 ```c++ // 示例代码展示如何构建一个简单的CAN_PDU对象 struct CanPdu { uint32_t id; // Message identifier with priority level embedded. byte data[8]; // Actual payload up to eight bytes long per standard CAN frame specification. bool rtr_flag; // Remote transmission request flag indicating whether this is a remote frame or not. }; void create_can_pdu(uint32_t msg_id, const byte* payload, size_t length, CanPdu& pdu){ if(length > sizeof(pdu.data)){ throw std::runtime_error("Payload too large for single CAN message"); } memcpy(pdu.data, payload, length); pdu.id = msg_id; } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值