报文、数据段、分组、帧、PDU概念

本文深入解析网络通信中各种数据单元的角色与功能,包括报文、报文段、分组、数据报、帧及其在网络各层的封装过程。通过具体实例,帮助读者理解不同单元在传输过程中的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.报文(message)
我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。

2.报文段(segment)

通常是指起始点和目的地都是传输层的信息单元。

3.分组/包(packet)
分组是在网络中传输的二进制格式的单元,为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。它的起始和目的地是网络层。

4.数据报(datagram)
面向无连接的数据传输,其工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。通常是指起始点和目的地都使用无连接网络服务的的网络层的信息单元。

5.帧(frame)
帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部,组成了帧。它的起始点和目的点都是数据链路层。

6.数据单元(data unit)

指许多信息单元。常用的数据单元有服务数据单元(SDU)、协议数据单元(PDU)。

SDU是在同一机器上的两层之间传送信息。PDU是发送机器上每层的信息发送到接收机器上的相应层(同等层间交流用的)。

 

应用层——消息

传输层——数据段/报文段(segment) (注:TCP叫TCP报文段,UDP叫UDP数据报,也有人叫UDP段)

网络层——分组、数据包(packet)

链路层——帧(frame)

物理层——P-PDU(bit)

链路层网络层传输层应用层
    
 数据包,packet数据段,segment消息,message
帧,frame数据报,Datagram报文段报文
 分组  

其实,segment,datagram,packet,frame是存在于同条记录中的,是基于所在协议层不同而取了不同的名字。我们可以用一个形象的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中通常只有一个数据包。
 ———————————————— 
版权声明:本文为CSDN博主「啊大1号」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a3192048/article/details/84671340

### AUTOSAR 中 CAN 报文的发送与接收 在 AUTOSAR 架构下的 CAN 通信中,报文的发送和接收主要依赖于底层驱动模块(LDL)、网络接口层(NIf)以及运行时环境(RTE)。这些组件共同协作完成数据传输的任务。 #### 发送流程 当应用程序需要发送一条消息给其他节点时,会调用 RTE 提供的服务函数来发起请求。具体来说: - 应用程序通过调用 `Rte_Write` 函数向特定端口写入待发送的数据对象; - 这些数据随后被传递到 NIf 层,在这里进行必要的处理如打包成 PDU 形式并附加相应的元信息; - LDL 负责最终将封装好的 PDU 映射至物理介质上实际发出[^1]; ```c // 示例代码展示如何使用 Rte_Write 来触发一次发送操作 void sendCanMessage(uint8_t* data, uint8_t length){ Can_PduType canPdu; // 设置要发送的消息内容及其长度 memcpy(canPdu.SduDataPtr, data, length); canPdu.SduLength = length; // 使用预定义的名字空间和服务名来进行发送 Rte_Write_SomeSenderPort(&canPdu); } ``` #### 接收流程 对于接收到的信息而言,则是从硬件层面开始向上逐级解析直至到达应用层的过程: - 当有新的 CAN 到来时,由 LDL 完成初步过滤并将符合条件者提交给 NIf 处理; - 在此阶段会对原始执行解码工作,提取出有效载荷部分形成标准格式的 PDU 结构体; - 最终经由 RTE 将其分发给注册过对应事件的应用实体以便进一步加工利用; ```c // 模拟一个简单的回调函数用于处理新接收到的数据包 void handleReceivedCanMsg(const Can_PduType *pduInfo){ printf("Receive message with ID %d and size %u\n", pduInfo->SduId, pduInfo->SduLength); // 对应业务逻辑的具体实现... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值