TCP/IP数据包和数据报

9
在从传输层(TCP)接收到一个分段并向网络层(IP)发送时,结果数据单元将是一个数据包。而当从传输层(UDP)接收到用户数据报时,结果数据单元将是一个数据报吗?
4个回答

19
"You are getting caught up in the details... 'packet' and 'datagram' are not exactly well-defined terms. I also think that you are also looking at things backwards. In a conventional network:
1. 链路层(例如802.3“以太网”或802.11“Wi-Fi”)向网络层(例如IP,ICMP)呈现帧。 2. 网络层将帧组装成数据包,并将其传递到堆栈中的下一层 - 传输层。 3. 传输层再将字节传递给应用层。 应用层API实际上是区分TCP中的数据流和UDP中的数据报之间的区别。"

OSI协议栈实际上已经不再被广泛使用,大多数情况下已被Internet协议套件所取代。了解网络协议栈如何工作的最简单方法是购买《TCP/IP详解 卷一:协议》,下载一个良好的网络抓包工具,并观察一些互联网流量。您可以看到数据包是如何从物理层向上组装的。


11
说“OSI堆栈不再使用”是完全错误的。OSI 7层堆栈是一个参考模型。像同时代的DecNET和LanTastic一样,X.500协议实现已经成为了古老的历史。OSI参考模型:仍然是一个有价值的概念模型。在我看来... PS:“帧”(第2层)、“分组”(第3层)和“数据报”(TCP/IP,第4层)都是“协议数据单元(PDUs)”的例子,并且都有非常明确定义! - paulsm4
@paulsm4 - 我的意思是,OSI模型的定义,尤其是第5层和第6层,已经被完全遗忘。传输层以上的所有内容都已合并到应用层中,这正是IETF模型的精髓。我确实同意OSI模型具有过分明确定义的缺点,而IETF模型则最多只是松散定义。 - D.Shawley
1
@paulsm4 OSI参考模型适用于ODI协议栈。TCP/IP有自己的参考模型,它只有4层,而不是7层。7层OSI参考模型和它所指的协议栈一样过时了。 - user207421
1
@D.Shawley:+1 - 很好的解释。特别是,感谢您区分“帧”、“数据包”和“分组”。并指出TCP的“字节流”和UDP的“数据报”是传递给“应用层”的内容(第7层:实际读写网络数据的程序级别)。 - paulsm4

5
术语“数据报”通常被认为是与“数据包”同义词,但有一些细微差别。“数据报”一词通常用于不可靠服务的“数据包”,如果传输失败,无法通知发送方,而“数据包”一词适用于任何“数据包”,无论是否可靠。“数据报”是提供快速和不可靠服务(如UDP)的IP数据包,所有IP“数据包”都是“数据报”;然而,在TCP层,所谓的TCP段有时是一个“数据报”的IP分段,但这些被称为“数据包”。

0
你绝对需要熟悉"七层网络协议栈"。虽然它并不完全适用于TCP/IP,但它是理解任何"网络"协议(包括TCP/IP)的绝佳基础。

简短回答:

  • “数据包”是通过网络发送的东西。

  • 对于TCP/IP,接收主机将数据包组装成“流”。

  • 另一方面,对于UDP,接收主机将相同的数据包(或者实际上是数据包)组装成“数据报”。

“数据包”是第3层(“网络层”)的事情。

“流”和“数据报”是第4层(“传输层”)的事情。

在TCP/IP的情况下,“流”和“数据报”都可以被第7层(“应用层”:包括HTTP/web、SMTP/电子邮件、FTP/文件传输等等)直接访问。


3
他可能需要熟悉4层TCP/IP模型。完全没有必要熟悉过时且不适用的7层OSI网络模型。 - user207421
这绝对不是无知的陈述,你的评论有点冒犯。我所读过的所有TCP/IP标准作者,包括RFC本身,都认为OSI模型不适用于它,并且有整个OSI层次结构根本不适用于任何特定的东西:实际上甚至不适用于OSI协议栈。作为一种教学工具,它已经过时了约20年。重要的是协议层的概念,以及对第2层和第3层中包含什么的相当普遍的共识。 - user207421

-1
收到传输层(TCP)到网络层(IP)的数据段后,结果数据单元将是一个数据包,这是真的吗?
不是。
TCP 中客户端能看到的唯一接收单位是字节。TCP 段由一个或多个 IP 数据包组成,但所有应用程序能看到的都是一个字节流。在应用程序看到任何数据之前,所有段和数据包边界都会丢失。您发送一些字节,接收一些字节,发送和接收的数量之间没有必然的强关联,除了它们都加起来形成相同的流。
相比之下,在 UDP 中,发送和接收的单位都是数据报。您发送一个数据报,如果它完整到达,则接收相同的数据报,其中包含相同的字节和相同数量的字节。

接近正确,但还不完全正确。网络层处理数据包:正确。实际上是应用层(第7层)处理字节流或UDP数据报。而不是网络层 :) 有趣的是,数据报文可能与您的第3层数据包大小相同,也可能不同:http://cboard.cprogramming.com/networking-device-communication/133440-udp-packets-greater-than-1500-bytes.html - paulsm4
@paulsm4 想想看,我甚至不确定“从传输层接收段到网络层”的意思是什么。TCP根本不会将段发送到IP,它们只存在于自己的想象中,而不是界面的一部分。 - user207421
@paulsm 迟了,但我从来没有提及过网络层,更别说你在这里归因于我的内容了。在TCP/IP的背景下谈论第7层是毫无意义的。TCP/IP参考模型没有7层,而七层OSI模型也不适用于TCP/IP,或者我所知道的任何其他东西。我不明白你的链接与我的回答有什么关系。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接