TFTP包

来源:互联网 发布:get软件是真鞋么 编辑:程序博客网 时间:2024/05/10 03:50

TFTP支持五种类型的包,我们在以上已经说明这五种类型的包

opcode operation

1Read request (RRQ)

2Write request (WRQ)

3Data(DATA)

4Acknowledgment(ACK)

5Error(ERROR)

包头中包括了这个包所指定的操作码。

--------------------------------------------

| 2 Bytes| string   |1 byte| string| 1 byte|

| Opcode | Filename | 0    | Mode  | 0    |

--------------------------------------------

Figure 5-1: RRQ/WRQ

RRQWRQ包(代码分别为12的格式如上所示。

FilenameNETASCII码字符, 0结束

MODE包括字符串"netascii""octet""mail",名称不分大小写,0结束

l       接收到NETASCII格式数据的主机必须将数据转换为本地格式

l       OCTET模式用于传输文件,这种文件在源机上以8位格式存储。假设每个机器都存在一个8位的格式,这样的假设是最一般的。比如 DEC-20,这是一种36位机,我们可以假设它是48位外加另外4位而构成。如果机器收到OCTET格式文件,返回时必须与原来文件完全一样。

l       在使用MAIL模式时,用户可以在FILE处使用接收人地址,这个地址可以是用户名或用户名@主机的形式,如果是后一种形式,允许主机使用电子邮件传输此文件。

如果使用MAIL类型,包必须以WRQ开始,否则它与NETASCII完全一样。我们的讨论建立在发送方和接收方都在相同模式的情况下,但是双方可以以不同的模式进行传输。例如一个机器可以是一台存储服务器,这样一台服务器需要将NETASCII格式转换为自己的格式。另外,我们可以设想DEC-20这种机器,它使用36位字长,用户这边可以使用特殊的机制一次读取36位,而服务器却可以仍然使用8位格式。在这两种情况下,我们看到了两台机器使用不同格式的情况。可以在两台主机间定义其它的传输方式,但是定义要小心,因为这种传输方式不为人知,而且也没有权威机构为其指定名称或定义它的模式。

 

blksize 1462

-------------------------------------------------------------------

|optcode| filename |mode        opt1       |       opt2        |

-------------------------------------------------------------------

|     | zImage\0 | octet\0 | timeout\0 5 \0 | blksize\0 1462 \0 |

-------------------------------------------------------------------

注意:optcode占用2bytes,如果不带扩展选项,opt1,opt2就不需要添加了。如果使用扩展选项,每个扩展选项NULL结束.

 

----------------------------

| 2 Bytes| 2 bytes | n byte|

| Opcode | Block # | Data  |

----------------------------

Figure 5-2: DATA

数据在数据包中传输,其格式如上图所示。数据包的OP码为3,它还包括有一个数据块号和数据。数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。数据域从0字节到512字节。如果数据域是512字节则它不是 最后一个包,如果小于512字节则表示这个包是最后一个包。除了ACK和用于中断的包外,其它的包均得到确认。发出新的数据包等于确认上次的包。WRQ DATA包由ACKERROR数据包确认,而RRQ数据包由DATAERROR数据包确认。下图即是一个ACK包,操作码为4。其中的包号为要确认的数据包的包号。

--------------------

| 2 Bytes| 2 bytes |

| Opcode | Block # |

--------------------

Figure 5-3: ACK

WRQ数据包被ACK数据包确认,它的操作码是4WRQ数据包的包号为0

--------------------------------------

| 2 Bytes| 2 bytes   | string |1 byte|

| Opcode | ErrorCode | ErrMsg | 0    |

--------------------------------------

Figure 5-4: ERROR

一个ERROR包,它的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义在附录中。错误信息是供程序员使用的。
0 0