2012-03-25 82 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