TFTP(TrivialFileTransferProtocol)即簡(jiǎn)單文件傳送協(xié)議,最初打算用于引導(dǎo)無(wú)盤(pán)系統(tǒng)(通常是工作站或X終端)。和將在第27章介紹的使用TCP的文件傳送協(xié)議(FTP)不同,為了保持簡(jiǎn)單和短小,TFTP將使用UDP。TFTP的代碼(和它所需要的UDP、IP和設(shè)備驅(qū)動(dòng)程序)都能適合只讀存儲(chǔ)器。
(BootstrapProtocol)中還會(huì)遇到TFTP。在圖5-1中,當(dāng)從網(wǎng)絡(luò)上引導(dǎo)sun主機(jī)時(shí),也曾遇到過(guò)TFTP,sun主機(jī)通過(guò)RARP獲得它的IP地址后,將發(fā)出一個(gè)TFTP請(qǐng)求。RFC1350[Sollins1992]是第2版TFTP的正式規(guī)范。第12章[Stevens1990]提供了實(shí)現(xiàn)TFTP客戶(hù)和服務(wù)器的全部源代碼,并介紹了一些使用TFTP的編程技術(shù)。
協(xié)議
在開(kāi)始工作時(shí),TFTP的客戶(hù)與服務(wù)器交換信息,客戶(hù)發(fā)送一個(gè)讀請(qǐng)求或?qū)懻?qǐng)求給服務(wù)器。在一個(gè)無(wú)盤(pán)系統(tǒng)進(jìn)行系統(tǒng)引導(dǎo)的正常情況下,第一個(gè)請(qǐng)求是讀請(qǐng)求(RRQ)。下圖顯示了5種TFTP報(bào)文格式(操作碼為1和2的報(bào)文使用相同的格式)。
TFTP報(bào)文的頭兩個(gè)字節(jié)表示操作碼。對(duì)于讀請(qǐng)求和寫(xiě)請(qǐng)求(WRQ),文件名字段說(shuō)明客戶(hù)要讀或?qū)懙奈挥诜?wù)器上的文件。這個(gè)文件字段以0字節(jié)作為結(jié)束(見(jiàn)圖15-1)。模式字段是一個(gè)ASCII碼串netascii或octet(可大小寫(xiě)任意組合),同樣以0字節(jié)結(jié)束。netascii表示數(shù)據(jù)是以成行的ASCII碼字符組成,以?xún)蓚€(gè)字節(jié)—回車(chē)字符后跟換行字符(稱(chēng)為CR/LF)作為行結(jié)束符。這兩個(gè)行結(jié)束字符在這種格式和本地主機(jī)使用的行定界符之間進(jìn)行轉(zhuǎn)化。octet則將數(shù)據(jù)看作8bit一組的字節(jié)流而不作任何解釋。
每個(gè)數(shù)據(jù)分組包含一個(gè)塊編號(hào)字段,它以后要在確認(rèn)分組中使用。以讀一個(gè)文件作為例子,TFTP客戶(hù)需要發(fā)送一個(gè)讀請(qǐng)求說(shuō)明要讀的文件名和文件模式(mode)。如果這個(gè)文件能被這個(gè)客戶(hù)讀取,TFTP服務(wù)器就返回一個(gè)塊編號(hào)為1的數(shù)據(jù)分組。TFTP客戶(hù)又發(fā)送一個(gè)塊編號(hào)為1的ACK。TFTP服務(wù)器隨后發(fā)送塊編號(hào)為2的數(shù)據(jù)。TFTP客戶(hù)發(fā)回塊編號(hào)為2的ACK。重復(fù)這個(gè)過(guò)程直到這個(gè)文件傳送完。除了最后一個(gè)數(shù)據(jù)分組可含有不足512字節(jié)的數(shù)據(jù),其他每個(gè)數(shù)據(jù)分組均含有512字節(jié)的數(shù)據(jù)。當(dāng)TFTP客戶(hù)收到一個(gè)不足512字節(jié)的數(shù)據(jù)分組,就知道它收到最后一個(gè)數(shù)據(jù)分組。
在寫(xiě)請(qǐng)求的情況下,TFTP客戶(hù)發(fā)送WRQ指明文件名和模式。如果該文件能被該客戶(hù)寫(xiě),TFTP服務(wù)器就返回塊編號(hào)為0的ACK包。該客戶(hù)就將文件的頭512字節(jié)以塊編號(hào)為1發(fā)出。服務(wù)器則返回塊編號(hào)為1的ACK。
這種類(lèi)型的數(shù)據(jù)傳輸稱(chēng)為停止等待協(xié)議。它只用在一些簡(jiǎn)單的協(xié)議如TFTP中。在20.3節(jié)中將看到TCP提供了不同形式的確認(rèn),能提供更高的系統(tǒng)吞吐量。TFTP的優(yōu)點(diǎn)在于實(shí)現(xiàn)的簡(jiǎn)單而不是高的系統(tǒng)吞吐量
最后一種TFTP報(bào)文類(lèi)型是差錯(cuò)報(bào)文,它的操作碼為5。它用于服務(wù)器不能處理讀請(qǐng)求或?qū)懻?qǐng)求的情況。在文件傳輸過(guò)程中的讀和寫(xiě)差錯(cuò)也會(huì)導(dǎo)致傳送這種報(bào)文,接著停止傳輸。差錯(cuò)編號(hào)字段給出一個(gè)數(shù)字的差錯(cuò)碼,跟著是一個(gè)ASCII表示的差錯(cuò)報(bào)文字段,可能包含額外的操作系統(tǒng)說(shuō)明的信息。
既然TFTP使用不可靠的UDP,TFTP就必須處理分組丟失和分組重復(fù)。分組丟失可通過(guò)發(fā)送方的超時(shí)與重傳機(jī)制解決(注意存在一種稱(chēng)為“魔術(shù)新手綜合癥(sorcerer’sapprenticesyndrome)”的潛在問(wèn)題,如果雙方都超時(shí)與重傳,就可能出現(xiàn)這個(gè)問(wèn)題。12.2節(jié)[Stevens1990]介紹了這個(gè)問(wèn)題是如何發(fā)生的)。和許多UDP應(yīng)用程序一樣,TFTP報(bào)文中沒(méi)有檢驗(yàn)和,它假定任何數(shù)據(jù)差錯(cuò)都將被UDP的檢驗(yàn)和檢測(cè)到
眾信咨詢(xún):互聯(lián)網(wǎng)資質(zhì)代理誠(chéng)信品牌