TFTP客戶端
1. TFTP協(xié)議介紹
TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)
是TCP/IP協(xié)議族中的一個(gè)用來在客戶端與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸?shù)膮f(xié)議
特點(diǎn):
·簡(jiǎn)單
·占用資源小
·適合傳遞小文件
·適合在局域網(wǎng)進(jìn)行傳遞
·端口號(hào)為69
·基于UDP實(shí)現(xiàn)
2. TFTP下載過程
TFTP服務(wù)器默認(rèn)監(jiān)聽69號(hào)端口
當(dāng)客戶端發(fā)送“下載”請(qǐng)求(即讀請(qǐng)求)時(shí),需要向服務(wù)器的69端口發(fā)送
服務(wù)器若批準(zhǔn)此請(qǐng)求,則使用一個(gè)新的、臨時(shí)的 端口進(jìn)行數(shù)據(jù)傳輸
??

當(dāng)服務(wù)器找到需要現(xiàn)在的文件后,會(huì)立刻打開文件,把文件中的數(shù)據(jù)通過TFTP協(xié)議發(fā)送給客戶端
如果文件的總大小較大(比如3M),那么服務(wù)器分多次發(fā)送,每次會(huì)從文件中讀取512個(gè)字節(jié)的數(shù)據(jù)發(fā)送過來
因?yàn)榘l(fā)送的次數(shù)有可能會(huì)很多,所以為了讓客戶端對(duì)接收到的數(shù)據(jù)進(jìn)行排序,所以在服務(wù)器發(fā)送那512個(gè)字節(jié)數(shù)據(jù)的時(shí)候,會(huì)多發(fā)2個(gè)字節(jié)的數(shù)據(jù),用來存放序號(hào),并且放在512個(gè)字節(jié)數(shù)據(jù)的前面,序號(hào)是從1開始的
因?yàn)樾枰獜姆?wù)器上下載文件時(shí),文件可能不存在,那么此時(shí)服務(wù)器就會(huì)發(fā)送一個(gè)錯(cuò)誤的信息過來,為了區(qū)分服務(wù)發(fā)送的是文件內(nèi)容還是錯(cuò)誤的提示信息,所以又用了2個(gè)字節(jié) 來表示這個(gè)數(shù)據(jù)包的功能(稱為操作碼),并且在序號(hào)的前面

因?yàn)閡dp的數(shù)據(jù)包不安全,即發(fā)送方發(fā)送是否成功不能確定,所以TFTP協(xié)議中規(guī)定,為了讓服務(wù)器知道客戶端已經(jīng)接收到了剛剛發(fā)送的那個(gè)數(shù)據(jù)包,所以當(dāng)客戶端接收到一個(gè)數(shù)據(jù)包的時(shí)候需要向服務(wù)器進(jìn)行發(fā)送確認(rèn)信息,即發(fā)送收到了,這樣的包成為ACK(應(yīng)答包)
為了標(biāo)記數(shù)據(jù)已經(jīng)發(fā)送完畢,所以規(guī)定,當(dāng)客戶端接收到的數(shù)據(jù)小于516(2字節(jié)操作碼+2個(gè)字節(jié)的序號(hào)+512字節(jié)數(shù)據(jù))時(shí),就意味著服務(wù)器發(fā)送完畢了
TFTP數(shù)據(jù)包的格式如下:

參考代碼如下

