跳到主要内容

2. Overview of the Protocol (协议概述)

任何传输都以读取或写入文件的请求开始, 该请求同时也用于请求连接. 如果服务器批准请求, 则连接被打开, 文件以 512 字节的固定长度块发送. 每个数据包包含一个数据块, 并且必须在发送下一个数据包之前由确认包 (acknowledgment packet) 确认. 少于 512 字节的数据包表示传输终止. 如果数据包在网络中丢失, 预期接收方将超时并可能重传其最后一个数据包 (可能是数据或确认), 从而导致丢失数据包的发送方重传该丢失的数据包. 发送方只需保留一个数据包用于重传, 因为锁步确认 (lock step acknowledgment) 保证所有较旧的数据包都已被接收. 注意, 传输中涉及的两台机器都被视为发送方和接收方. 一台发送数据并接收确认, 另一台发送确认并接收数据.

大多数错误会导致连接终止. 错误通过发送错误数据包 (error packet) 来表示. 该数据包不被确认, 也不被重传 (即, TFTP 服务器或用户可以在发送错误消息后终止), 因此连接的另一端可能无法收到它. 因此, 当错误数据包丢失时, 使用超时来检测此类终止. 错误由三类事件引起: 无法满足请求 (例如, 文件未找到, 访问违规, 或没有此类用户), 接收到无法用网络中的延迟或重复来解释的数据包 (例如, 格式不正确的数据包), 以及失去对必要资源的访问 (例如, 传输期间磁盘已满或访问被拒绝).

TFTP 只识别一种不会导致终止的错误条件, 即接收到的数据包的源端口不正确. 在这种情况下, 错误数据包被发送到原始主机.

该协议非常严格, 以简化实现. 例如, 固定长度的块使分配变得简单, 锁步确认提供流量控制并消除了对传入数据包重新排序的需要.