TCP和UDP分段

4
我知道在网络中,数据流会在第四层被分成不同的段。每个段都将被封装为端口号和IP地址。我有几个困惑的问题需要问一下:
  • 是应用程序还是第四层负责将数据流分成不同的段?

  • 我了解到UDP不支持分段。那么在发送数据流时(如VoIP应用程序),数据流如何分成不同的段?

谢谢!

这并不是一个真正的编程问题。 - Jonathon Reinhart
可能更适合在http://serverfault.com/上发布。 - user2849447
3个回答

0
TCP连接是一串字节流。TCP/IP协议栈在操作系统中完成分组处理。
UDP不是一个流 - 它只是一堆数据报,不能保证按任何顺序(或根本不)到达。使用UDP实现的任何协议都必须以其自己的应用程序特定方式处理这些细节。

谢谢您的回复。所以您的意思是应用程序负责UDP数据包的大小,而对于TCP则由操作系统负责? - user2566898
不,应用程序无法决定数据报大小,它是出站接口的MTU,这也是操作系统的责任,如果我没有错的话。 - Karthikeyan
如果你将一个4000字节的UDP数据包发送到MTU为1500的链路上,它将会被分片。 - Jonathon Reinhart

0

应用层不应该担心TCP通信中的分段(传输层数据包)。因为它是由TCP层创建的。理论上,段大小可以达到65495。但它将根据您的出站接口(如以太网卡)的MTU计算。因此,应用层根本不涉及数据流的分段。UDP也在第4层,但它不支持TCP的可靠性。否则,UDP数据报的创建(UDP通信中的传输层数据包)与TCP中的段完全相同。


0

第三层的责任是处理数据分段。MTU的通常大小为576字节。因此,网络层将传输层段分成大小为576字节的块,添加自己的头并将其发送到数据链路层。

即使使用UDP,也可能发生分段。UDP不知道分段和片段的重组,因为执行这些操作的是网络层。无论传输层协议如何,超过576字节的任何内容都会被分段。

在VoIP中,每次处理20-30毫秒的数据块,并作为应用层消息发送。


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