参考技术A
网络层次模型中不同层的协议数据单元图示
即在第 4 层(传输层)中,数据单元是 段(segment) 和 数据报(datagram) 。 因此,在以太网上的 TCP/IP 通信的示例中, TCP segment(TCP段) 被承载在一个或多个 IP packet 中,每个 IP packet 都承载在一个或多个以太网帧中。
即 packet 这个术语比较通用,TCP Packet,IP Packet 等等很多地方
即 数据报是与 分组交换网络 相关的基本传输单元, 提供跨分组交换网络的无连接通信服务
而 RFC 1594 对 datagram 的解释:
即一个自包含的、独立的数据实体,携带足够的信息,可以从源计算机路由到目标计算机,而不依赖于该源计算机和目标计算机与传输网络之间的早期交换。
数据报需要是自包含的,而不依赖于早期的交换,因为两个通信点之间没有固定持续时间的连接
个人觉得 Quora 上一个比较高赞的回答很有道理:
另外一个高赞回答:
即 datagram 在传输之前不决定路径,因为它是 无连接协议 ,它不保证传递。
即:网络层的数据称为 datagram 。 IPv4 对 datagram 进行 分段 。每个片段称为一个 packet 。分片是为了通过具有有限的 MTU (最大传输单元,通常为 1500 字节)的链路发送大尺寸 datagram 。例如,如果一个大小为 3,000 字节的 datagram 即将从主机发送到具有 1500 字节 MTU 的链路,则路由器将按照 MTU 的大小(即 1500)对 datagram (3000 字节)进行分段,生成 K 个 packet ,等于3000/1500=2个 packet 。总而言之,一个 datagram 是 n 个 packet ,即 1 个 数据报 由 n 个 分组/数据包 组成
When sending packets using TCP/IP, the data portion of each IP packet is formatted as a TCP segment .
报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。
应用层:报文(message),一般指完整的信息,传输层实现报文交付,位于应用层的信息分组称为报文;
传输层:报文段(segment),组成报文的每个分组;
网络层:分组(packet)是网络传输中的二进制格式单元,数据包(datapacket)是TCP/IP通信协议传输中的数据单位;通过网络传输的数据基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地及其与其他数据之间的关系,可以理解为数据传输的分组,我们将通过网络传输的基本数据单元称为数据报(Datagram);
链路层:帧(frame),数据链路层的协议数据单元,为了保证数据的可靠传输,把用户数据封装成帧;
物理层:PDU(bit),协议数据单元;
抓包,抓到的是传输层的包,packet/frame/Datagram/segment是存在于同条记录中的,这些是基于所在协议层的不同取了不同的名字。