TFTP幀協議詳解

2021-10-05 04:39:39 字數 2522 閱讀 2316

tftp,全稱是 trivial file transfer protocol(簡單檔案傳輸協議),基於 udp 的69埠實現,是最簡單的檔案傳輸網路協議,該協議只能從遠端伺服器讀取檔案或向遠端伺服器上傳檔案。

雖然 tftp 不具備 ftp 的許多功能,但是實現簡單,記憶體占用很小,在uboot等小型平台上也能實現。學習 tftp 可以幫助我們了解網路通訊協議的基本工作過程和原理,對後續學習更加複雜的協議有很大的幫助作用。

#tftp  192.168.1.100  put test.txt      //上傳檔案test.txt到伺服器192.168.1.100
首先看一下 tftp 的包的型別,tftp 有 5 種型別的包:

幀型別操作碼

讀請求幀

1寫請求幀

2資料幀

3應答幀

4錯誤幀5模式

含義netascii

8位的ascii碼形式

octet

8位源資料型別

mail

已經不再支援,它將返回的資料直接返回給使用者而不是儲存為檔案

錯誤碼含義12

access violation. (訪問違規,程式對於伺服器的預設路徑沒有寫許可權導致的)

3disk full or allocation exceeded. (磁碟已滿或超出分配,上傳檔案時可能會出現這個錯誤)

4illegal tftp operation. (非法的 tftp 操作,伺服器無法識別 tftp 包中的操作碼)

5unknown transfer id. (未知的傳輸標識)

6file already exists. (檔案已存在,要上傳的檔案已存在於伺服器中)

7no such user. (沒有該使用者)

注意:操作碼,塊編碼等都是大端格式。

客戶端向服務端傳送讀請求幀,告訴服務端要讀取哪個檔案,使用哪種模式。一般是使用octet模式,很多軟體也只支援該模式。

伺服器收到這個讀請求以後,會開啟另外乙個隨機的埠對該請求進行後續服務。

服務端檢查工作目錄下是否存在目標檔案,以及檔案是否能正常讀取。如果檔案讀取失敗會返回給客戶端乙個錯誤碼為1的錯誤幀。

服務端目標檔案讀取正常則向客戶端傳送資料幀,資料幀資料段最大為512位元組。

客戶端收到服務端資料幀,檢查塊序號是否正確,然後將資料段寫入目標檔案並傳送應答幀。

服務端收取應答幀,並檢查塊序號是否正確,然後繼續傳送資料幀。

步驟4~6不斷迴圈,中間出現錯誤則向對方傳送相應錯誤幀並退出本次傳輸。

當客戶端接收資料幀的資料段長度小於512時,表明傳輸已完成,客戶端傳送最後一次應答幀並退出本次傳輸。服務端收到最後一次應答幀後,讀取目標檔案長度為0,退出本次傳輸。

也許會有一種極端情況,就是檔案的大小正好是 512 位元組的倍數,這樣的話,最後乙個資料報的大小也是 512 個位元組,這時伺服器傳送完包含檔案資料的資料報以後,還會額外傳送乙個包含 0 位元組的資料報,作為最後乙個資料報,這樣就可以保證客戶端收到的最後乙個資料報的大小總是小於 512 個位元組的。也就是說,對於客戶端而言,只要它收到的資料報的大小小於 512 個位元組,它就認為傳輸已經結束,它就會關閉連線。

客戶端向服務端傳送寫請求幀,告訴服務端要上傳哪個檔案,使用哪種模式。一般是使用octet模式,很多軟體也只支援該模式。

伺服器收到這個寫請求以後,會開啟另外乙個隨機的埠對該請求進行後續服務。

服務端檢查工作目錄下是否存在目標檔案,如果存在會返回給客戶端乙個錯誤碼為6的錯誤幀。

服務端向客戶端傳送應答幀,塊編號從0開始。

客戶端收到服務端應答幀後,檢查塊序號是否正確,然後讀取目標檔案並傳送資料段。

服務端收取資料幀,並檢查塊序號是否正確,然後繼續傳送應答幀。

步驟5~6不斷迴圈,中間出現錯誤則向對方傳送相應錯誤幀並退出本次傳輸。

當服務端接收資料幀的資料段長度小於512時,表明傳輸已完成,服務端傳送最後一次應答幀並退出本次傳輸。客戶端收到最後一次應答幀後,讀取目標檔案長度為0,退出本次傳輸。

也許會有一種極端情況,就是檔案的大小正好是 512 位元組的倍數,這樣的話,最後乙個資料報的大小也是 512 個位元組,這時客戶端傳送完包含檔案資料的資料報以後,還會額外傳送乙個包含 0 位元組的資料報,作為最後乙個資料報,這樣就可以保證服務端收到的最後乙個資料報的大小總是小於 512 個位元組的。也就是說,對於服務端而言,只要它收到的資料報的大小小於 512 個位元組,它就認為傳輸已經結束,它就會關閉連線。

可以使用 wireshark 軟體抓取 tftp 幀來詳細檢視tftp 傳輸過程。

基於UDP的TFTP協議幀(五)

一,udp linux udp資料結構 linux 2.6.32.27 include linux udp.h udp頭部資料結構 struct udphdr 由此知,16bit 4 64bit 8位元組,udp首部長度8位元組。如果tcp和udp同時提供某種知名服務,兩個協議通常選擇相同的埠號,這...

chunk rtmp 幀 RTMP協議詳解(三)

chunk msg header chunk msg header的長度是可變的,chunk msg header可變的原因是為了壓縮傳輸的位元組數,把一些相同型別的chunk的head去掉一些位元組,換句話說就是四種型別的包頭都可以通過一定的規則還原成11個位元組,這個壓縮和還原在rtmp協議中稱...

TFTP協議介紹

tftp協議介紹 tftp trivial file transfer protocol 即簡單檔案傳輸協議,它是tcp ip協議族中的乙個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不複雜 開銷不大的檔案傳輸服務。tftp協議是一種非常簡單的檔案傳輸協議,只具有ftp的基本功能。它執行在 ...