1. 程式人生 > >java網路程式設計之TFTP(一)

java網路程式設計之TFTP(一)

**

TFTP簡單檔案傳輸協議

**
TFTP使用了UDP套接字,效率比較高,但是也要求TFTP為資料傳輸的不可靠負責。

TFTP伺服器在69埠上監聽到來的資料包,客戶端使用一個隨機的埠號

TFTP作用:許多無盤工作站使用TFTP來載入它們需要的來自伺服器的檔案。
每個資料報有一個操作碼opcode(16 bits),表示包的型別,有五種
1——RRQ——-請求讀
2——WRQ——-請求寫
3——DAT——-檔案資料
4——ACK——-確認,繼續進行傳輸
5——ERR——–發生錯誤
TFTP資料報

請求讀或寫資料報包包括操作碼(opcode)、檔名(由0位元組終止)和模式串(由0位元組終止)
文字檔案的模式是netascii ,二進位制檔案的模式是8位的二進位制組(octet)

檔案資料報文包括操作碼、塊編號、資料(0–512位元組)

ACK資料報包括操作碼、塊編號

ERR資料報包括操作碼、差錯碼、差錯資訊(由0位元組終止),用於伺服器不能處理讀請求或寫請求
的情況。在檔案傳輸的過程中的讀和寫也會導致傳送這種報文,接著停止傳輸。

TFTP的工作過程
TFTP的工作過程很像停止等待協議,傳送完一個檔案塊後就等待對方的確認,確認時應指明所確認的塊號。傳送完資料後在規定時間內收不到確認,就要重發資料PDU,傳送確認PDU的一方若在規定時間內收不到下一個檔案塊,也要重發確認PDU。這樣保證檔案的傳送不致因某一個數據報的丟失而告失敗。

客戶端需要執行的任務步驟:


1、傳送RRQ或WRQ請求到伺服器的69埠
2、等待一個數據包或者是ACK包。這個包將包含一個69以外的新埠號。
3、接收到資料包,就以ACK包響應,接收到ACK包,就傳送下一個資料包。
4、準備處理超時錯誤或者是ERR包

伺服器端需要執行的任務步驟:
1、監聽69埠上的RRQ或者WRQ請求。
2、對每一個合法請求,建立一個套接字(也可能是一個新執行緒)。對RRQ請求,以初始的資料包響應,對WRQ請求,發出對第0塊的確認。
3、接收到ACK包,以下一個資料包來響應,接收到資料包,以ACK包來響應。
4、準備處理超時錯誤或者ERR包。

相關推薦

java網路程式設計TFTP

** TFTP簡單檔案傳輸協議 ** TFTP使用了UDP套接字,效率比較高,但是也要求TFTP為資料傳輸的不可靠負責。 TFTP伺服器在69埠上監聽到來的資料包,客戶端使用一個隨機的埠號 TFTP作用:許多無盤工作站使用TFTP來載入它們需要的來

java網路程式設計面試題

1、tcp和udp的區別  TCP:是面向連線的流傳輸控制協議,具有高可靠性,確保傳輸資料的正確性,有驗證重發機制,因此不會出現丟失或亂序。 UDP:是無連線的資料報服務,不對資料報進行檢查與修改,無須等待對方的應答,會出現分組丟失、重複、亂序,但具有較好的實時性,UDP

java 併發程式設計學習筆記 併發基礎

                                              併發基礎 併發小測試 java.util.concurrent.Semaphore 類 public class SemTest { /** * Se

java 併發程式設計學習筆記 基礎框架搭建和併發模擬工具,程式碼

                                基礎框架搭建和併發模擬工具,程式碼 (1)基礎框架搭建 (2)併發模擬 (3)CountDownLatch  通常用來 保證 幾個執行緒執行完成之後,再執行其他的程式碼 Semaphore

伺服器開發linux網路程式設計---學習章節

前言:    近期學習了伺服器相關的開發,平常主要擼c的程式,所以就下定決心研究了c的伺服器開發,目的也在與鞏固c的基本知識。詳細分享如下,若有錯誤請指正,希望與大家探討,共同學習進步。                                             

JAVA基礎學習

個人理解 整形 之路 boolean mman 類型 布爾 屬性 註釋 JAVA基礎概念: PATHl: path屬於操作系統的屬性,是系統用來搜尋可執行文件的路徑,個人理解是類似於linux中的全局變量 CALSSPATH:java程序解釋類文件時加載文件的路徑 註釋

dotNet程序員的Java爬坑

是我 方法 轉java 自己的 java pri 也好 工作 計劃     仔細想了下還是轉java吧,因為後期不管是留在北京也好還是回老家也好,java的工作都會好找一點。現在的工作主要還是寫.net,目標是下一次離職的時候可以找到一份全職的java工作,我一直都覺得實踐

深入Java網路程式設計與NIO

Java NIO 與 Netty NIO NIO的特性/NIO與IO區別: 1)IO是面向流的,NIO是面向緩衝區的; 2)IO流是阻塞的,NIO流是不阻塞的; 3)NIO有選擇器,而IO沒有。 讀資料和寫資料方式: 從通道進行資料讀取 :建立一個緩衝區,然後請求通道讀取資料。

Java併發程式設計讀書筆記

  前幾天整理電腦檔案的時候,突然發現了之前還在kindle儲存了關於併發程式設計的書,剛好自己在這方面挺薄弱的,故整理一波讀書筆記,繼續加強學習。   1.上下文切換 1.1 時間片分配演算法 時間片是CPU分配給各個執行緒的時間,CPU通過不停地切換執行緒執行,使各個執行緒彷彿是”同

java併發程式設計的藝術:併發程式設計的挑戰

併發程式設計的挑戰主要是在三個方面 上下文切換 死鎖 資源限制 下面就這三個方面進行分別分析遇到的挑戰以及如何應對。 1)上下文切換      1.1 什麼是上下文切換?多執行緒一定快麼?       想了解上下文切換,我們先來了解幾個概念。我們都知道在一塊CPU

Linux 網路程式設計 全解--------網路基礎協議

寫在前面:說一下寫這個系列的目的,隨著對網路開發的深入,越來越覺得自己網路基礎知識的薄弱,雖然開發過程中不需要對網路基礎有很深入的瞭解照樣能進行,但有一些問題仍然是不知其因,所以這個系列打算從最基本的網路知識展開記錄,也是一邊學習一邊整理筆記。歡迎大家共同學習,QQ:9936

linux網路程式設計學習筆記

目錄 1. 獲取系統呼叫錯誤資訊:errno   strerror()     perror(); 他跟c語言中的fopen()有什麼區別呢?  他也呼叫的是這個open(); 2.常規檔案操作之建立、讀、寫

Java整合Sentry配置

Sentry的庫和框架整合文件說明了如何為每個受支援的整合執行初始Sentry配置。通過整合設定Sentry後,以下配置可與任何整合結合使用。在嘗試進行任何高階配置之前,請檢查整合文件。 一、設定DSN DSN是第一個也是最重要的配置,因為它告訴SDK在哪裡傳送事件。您可

C#.網路程式設計 Socket基礎Socket TCP協議 實現端到端伺服器與客戶端簡單字串通訊

簡介:        本章節主要討論了Socket的入門知識,還未針對Socket的難點問題(比如TCP的無訊息邊界問題)展開討論,往後在其他章節中進行研究。 注意點: 伺服器(比如臺式電腦)的IP為1.1.1.2,那麼客戶端(其他裝置,比如手機,Ipad)連線的一定是

java原始碼剖析socket

    不知不覺又到了新的的一週,時間在悄悄的溜走,所辛的是自己也在緩慢的推進著自己的學習計劃。      這周按照計劃檢視的是socket系列的相關類,儘管這之前就已經看過一遍,不過當時是越看越蒙,完全找不到北。 隨著自己能力的提升,回過頭來又去看一遍,還是看不懂其中的精

Linux C高階程式設計——網路程式設計UDP4

Linux網路程式設計——UDP 宗旨:技術的學習是有限的,分享的精神是無限的。 下面分析一幀基於UDP的TFTP協議幀。 乙太網首部 0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部0000: 45 00 00

Linux C高階程式設計——網路程式設計乙太網2

Linux網路程式設計——乙太網 宗旨:技術的學習是有限的,分享的精神是無限的。 1、乙太網幀格式         源地址和目的地址是指網絡卡的硬體地址(也叫MAC地址),長度是48位,是在網絡卡出廠時固化的。用ifconfig命令檢視,“ 硬體地址 00:0c:29

Linux C高階程式設計——網路程式設計API5

Linux C網路程式設計——API 宗旨:技術的學習是有限的,分享的精神的無限的。 一、基本socket函式         Linux系統是通過提供套接字(socket)來進行網路程式設計的。網路的socket資料傳輸是一種特殊的I/O,socket也是一種檔案描述

Linux C高階程式設計——網路程式設計TCP3

Linux網路程式設計(三)——TCP 宗旨:技術的學習是有限的,分享的精神是無限的。 1、TCP段格式         和UDP協議一樣也有源埠號和目的埠號,通訊的雙方由IP地址和埠號標識。32位序號、32位確認序號、視窗大小。4位首部長度和IP協議頭類似,表示TCP協議頭的長度,以4位元組為單位,

Java架構師

夜光序言:   如果世界和你,都掉進了河裡,我一定先救你,然後忘記世界的呼吸~       正文: MVC框架的演變   我們安裝這個外掛解決沒有tomcat的問題,因為targ