TFTP簡單傳輸協(xié)議了解

一、TFTP簡介

1.定義

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

2.優(yōu)點(diǎn)

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

二、TFTP傳輸過程描述

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

三、功能總結(jié)

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

四、TFTP五種報文(重點(diǎn))

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

包文件

RRQ/WRQ報文:

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

DATA報文:

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

ACK報文:

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

EEROR報文:

ERROR報文既可以有客戶發(fā)送,也可以由服務(wù)器發(fā)送,當(dāng)一條連接(如讀連接或?qū)戇B接)不能建立或在數(shù)據(jù)傳輸中出現(xiàn)問題時使用。差錯碼定義了差錯的類型,差錯信息是一個可變字節(jié),包含原文中的差錯數(shù)據(jù)。

注意:

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

五、流量控制

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

六、差錯控制

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

差錯控制常用于這四種情況:報文受損、報文丟失、確認(rèn)丟失和報文重復(fù)。

報文受損:

當(dāng)數(shù)據(jù)塊出現(xiàn)差錯(通過差錯檢驗,得靠UDP首部)時,接收端能夠檢測出來并丟棄該報文。發(fā)送端等待確認(rèn),超時后就重傳該數(shù)據(jù)報。

報文丟失:

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

報文重復(fù):

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

數(shù)據(jù)分組發(fā)生這種錯誤的原因分析:

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

七、TFTP協(xié)議與DHCP協(xié)議

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

八、參考資料

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,417評論 6 13
  • 20.1 引言 在第15章我們看到TFTP使用了停止等待協(xié)議。數(shù)據(jù)發(fā)送方在發(fā)送下一個數(shù)據(jù)塊之前需要等待接收對已發(fā)送...
    張芳濤閱讀 936評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • 個人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 感恩!一邊打掃一邊聽《易經(jīng)》,把抹布疊成小長條兒,能得到干凈的面,還不用常常清洗抹布,這是秋愷老師教的方法,很實用...
    梧桐70閱讀 270評論 0 0

友情鏈接更多精彩內(nèi)容