2013-08-20 68 views
3

嗨,對不起,如果這是一個愚蠢的問題(我剛開始學習網絡編程),但我一直在尋找谷歌有關如何將文件/數據分成數據包。我已經閱讀無處不在,不知何故,文件被分解成數據包,在瀏覽OSI模型時應用了頁眉/頁腳,並通過電報發送,接收者基本上做了相反的操作並刪除了標題。數據如何分成數據包?

我的問題是文件/數據究竟是如何分解爲數據包以及它們如何在另一端重新組合?

無論做什麼重組都知道數據的最後一個包何時到達等等?

是否有可能重新組合從另一臺機器捕獲的數據包?如果是的話如何?

(而且如果它意味着什麼,我最感興趣的是如何工作的TCP數據包類型)

我也有從通過Wireshark的我的電腦上的應用程序捕獲一些數據包,他們打成TCP協議,我想要做的是將它們重新組裝回原始數據,但是如何判斷哪些數據包屬於哪組數據?

任何指向資源的指針非常感謝,謝謝!

回答

1

我的問題是究竟如何被分解成數據包文件/數據

什麼正在通過網絡發送不一定是文件。在文件的情況下,有幾種不同的協議可以發送文件,問題的答案取決於協議。

對於FTP和HTTP,文件的全部內容可能是通過TCP作爲單個數據流發送的(在HTTP的情況下,前面是頭,而在FTP的情況下,只是原始的,通過連接) 。

對於TCP,客戶端和服務器根據各種因素(例如服務器和客戶端之間各種網絡上的最大數據包大小)協商出「最大段大小」,並且文件數據按順序發送塊的大小受限於最大數據包大小以及IP和TCP頭的大小。

對於遠程文件訪問協議(如SMB,NFS和AFP),通過「文件讀取」和「文件寫入」請求傳遞的信息是:對「文件讀取」請求的回覆包括一些回覆頭,並且如果讀取成功,則讀取請求所請求的文件數據塊和「文件寫入」請求包括一些請求頭和文件數據塊正在寫入。這些是而不是保證是整個文件,但是如果讀取或寫入文件的程序正在按順序讀取或寫入整個文件,則整個文件的數據將可用。數據包大小將取決於讀取的回覆/寫入請求頭的大小以及所使用的讀取或寫入大小;這些數據包可能會根據TCP「最大段大小」以及IP和TCP標頭的大小分成多個TCP段。

我的問題是如何準確的文件/數據分解成數據包

對於FTP,數據接收者知道有沒有更多的數據時,TCP連接的一側在其上數據傳輸已關閉。

對於HTTP,數據的接收者知道當數據傳輸的TCP連接的一端關閉時,不再有數據,如果連接是「持久的」(即它當數據之前發送的「Content-Size:」報頭指定的數據量(或其他類似的機制,例如chunked encoding的「最後一個組塊」指示)保持打開以用於更多的請求和回覆時, 。

對於文件訪問協議,沒有真正的「我們處於數據末尾」指示; SMB,AFP和NFSv4的最接近的近似值是「文件關閉」操作。

是否有可能重新組合從另一臺機器捕獲的數據包?如果是的話如何?

這取決於協議,但是,對於HTTP和SMB,如果捕獲已經被讀入的Wireshark(和所有的文件數據是在捕捉!),你可以使用「導出對象」菜單,對於某些協議,您可能也可以使用tcpflow

+0

我也有一些數據包是從我的電腦上的應用程序通過WireShark捕獲的,它們被標記爲TCP協議,我想要做的是將它們重新組裝回原始數據,但是如何知道哪些數據包屬於哪一組數據? (編輯上述問題) – Edgepad

+0

「我還通過WireShark從我的計算機上的應用程序中捕獲了一些數據包,它們被標記爲TCP協議」這意味着Wireshark不理解協議。如果不理解協議,就無法知道數據包的內容是什麼意思,或者它們是否傳輸文件*,更不用說,如果它們正在傳輸文件或其他這樣的數據塊,數據包中哪些數據屬於哪一組數據。 – 2013-08-21 17:49:43

+0

如果是這樣的話,那麼爲什麼數據在Wireshark中是半可讀的(使用ASCII),以及在Wireshark中右鍵單擊數據包時,「遵循TCP流」選項到底是什麼? – Edgepad

1

我的問題是文件/數據究竟是如何分解爲數據包以及它們如何在另一端重新組合?

他們基本上被切碎了。每個互聯網數據包(帶有標題信息添加)只能容納幾百字節的實際數據。

無論做什麼重組都知道數據的最後一個包何時到達等等?

對於傳輸,數據包進行編號,因此接收過程知道如何將它們放在一起。如果丟失了一個數據包,它可以請求重新發送。

是否有可能重新組合從另一臺機器捕獲的數據包?如果是的話如何?

我不明白這個問題。除非你是一箇中間人,否則你會如何獲得這些數據包?

這些答案適用於TCP數據包。

+0

對於最後一個問題,我的意思是,如果我捕捉使用類似libpcap的數據包,纔有可能將它們重新組合成原來的文件之前準備數據片段?是否有一個統一的過程來處理所有TCP數據包? – Edgepad

+0

是的,那是可能的。只要你把他們都抓住了。 – Jiminion

0

首先確定要傳輸的尺寸。

然後爲每個傳輸放置標題,數據和頁腳。

請參閱緩衝區長度和數據數組應該可以被數據包的數量整除而不給分數。

這裏頭應該包含幀號,時間戳,包號

有效載荷數據

頁腳---您的公司信息。

發送