2013-07-30 45 views
4

我知道在网络中,数据流将在第4层被分成不同的段。然后每个段被封装端口号和IP地址。我发现了一些我想问的问题:TCP和UDP分段

  • 谁负责将数据流分成不同的段。它是应用程序还是第4层?

  • 我明白UDP不支持分割。那么如何将数据流分成不同的段进行发送(就像在VoIP应用中一样)?

预先感谢

+0

这不是一个真正的编程问题。 –

+0

可能更适合在http://serverfault.com/。 – 2014-11-18 15:43:46

回答

0

TCP连接是一个字节流。打包由操作系统中的TCP/IP堆栈完成。

UDP是而不是一个流 - 它只是一堆数据报,不保证以任何顺序(或根本)到达。任何使用UDP实现的协议都必须以它们自己的应用程序特定的方式来处理这些细节。

+0

感谢您的回复。所以你说Application对UDP段的大小负责。在哪里,对于TCP操作系统负责。 – user2566898

+0

是的。 http://en.wikipedia.org/wiki/Maximum_segment_size –

+0

不,应用程序无法确定数据报大小有多大,是出站接口的MTU,这也是操作系统的责任,如果我没有错误 – Karthikeyan

0

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

0

第3层负责照顾数据碎片。 MTU的通常大小是576字节。因此,网络层将传输层片段分成576字节的块,添加自己的头并将其发送到数据链路层。

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

在VoIP中,数据块(20-30ms)一次处理并作为应用层消息发送。