2012-03-25 86 views
0

在连接保持建立的情况下,TCP如何知道哪个文件是大文件(通过tcp分段)的最后一个数据包。 (如ftp或在yahoo messenger上发送mp3)tcp:在末尾重组数据

我的意思是如何知道哪个数据包载有one.mp3的数据,哪个数据包载有另一个.mp3的数据?

有人吗?

谢谢

+0

随机评论:['SCTP'](http://en.wikipedia.org/wiki/SCTP)通过设计解决了这个问题,可惜它没有被用到更多... – Irfy 2012-03-25 10:59:43

回答

1

有至少2种可能的方法。

  • 声明您将发送多少数据。像声明发送消息这是长4008个字节
  • 第二种方法是使用一个终止序列的分组的东西(难吃处理)

所以接收机:

  • 试图读取申报的金额或
  • 扫描终止序列
0

TCP是一种流协议,碎片对TCP应用程序应该是透明的。它对数据流进行操作,从不使用数据包。使用序列号将流组装成其预定顺序。应用程序发送的字节序列封装在tcp段中。在数据传送到应用程序之前,数据流在接收端重新创建。

IP协议可以做分段。

每个TCP段都转到IP层,并可能在那里被分段。通过收集所有数据包来重新组装段,并使用头中的偏移量字段将其放在正确的位置。

+0

我知道...但是它怎么样知道哪个是形成文件的最后一个包..?我不在乎它是否透明..现在我指的是不透明的方式 – pufos 2012-03-25 11:22:53

+0

在我的理解中它不知道。 TCP只是发送字节流而不关心它是什么。应用程序必须解释该流并将其分为多个文件。它不会对数据包进行操作。 – wisent 2012-03-25 11:26:44

+0

协议头文件中指定的长度(应用协议,如ftp/ssh/http)?但是这是非常糟糕的,因为任何人都可以修改该标题。 – pufos 2012-03-25 11:34:25