tftp文件傳(chuan)輸協議(yi)詳解
時(shi)間:2018-07-30 來源:未知
TFTP是(shi)一個傳輸(shu)文件(jian)的簡(jian)單協議,它基(ji)于UDP協議而實(shi)現,但是(shi)我們也不能確定有些TFTP協議是(shi)基(ji)于其它傳輸(shu)協議完成(cheng)的。
此(ci)協(xie)議設計的(de)(de)時候(hou)是進行小(xiao)文件傳輸的(de)(de)。因此(ci)它(ta)不(bu)具備通常的(de)(de)FTP的(de)(de)許多(duo)功能(neng),它(ta)只能(neng)從文件服務器上獲(huo)得或寫入文件,
不能列出(chu)目錄(lu),不進行認證,它傳(chuan)輸8位(wei)(wei)數(shu)據。傳(chuan)輸中有三種模(mo)式(shi):netascii,這是8位(wei)(wei)的(de)ASCII碼形式(shi),另一種是octet,
這是8位源數(shu)據類型;最后一(yi)種mail已經不再支持(chi),它(ta)將返回(hui)的數(shu)據直接(jie)返回(hui)給用(yong)戶而不是保存為文件。
任何傳輸起(qi)自(zi)一(yi)個讀取或(huo)寫入(ru)文件的(de)請(qing)求(qiu)(qiu)(qiu),這個請(qing)求(qiu)(qiu)(qiu)也是連接(jie)(jie)請(qing)求(qiu)(qiu)(qiu)。如果(guo)服務(wu)器批準(zhun)此(ci)請(qing)求(qiu)(qiu)(qiu),則服務(wu)器打開連接(jie)(jie),
數(shu)(shu)據(ju)以(yi)(yi)定長512字節傳輸。每個數(shu)(shu)據(ju)包(bao)(bao)包(bao)(bao)括(kuo)一塊數(shu)(shu)據(ju),服務器發出下(xia)一個數(shu)(shu)據(ju)包(bao)(bao)以(yi)(yi)前必須得到客戶(hu)對上(shang)一個數(shu)(shu)據(ju)包(bao)(bao)的確(que)認。
如果(guo)一個(ge)數據包的大(da)小小于512字(zi)節(jie),則表示傳(chuan)輸(shu)結束(shu)。如果(guo)數據包在傳(chuan)輸(shu)過(guo)程中丟失,
發出方會(hui)在超時后(hou)(hou)重新(xin)傳輸最(zui)后(hou)(hou)一(yi)個未(wei)被確認的(de)數(shu)(shu)據(ju)包。通信(xin)的(de)雙方都(dou)是數(shu)(shu)據(ju)的(de)發出者與接收(shou)(shou)者,一(yi)方傳輸數(shu)(shu)據(ju)接收(shou)(shou)應(ying)答(da),
另一方發出應答(da)接收數(shu)據。大部分的錯誤會(hui)(hui)導(dao)致連接中(zhong)斷,錯誤由一個錯誤的數(shu)據包(bao)引起。這個包(bao)不會(hui)(hui)被確認,
也(ye)不會被重新發(fa)送(song),因此(ci)另一方無法接收(shou)到。如果錯誤包丟失,則使用超時(shi)機制。錯誤主要是由下面三(san)種(zhong)情(qing)況引起的:
不(bu)能(neng)滿(man)(man)足(zu)請求,收到的數據包內容錯誤(wu),而這種錯誤(wu)不(bu)能(neng)由延時或重發解(jie)釋,對需要資源的訪問丟失(如硬盤(pan)滿(man)(man))。
TFTP只在一種情況(kuang)下(xia)不(bu)中斷(duan)連(lian)接(jie),這(zhe)種情況(kuang)是源端口不(bu)正確,在這(zhe)種情況(kuang)下(xia),指示錯誤的包會被(bei)發(fa)送(song)到源機。
這個協議限(xian)制很多,這些都是為(wei)了實現起來(lai)比較方(fang)便(bian)而進行(xing)的。
TFTP是一個簡單(dan)的協(xie)議,適(shi)合于只(zhi)讀存儲器,僅用于無盤系(xi)統進行(xing)系(xi)統引(yin)導,它(ta)只(zhi)使用幾種(zhong)報文格式,是一種(zhong)停止等待協(xie)議
特點:
1、簡單
2、占用(yong)資源小
3、適合傳遞(di)小(xiao)文件
4、適(shi)合(he)在局域(yu)網(wang)進行傳遞
5、端(duan)口(kou)號為69
6、基于(yu)UDP實現
缺陷:
TFTP分組(zu)中并不提供用(yong)戶名(ming)和(he)口令。這是TFTP的一個特(te)性(即(ji)"安全(quan)漏洞")。由于TFTP是設計(ji)用(yong)于系統引導進(jin)程,它不可(ke)能提供用(yong)戶名(ming)和(he)口令。
目前大多數TFTP服(fu)務(wu)器提供了(le)一個(ge)選項來限制只能訪問特定目錄下的文(wen)件(jian),這個(ge)目錄中只包(bao)含無盤系統(tong)進行系統(tong)引導時所需的文(wen)件(jian)
當服務器(qi)找到需要現(xian)在的(de)(de)文(wen)(wen)件后,會立(li)刻打開文(wen)(wen)件,把(ba)文(wen)(wen)件中的(de)(de)數(shu)據通過TFTP協(xie)議發送給(gei)客戶端
如果文件的(de)總大小較(jiao)大(比如3M),那么服務(wu)器分多(duo)次(ci)發送,每(mei)次(ci)會從文件中讀(du)取512個(ge)字節的(de)數(shu)據發送過來
因為(wei)發送的(de)次數(shu)(shu)有(you)可能會很多,所以為(wei)了讓客(ke)戶端對接收到(dao)的(de)數(shu)(shu)據(ju)(ju)進行(xing)排序(xu),所以在(zai)(zai)服(fu)務器發送那(nei)512個(ge)字節數(shu)(shu)據(ju)(ju)的(de)時候,會多發2個(ge)字節的(de)數(shu)(shu)據(ju)(ju),用(yong)來存放(fang)序(xu)號,并且放(fang)在(zai)(zai)512個(ge)字節數(shu)(shu)據(ju)(ju)的(de)前面,序(xu)號是從1開始(shi)的(de)
因為需(xu)要從服(fu)務器(qi)上下載文(wen)件時,文(wen)件可能(neng)不存在(zai)(zai),那么此時服(fu)務器(qi)就會發送(song)一個錯誤(wu)的(de)(de)信息過來,為了區分服(fu)務發送(song)的(de)(de)是(shi)文(wen)件內容還是(shi)錯誤(wu)的(de)(de)提示信息,所以(yi)又用了2個字(zi)節 來表示這個數據包的(de)(de)功能(neng)(稱(cheng)為操作碼),并且在(zai)(zai)序號的(de)(de)前面。
為了允(yun)許多個(ge)(ge)客(ke)(ke)戶端同(tong)時進(jin)行系統引導(dao),TFTP服(fu)(fu)務器(qi)必須提供(gong)一定形式(shi)的并發(fa)。因為UDP在一個(ge)(ge)客(ke)(ke)戶與一個(ge)(ge)服(fu)(fu)務器(qi)之間并不(bu)提供(gong)唯一連接,TFTP服(fu)(fu)務通過對每個(ge)(ge)客(ke)(ke)戶提供(gong)一個(ge)(ge)新的UDP端口來提供(gong)并發(fa)。這樣允(yun)許不(bu)同(tong)的客(ke)(ke)戶輸入數據報,然后由(you)服(fu)(fu)務器(qi)中的UDP模(mo)塊根據目的端口號進(jin)行區分(fen),而不(bu)是由(you)服(fu)(fu)務器(qi)本身來進(jin)行區分(fen)。
因為(wei)udp的(de)數據(ju)包不安全,即發送(song)(song)方發送(song)(song)是否成(cheng)功(gong)不能確(que)定,所以TFTP協議中(zhong)規定,為(wei)了(le)(le)讓服務器知道客(ke)戶端(duan)已經接收到了(le)(le)剛剛發送(song)(song)的(de)那個數據(ju)包,所以當客(ke)戶端(duan)接收到一個數據(ju)包的(de)時候(hou)需要向服務器進行發送(song)(song)確(que)認信息,即發送(song)(song)收到了(le)(le),這(zhe)樣的(de)包成(cheng)為(wei)ACK(應答包)
為了標(biao)記數據(ju)已(yi)經發送完畢,所以規定,當客戶(hu)端接(jie)收到的數據(ju)小于516(2字節操(cao)作碼+2個字節的序號+512字節數據(ju))時,就(jiu)意味著服務器(qi)發送完畢了