自己動手學TCP IP tftp協議

2021-08-26 22:45:01 字數 1763 閱讀 4796

tftp(trivial file transfer protocol,簡單檔案傳輸協議)

1.tftp的服務埠號是69

2.tftp是基於udp協議的

3.tftp是明文傳輸的,是一種比較輕量型的協議,一般用於bootloader載入核心

tftp工作流程

服務端開啟tftp服務,tftp是一種stand_alone服務,不是常駐記憶體的,是在有需要的時候才去呼叫的。首先,客戶端傳送乙個讀(rrq:2個位元組)或者寫(wrq:2個位元組)的請求,資料報的目標埠是69。對於讀或者寫的報文格式如下:

rrq/wrq(2個位元組)+檔名(n位元組)+0(1位元組)+模式(n位元組)+0(1位元組)

目前模式字段主要有2種:netascii,這是8位的ascii碼形式;另一種是octet,這是8位源資料型別。對於netascii是把回車和換行(cr/lf)解釋成兩個位元組的。可以檢視

tftp-server接收到資料報:如果是發現是讀(rrq),就重新隨機分配乙個埠,直接傳送資料(data:2個位元組)+塊編號(2個位元組),然後是0~512位元組資料報。客戶端接收到資料報,發給服務端(ack:2個位元組)+塊編號(2個位元組)。如果是普通的資料報,那麼資料段的大小一定是512位元組,如果是最後乙個資料報,肯定是小於512位元組的。tftp就是通過發現了乙個資料段小於512位元組的資料報來宣告結束檔案的傳輸了。那麼乙個要傳輸的檔案剛還是512位元組的整數倍怎麼辦呢?tftp會在最後傳輸乙個資料段大小是0包。

tftp-server接收到資料報:如果發現是寫(wrq),服務端就發回(ack:2個位元組)+(塊編號0:2個位元組)的包,接著客戶端就傳送(data:2個位元組)+(塊編號1:2個位元組)+資料段給服務端,服務端發回(ack:2個位元組)+(塊編號1:2個位元組)。。。依次傳送。

錯誤資訊是系統自定義的,格式主要是error(2個位元組)+錯誤碼(2個位元組)+錯誤資訊(n個位元組)

下面是tftp資料報的格式圖

下面是c語言解析tftp包的一小段**:

struct  tftphdr  __attribute__ ((__packed__)) th_u;

char th_data[1]; /* data or error string */

} __attribute__ ((__packed__));

// 解析udp包,packet_buffer是用rawsocket抓出來的乙太網包,

void parseu***acket(unsigned char *packet_buffer)

/** print trivial file transfer program requests

*/void tftp_print(register const u_char *bp, u_int length)

; tp = (const struct tftphdr *)bp;

// printf(" %d", length);

// printf("length of tftp_data = %d\n",length);

/* print tftp request type */

opcode = extract_16bits(&tp->th_opcode);

printf(" %s",tok2str(op2str, "tftp-#%d", opcode));

/* bail if bogus opcode */

switch (opcode)

return;

}

詳細的可以檢視tcpdump的原始碼。

自己動手學Remoting 一

using system using system.collections.generic using system.text using system.runtime.remoting using system.runtime.remoting.channels using system.runt...

動手學深度學習

線性回歸的基本要素 模型 為了簡單起見,這裡我們假設 只取決於房屋狀況的兩個因素,即面積 平方公尺 和房齡 年 接下來我們希望探索 與這兩個因素的具體關係。線性回歸假設輸出與各個輸入之間是線性關係 price warea area wage age b price warea area wage a...

自己動手編寫 IronPython IDE

這段時間對ironpython充滿了極大的興趣,學習越深入,越感覺到現有ironpython ide實在不太好用,正好專案中也需要乙個ironpython編輯器,所以就動手做了起來。整整花費了我三天的時間 熬了幾個通宵 總算有了點成果,不過在除錯方面還是存在不足。支援錯誤定位,不過效果不是很好,對開...