数据包,数据报文,数据帧之间的关系

本文详细解释了在网络数据传输过程中,从应用层到物理层的数据封装过程,包括数据报文、数据包、数据帧和信元等不同层级的封装单位及其特点。同时,对常见术语如报文、数据包、数据报、信元、段等进行了辨析。

 

数据发送时,由上层向下层封装,    
四层,协议层传输的是数据报文,主要是协议格式。
三层,网络层传输的是数据包,包含数据报文,并且增加传输使用的IP地址等三层信息
二层,数据链路层传输的是数据帧,包含数据包,并且增加相应MAC地址与二层信息
数据接收的时候,下层向上层解封装

报文 message,用于比网络层更高的协议,在低层协议中以如下形式出现:

1. 帧 frame (一般位于数链层,也有的位于物理层)奇怪的是Wireshark界面上把每个包称为"Frame",单数形式,但是我记得一个包是由多个frames拼成的啊;我认为这里的frame并不是指数据链路层那个frame。

2. 包,数据包,分组,封包,packet (网络层,所以有“IP包”的说法) 我们老师总是把packet读成package(因为念起来比较顺口?),由此可以推测package和packet是一样的。

3. 数据报 datagram (网络层,或之上的层。例如传输层有UDP(User Datagram Protocol)就是基于数据报。)一般来说datagram和packet是同一个意思

4. 信元 cell (定长,数链层或物理层)

5. 段,报文段,segment (TCP协议特有术语,位于传输层,而因为传输层又有个datagram,就出现了“segment=datagram”的说法,但是更准确也是更让人混淆的说法是:segment位于传输层,IP datagram和packet位于网络层)


由于没有权威地统一用法,在很多的资料中,“报文”“数据包”和“数据报”,以及它们的英文,所有这些词语混用得很厉害。读者只能根据上下文来确定到底指的是哪个概念。

 

网络通信中,报文、数据帧数据包是不同层级的数据单位,它们分别对应OSI模型的不同层次,且具有明确的封装传输关系。 - **报文(Message)** 是在OSI模型的**应用层**(第七层)生成的数据单位,它是用户数据或应用层协议交互的基本信息单元。报文通常含应用层的协议控制信息实际传输的数据内容。当报文向下传递时,每一层都会为其添加头部(可能还有尾部),以提供该层所需的控制信息[^3]。 - **数据段(Segment)** 是在**传输层**(第四层)生成的数据单位,它封装了从上一层(会话层或应用层)传递下来的报文或其分片。传输层通过添加头部信息(如TCP或UDP头部)来实现端到端的通信控制。例如,TCP协议将数据划分为段进行传输,而UDP则以数据报的形式进行封装[^3]。 - **数据包(Packet)** 是在**网络层**(第三层)生成的数据单位,它是在传输层的段基础上添加了网络层头部(如IP头部)后形成的。网络层负责将数据包路由到目标主机,因此头部信息括源IP地址、目标IP地址以及其他路由控制字段。数据包是IP协议中传输的基本单位[^3]。 - **数据帧(Frame)** 是在**数据链路层**(第二层)生成的数据单位,它封装了从网络层传递下来的数据包,并添加了数据链路层的头部尾部信息(如MAC地址、校验序列FCS等)。数据帧负责在本地网络中的两个节点之间可靠地传输数据,确保数据在物理链路上的正确传输。 - **比特流(Bit Stream)** 是在**物理层**(第一层)传输的基本单位,它将数据帧转换为电信号或光信号进行物理传输。 因此,**报文属于应用层的数据单位,它在向下传输过程中被封装为段、**,最终以比特流的形式在物理介质上传输。每一层的封装过程为数据添加了控制信息,这些信息在接收端的相应层被逐步剥离,以还原原始的报文内容。 ### 数据封装过程示例(以TCP/IP模型为例) 1. 应用层生成报文。 2. 传输层将报文分段,并添加TCP头部,形成段(Segment)。 3. 网络层将段封装为数据包(Packet),添加IP头部。 4. 数据链路层将数据包封装为(Frame),添加MAC头部FCS尾部。 5. 物理层将转换为比特流进行传输。 ```python # 伪代码示例:数据封装过程 def encapsulate_message(message): # 应用层生成报文 app_message = create_application_message(message) # 传输层封装为段 segment = add_transport_header(app_message) # 网络层封装为数据包 packet = add_network_header(segment) # 数据链路层封装为 frame = add_data_link_header_and_trailer(packet) # 物理层传输比特流 bit_stream = convert_to_bit_stream(frame) return bit_stream ``` ### 总结 - 报文属于**应用层**,它不是数据帧数据包的直接组成部分。 - 数据帧是**数据链路层**的数据单位,用于在本地网络中传输数据包。 - 数据包是**网络层**的数据单位,用于在网络中路由转发数据。 - 报文在传输过程中经过逐层封装,最终成为的一部分进行传输。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值