TFTP通信原理
TFTP的通信流程
TFTP共定義了五種類型的包格式,格式的區分由包數據前兩個字節的Opcode字段區分,分別是:
·?l?讀文件請求包:Read?request,簡寫為RRQ,對應Opcode字段值為1
·?l?寫文件請求包:Write?requst,簡寫為WRQ,對應Opcode字段值為2
·?l?文件數據包:Data,簡寫為DATA,對應Opcode字段值為3
·?l?回應包:Acknowledgement,簡寫為ACK,對應Opcode字段值為4
·?l?錯誤信息包:Error,簡寫為ERROR,對應Opcode字段值為5
1、由客戶端發起讀文件/寫文件的請求,同時可以進行請求連接
2、服務器監聽到請求,打開連接,并向客戶端發送文件,以每個定長為512字節的塊進行發送。每個數據包包含一個數據塊,在發送下一個包的時候必須被客戶端確認回應一個回應包。
3、當發現某個數據包小于512個字節,說明傳輸終止。
4、如果出現網絡丟包,收件方(客戶端)會超時,并且重傳最后的接收包(可以是數據包或者回應包),因此這將可以讓發送者重新發送丟失包。當之前的包已經接受成功之后,發送者只需要保持一個重傳包。注意?發送者?要做的事情:發送數據,接受?回應包;接受者要做的:發送回應包,接受數據。如下圖所示:
讀請求和寫請求的回應是不一樣的下圖是讀請求
?
有許多的錯誤會造成連接中斷.
1、發送錯誤的包,這個包沒有回應,也沒有重發,(例如,TFTP服務器或者客戶端會因為收到錯誤的信息終止)這樣導致對方接受不到。所以引入了超時機制。通常錯誤由3種情況導致:
?(1)、不能滿足請求的內容(例如:文件找不到,不允許接入,或者用戶不存在)
(2)、由于網絡延遲或者重置導致正在接收的包無法解析(例如包的格式不正確)
(3)、必須訪問資源丟失(例如磁盤滿了,或者傳輸過程中拒絕訪問)
TFTP意識到僅有一個錯誤條件是不會導致中斷的,那就是接收包的源端口不正確。在這種情況下會向原始的服務器發一個錯誤包。
為了簡單的實現,TFTP協議非常的有限。例如:固定大小的塊可以使得分配空間更直接,在鎖定等待回應包可以方便控制流并且不需要重排接到的數據包
?
錯誤碼
???值??????????表示意思
???0?????????未定義Not?defined,?see?error?message?(if?any).
???1?????????文件找不到File?not?found.
???2?????????拒絕訪問Access?violation.
???3?????????磁盤滿了或者超出了可分配空間Disk?full?or?allocation?exceeded.
???4?????????非法TFTIllegal?TFTP?operation.
???5?????????傳輸ID未知Unknown?transfer?ID.
???6?????????文件不存在File?already?exists.
???7?????????沒有該用戶No?such?user.
?
轉載于:https://www.cnblogs.com/sexyboy/p/8509625.html
總結
- 上一篇: spring boot mybatis没
- 下一篇: CCCC L2 007 家庭房产 并查集