TFTP簡單傳輸協議了解

一、TFTP簡介

1.定義

TFTP(Trival File Transfer Protocal,簡單文件傳輸協議)該協議在熟知端口69上使用UDP服務。TFTP協議常用于無盤工作站或路由器從別的主機上獲取引導配置文件,由于TFTP報文比較小,能夠迅速復制這些文件。

2.優點

(1).TFTP協議代碼所占用的內存小,其對應的軟件也很小,所以能個很容易地放入到無盤工作站的ROM中。(2).TFTP支持ASCII碼或二進制傳送。

二、TFTP傳輸過程描述

以TFTP客戶向TFTP服務器發送讀請求為例,說明整個過程。
1.服務器使用熟知端口號69被動打開連接;
2.客戶主動打開連接,它使用臨時端口作為源端口而熟知端口69作為目的端口,向服務器進程發送RRQ報文;
3.服務器主動打開連接,它使用新的臨時端口作為源端口,而使用收到的來自客戶的臨時端口作為目的端口,向TFTP客戶進程發送DATA報文(2B操作碼,2B數據塊的塊號K,512B數據);
4.客戶收到服務器的報文后,發送4B的ACK(2B的操作碼和2B的數據塊號)給TFTP服務器,告訴它之前發送給客戶的數據報已經收到;
5.重復步驟3-4,直到所有請求的數據發送完畢。

三、功能總結

(1).從上面的過程可以看出,TFTP是一種類似于停止等待協議(不是真正的停止等待協議,在停止等待協議中,接收方發送的ack表示期望收到的下一個分組,而在TFTP的ACK報文中,ack的塊號表示的是本次成功收到的數據塊,而不是下一個期望的下一個數據塊)。TFTP服務器只有收到客戶端的確認報文ACK后才會向客戶端接著發送新的數據。
(2).服務器向客戶端發送數據的過程中,每次都是發送512B的數據,如果客戶進程收到某個DATA報文中數據部分的長度小于512B,說明這是收到的最后一個報文;如果待發送的數據的總長度正好是512的整數倍,這就意味著最后一個數據報的長度正好為512B,此時服務器進程會再次發送一個包含0字節數據的DATA報文(顯然,該報文的總長度為4B=2B操作碼+2B塊號+0B數據);
(3).TFTP協議中,用于讀文件的連接和用于寫文件的連接的建立方式不同:建立讀連接的時候,客戶首先向服務器發送RRQ讀報文,服務器收到該報文后,直接發回給該客戶DATA報文,并且包含第一個數據塊(塊號為1)。而建立寫連接的時候,客戶首先先服務器發送WRQ寫報文,服務器收到該報文后,則發回給客戶ACK報文,使用的塊號為0;當然上面兩種情況如果遇到請求報文出錯時,均會發回ERROR報文作為響應。

四、TFTP五種報文(重點)

TFTP五種報文分別是:RRQ,WRQ,DATA,ACK和ERROR。

包文件

RRQ/WRQ報文:

模式字段中,包含兩種字符串中的一種,"netascii"表示ASCII文件,"octet"表示二進制文件;對于RRQ,客戶向TFTP服務器發送讀請求后,服務器返回一個塊編號為1的DATA報文;而對于WRQ,客戶向TFTP服務器發送寫請求后,服務器返回的是塊編號為1的ACK報文。總之,不管是RRQ還是WRQ,接收DATA數據的一方(讀者)發送ACK確認,而發送DATA數據(寫者)的只負責發送數據。

DATA報文:

由客戶或服務器使用(由寫者發送),用于傳送數據塊。所有的塊都用數字順序編碼,從1開始。在所有的DATA報文中,這個塊必須準確地等于512B,但最后一個塊可以小于或等于512B。當發送的DATA報文中數據部分的長度小于512B后,表示DATA報文發送完畢,所以小于數據部分512B的DATA數據報可以作為文件結束的標志。特殊的情況是,當文件中的數據正好是512B的整數倍時,那么發送端必須再發送一個具有數據部分為0B的額外的DATA數據塊以表示傳輸的結束。數據可以采用ASCII碼或二進制組來傳送。

ACK報文:

塊號表示它所收到的塊號(不是下一個期待的塊號哈,這與TCP中的ACK序號不同)。特殊情況是,當客戶向服務器發送一個WRQ請求后,服務器返回給客戶的是一個塊號為0的ACK報文,表示服務器已經準備好了接收來自客戶的數據報。

EEROR報文:

ERROR報文既可以有客戶發送,也可以由服務器發送,當一條連接(如讀連接或寫連接)不能建立或在數據傳輸中出現問題時使用。差錯碼定義了差錯的類型,差錯信息是一個可變字節,包含原文中的差錯數據。

注意:

從上面的報文格式中可以看出,TFTP報文沒有差錯檢驗和字段,所以接收端檢驗數據是否出現差錯的唯一方法是通過分組該TFTP數據報的UDP首部中的檢驗和字段。

五、流量控制

TFTP流量控制采用的是停止等待協議。TFTP使用DATA報文發送數據塊,并等待ACK報文的確認。若在超時之前發送端就收到了確認,它就發送下一個塊。這樣,實現流量控制的方法是在發送下一個數據塊之前,必須要保證收到了上一個數據塊的ACK報文。
客戶從服務器讀文件:當客戶打算向服務器讀文件時,先發送RRQ報文,若無問題,服務器就直接發送塊號為1的DATA報文(即第一個數據塊就直接發送過去了)。
客戶向服務器寫文件(就是存儲文件):當客戶打算寫文件時,先發送WRQ報文,若無問題,服務器就響應塊號為0的ACK報文(不是DATA報文,因為此時服務器是數據接收方,只能發送ACK,同時注意第一個ACK的塊編號是0,這樣就可以通知客戶,我同意了你的寫請求)。客戶在收到該確認后,就是用塊號為1發送第一個數據塊給服務器。

六、差錯控制

TFTP的差錯機制與其他協議不同,它是對稱的,因為TFTP協議在發送端和接收端都使用了計時器。也就是說,客戶和服務器兩端,一方使用了DATA報文計時器(發送端),另一方使用ACK報文計時器(接收端)。若發送端丟失了數據報文,在計時器到期時發送端就重傳該數據報文;若接收端丟失了ACK報文,在超時時接收端就重傳該ACK報文。

差錯控制常用于這四種情況:報文受損、報文丟失、確認丟失和報文重復。

報文受損:

當數據塊出現差錯(通過差錯檢驗,得靠UDP首部)時,接收端能夠檢測出來并丟棄該報文。發送端等待確認,超時后就重傳該數據報。

報文丟失:

若數據報丟失了,它就用于不能到達接收方,而確認頁不會發出。發送端在超時之后,就會重傳該數據報。
確認丟失:確認丟失了,則可能發生兩種情況:一是接收端的計時器比發送端的計時器先到期,則接收方重傳確認;若發送端的計時器先期,則發送端重傳該數據。

報文重復:

接收端通過塊編號可以檢測出數據塊的丟失。若數據塊重復了,接收端就簡單地將其丟棄。
sorcerer's apprentice bug
Sorcerer's apprentice buy可以翻譯為“魔法師學徒的錯誤"(或魔術新手綜合征),這個名稱來自一個動畫人物,這個人不經心地對一個拖把施加魔法,結果這個拖把連續地復制它自己。若分組的ACK報文沒有丟失而是延遲了,則會發送這種錯誤。

數據分組發生這種錯誤的原因分析:

發送端發送一個分組出去后,會啟動該分組的DATA計時器;接收方收到該分組后就會發送一個ACK數據報,并啟動一個ACK計時器。發送端收到該ACK報文之前,它會按照一定的時間間隔(由發送端的計時器決定)重發該數據塊,直到收到該數據塊的ACK報文為止。現在假設出現這么一種情況,發送端將DATA分組發送出去后,接收方收到該數據并發回一個ACK數據報,但是ACK在路上走著,并沒有丟失(只是走得很慢)。當發送端的DATA計時器到期了都還沒有收到ACK分組時,發送端就會認為DATA數據包已經丟失了,就會重發該數據報。發出去沒過多久卻收到了之前那個數據報的ACK分組。這回發送端才發送下一個數據報,這樣導致的結果就是每一個成功發送的DATA都要發送兩次,而每一個成功的ACK也要發回兩次。這一現象就稱為“魔術新手綜合癥”。

七、TFTP協議與DHCP協議

TFTP協議常與DHCP協議協同工作。TFTP協議和DHCP協議共同工作來加載一些無盤機(如無盤系統,網橋,路由器等,注意:現在的某些路由器可能有硬盤了,但是以前的沒有)的配置文件來進行一些初始化工作。當無盤機加點后,加了點的無盤機(通過在系統的ROM中固化TFTP軟件和DHCP軟件,這樣加電后就可以運行這些軟件)調用DHCP客戶進程從遠端服務器的DHCP服務器進程獲取配置文件(如IP地址和引導文件的絕對路徑名),然后無盤機再啟動TFTP客戶進程,根據前面獲取的引導文件的絕對路徑名去在相應的TFTP服務器中去讀取該引導文件的內容。

八、參考資料

以下資料度娘都有資料:
[1] 《TCP/IP詳解 卷1:協議》
[2] 《TCP/IP協議族 第4版》
[3] 《計算機網絡 第5版》
AndTFTP軟件 :http://www.wandoujia.com/apps/com.xiaoboalex.andtftp

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,057評論 6 13
  • 20.1 引言 在第15章我們看到TFTP使用了停止等待協議。數據發送方在發送下一個數據塊之前需要等待接收對已發送...
    張芳濤閱讀 883評論 0 2
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,789評論 18 139
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,083評論 0 8
  • 感恩!一邊打掃一邊聽《易經》,把抹布疊成小長條兒,能得到干凈的面,還不用常常清洗抹布,這是秋愷老師教的方法,很實用...
    梧桐70閱讀 238評論 0 0