天天看點

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

TFTP協定

  • 一、TFTF協定簡介
  • 二、TFTP包格式
    • 1.讀/寫請求包
    • 2.檔案資料包
    • 3.回應包
    • 4.錯誤資訊包
  • 三、TFTP的工作流程
  • 四、TFTP的傳輸模式
  • 總結

一、TFTF協定簡介

TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協定)是TCP/IP協定族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協定,提供不複雜、開銷不大的檔案傳輸服務,端口号為69。

TFTP通常基于UDP協定而實作,但是也不能确定有些TFTP協定是基于其它傳輸協定完成的。TFTP協定的設計目的主要是為了進行小檔案傳輸,是以它不具備通常的FTP的許多功能,例如,它隻能從檔案伺服器上獲得或寫入檔案,不能列出目錄,不進行認證。

TFTP代碼所占的記憶體較小,這對于較小的計算機或者某些特殊用途的裝置來說是很重要的,這些裝置不需要硬碟,隻需要固化了TFTP、UDP和IP的小容量隻讀存儲器即可。是以,随着嵌入式裝置在網絡裝置中所占的比例的不斷提升,TFTP協定被越來越廣泛的使用。

二、TFTP包格式

TFTP共定義了五種類型的包,包的類型由資料包前兩個位元組确定,我們稱之為Opcode(操作碼)字段。這五種類型的資料包分别是:

  • 讀檔案請求包:Read request,簡寫為RRQ,對應Opcode字段值為1
  • 寫檔案請求包:Write requst,簡寫為WRQ,對應Opcode字段值為2
  • 檔案資料包:Data,簡寫為DATA,對應Opcode字段值為3
  • 回應包:Acknowledgement,簡寫為ACK,對應Opcode字段值為4
  • 錯誤資訊包:Error,簡寫為ERROR,對應Opcode字段值為5

RRQ和WRQ的資料包格式一樣,隻不過某些值域設定有差别,剩下的三種資料包格式各不相同。

1.讀/寫請求包

RRQ和WRQ資料包的格式:

1.操作碼(2位元組),它用來表示目前資料包的類型(取值1表示該資料包是個讀請求,2表示該資料包是寫請求);

2.可變長字段,它用來表示要讀取或上傳的檔案名,它使用ASCII碼并以0表示結尾;

3.Mode,也是可變長字段,用來表示傳輸檔案的資料類型,如果傳輸的是字元串檔案,那麼它填寫字元串”netascii”,如果傳輸的是二進制檔案,那麼它填寫字元串”octet”,這些字元串都以0結尾。

其結構如圖:

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

2.檔案資料包

傳輸資料塊的DATA資料包,它頭2位元組也是操作碼,取值3用于表示資料包用于資料塊傳輸,接下來的2位元組用于表示資料塊編号,最後是可變長字段Data,用于裝載資料塊。

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

3.回應包

應答ACK資料包,它開始的2位元組也是操作碼,取值4;接下來2位元組表示接收到的資料塊編号,

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

4.錯誤資訊包

錯誤ERROR資料包,它開始的2位元組表示操作碼,取值5;接下來2位元組表示錯誤碼;最後的是可變長字段,它用字元串的形式描述具體錯誤。

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

三、TFTP的工作流程

TFTP的工作都是由用戶端發起一個RRQ或者WRQ開始的。這裡以WRQ(寫請求)為例,講述讀寫的工作過程,以及錯誤處理等内容。

S表示Server,C表示Client,主要工作過程如下:

  • S在端口為69的UDP上等待C發出寫檔案請求包
  • C通過UDP發送符合TFTP請求格式的WRQ包給S。從UDP包角度看,該UDP包的源端口由C随意選擇,而目标端口則是S的69。
  • S收到C的這個請求包後,需發送ACK給C。對于寫請求包,S發送的ACK包确認号為0。
  • C發送DATA資料給S,S接收資料并寫檔案
  • 當C發送的DATA資料長度小于512位元組時,S認為這次WRQ請求完成
  • 當為RRQ請求時,剛好相反

同時,當有多個C向S請求時,在TFTP中,一次請求中所有包的源和目标都由Transfer ID TID來标示。TFTP規定TID值就是UDP包中的源和目标端口。也就是說,一次請求過程中,S和C通過UDP包的源和目标端口來判斷這個包是不是發給自己的。

另外,S對于每個請求,都要采用一個不重複的新的UDP端口号作為它的TID,也就是說,S上同時存在的n個請求的TID都将不同。

這裡再介紹下TFTP的回複ACK機制。雖然TFTP中有指定的ACK包作為回應,但在普遍意義上,DATA包和ERROR包都可以作為上一次發送包的響應。

一般來說,C發送了一個非結束DATA包給S,如果在逾時時間内,C未收到S發送的ACK,則C繼續發送這個DATA直到S回複ACK。這種情況是比較好了解的。

但假如S回複了上一個非結束DATA包ACK後,C在S的逾時時間内沒有發送下一個DATA包,則S将繼續發送這個ACK。從這個角度看,S等待的這個新DATA包是對上一次ACK的确認。

TFTP主要工作流程如下圖(WRQ)

TFTP協定介紹一、TFTF協定簡介二、TFTP包格式三、TFTP的工作流程四、TFTP的傳輸模式總結

四、TFTP的傳輸模式

TFTP傳輸8位資料,傳輸中有三種模式:

  • Netascii:這是8位的ASCII碼形式,一般用來傳輸字元資料;
  • Octet:這是8位源資料類型,一般用來傳輸二進制資料;
  • Mail:它将傳回的資料直接傳回給使用者而不是儲存為檔案,但該模式已經不再支援。

總結

以上就是本篇文章内容,本文簡單介紹了TFTP協定。

之後的文章,将使用C語言,實作一個簡單的TFTP用戶端,使用TFTP用戶端與服務端進行互動,進行簡單的下載下傳上傳等操作。

繼續閱讀