tftp(trival file transfer protocal,簡單檔案傳輸協議)該協議在熟知埠69上使用udp服務。tftp協議常用於無盤工作站或路由器從別的主機上獲取引導配置檔案,由於tftp報文比較小,能夠迅速複製這些檔案。
(1).tftp協議**所占用的記憶體小,其對應的軟體也很小,所以能個很容易地放入到無盤工作站的rom中。
(2).tftp支援ascii碼或二進位制傳送。
以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五種報文分別是:rrq,wrq,data,ack和error。
模式欄位中,包含兩種字串中的一種,"netascii"表示ascii檔案,"octet"表示二進位制檔案;對於rrq,客戶向tftp伺服器傳送讀請求後,伺服器返回乙個塊編號為1的data報文;而對於wrq,客戶向tftp伺服器傳送寫請求後,伺服器返回的是塊編號為1的ack報文。總之,不管是rrq還是wrq,接收data資料的一方(讀者)傳送ack確認,而傳送data資料(寫者)的只負責傳送資料。
由客戶或伺服器使用(由寫者傳送),用於傳送資料塊。所有的塊都用數字順序編碼,從1開始。在所有的data報文中,這個塊必須準確地等於512b,但最後乙個塊可以小於或等於512b。當傳送的data報文中資料部分的長度小於512b後,表示data報文傳送完畢,所以小於資料部分512b的data資料報可以作為檔案結束的標誌。特殊的情況是,當檔案中的資料正好是512b的整數倍時,那麼傳送端必須再傳送乙個具有資料部分為0b的額外的data資料塊以表示傳輸的結束。資料可以採用ascii碼或二進位製組來傳送。
塊號表示它所收到的塊號(不是下乙個期待的塊號哈,這與tcp中的ack序號不同)。特殊情況是,當客戶向伺服器傳送乙個wrq請求後,伺服器返回給客戶的是乙個塊號為0的ack報文,表示伺服器已經準備好了接收來自客戶的資料報。
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報文。
差錯控制常用於這四種情況:報文受損、報文丟失、確認丟失和報文重複。
資料分組發生這種錯誤的原因分析:傳送端傳送乙個分組出去後,會啟動該分組的data計時器;接收方收到該分組後就會傳送乙個ack資料報,並啟動乙個ack計時器。傳送端收到該ack報文之前,它會按照一定的時間間隔(由傳送端的計時器決定)重發該資料塊,直到收到該資料塊的ack報文為止。現在假設出現這麼一種情況,傳送端將data分組傳送出去後,接收方收到該資料並發回乙個ack資料報,但是ack在路上走著,並沒有丟失(只是走得很慢)。當傳送端的data計時器到期了都還沒有收到ack分組時,傳送端就會認為data資料報已經丟失了,就會重發該資料報。發出去沒過多久卻收到了之前那個資料報的ack分組。這回傳送端才傳送下乙個資料報,這樣導致的結果就是每乙個成功傳送的data都要傳送兩次,而每乙個成功的ack也要發回兩次。這一現象就稱為「魔術新手綜合症」。
tftp協議常與dhcp協議協同工作。tftp協議和dhcp協議共同工作來載入一些無盤機(如無盤系統,網橋,路由器等,注意:現在的某些路由器可能有硬碟了,但是以前的沒有)的配置檔案來進行一些初始化工作。當無盤機加點後,加了點的無盤機(通過在系統的rom中固化tftp軟體和dhcp軟體,這樣加電後就可以執行這些軟體)呼叫dhcp客戶程序從遠端伺服器的dhcp伺服器程序獲取配置檔案(如ip位址和引導檔案的絕對路徑名),然後無盤機再啟動tftp客戶程序,根據前面獲取的引導檔案的絕對路徑名去在相應的tftp伺服器中去讀取該引導檔案的內容。
以下資料度娘都有資料:
[1] 《tcp/ip詳解 卷1:協議》
[2] 《tcp/ip協議族 第4版》
[3] 《計算機網路 第5版》
tftp 簡單文字傳輸協議
tftp trival file transfer protocal 簡單檔案傳輸協議,該協議在熟知埠69上使用udp服務。tftp協議常用於無盤工作站或路由器從別的主機上獲取引導配置檔案,由於tftp報文比較小,能個迅速複製這些檔案。notice 1 tftp協議 所占用的記憶體小,其對應的軟體也...
tftp簡單文字傳輸協議
tftp trivial file transfer protocol,簡單檔案傳輸協議 是tcp ip協議族中的乙個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,基於udp實現。提供不複雜 開銷不大的檔案傳輸服務。埠號為69。2.tftp的報文格式,如圖所示 圖中顯示了5種tftp報文格式 操作...
TFTP 簡單檔案傳輸協議
1.tftp trivial file transfer protocol 簡單檔案傳輸協議 與ftp不同的是,它使用的是udp的69埠,因此它可以穿越許多防火牆。不過它也有缺點,比如傳送不可靠 沒有密碼驗證等。非常適合傳送小型檔案的 2.配置tftp ecgl linux 自帶 tftp serv...