6

tftp プロトコルを実装するサーバーであるアプリケーションを構築しています。tftp での ASCII 形式とバイナリ形式 (netascii と octect) の違いと、プロトコルの状態に応じてファイルを別の方法で読み取る方法を理解するのに苦労しています。

ASCII char は 1 バイトで表すことができることを知っています。そのため、ASCII モード (各文字 1 バイト) とバイナリ モード (生の 1 バイト) での読み取りの違いがわかりません。

バイナリ モード (tftp のオクテット) ではフラグ ios::binary を使用してファイルを読み取ることができ、ascii (tftp では netascii) ではフラグを使用せずにファイルを読み取ることができますが、これら 2 つの方法でファイルを読み取ることの違いは何なのか本当にわかりません (私はいつもバイトの配列を考え出す)。

誰かが私を理解するのを手伝ってくれるなら、本当に感謝します

tftp プロトコル仕様: http://www.rfc-editor.org/rfc/rfc1350.txt

私が理解していない部分はこれです:


現在、転送の 3 つのモードがサポートされています: netascii (これは、「Telnet プロトコル仕様」[3] で指定された変更を加えた、「情報交換のための米国標準コード」[1] で定義されている
ascii です。) 8 ビット ascii であることに注意してください。「netascii」という用語
は、このドキュメント全体でこの
特定のバージョンの ascii を意味するために使用されます。); オクテット (これは、このドキュメントの以前のバージョンの「バイナリ」モードを置き換えます。) 生の 8 ビット バイト。メール、
ファイルではなく netascii 文字がユーザーに送信されます。(メール
モードは時代遅れであり、実装または使用すべきではありません。) 追加の
モードは、協力するホストのペアによって定義できます。

4

1 に答える 1

9

RFC-1350/TFTP における netascii の目的を明確にするのに役立つ 2 つの節があります。

netascii (これは、「情報交換のための米国標準コード」[1] で定義された ascii で、「Telnet プロトコル仕様」[3] で指定された変更を加えたものです。)

「Telnet プロトコル仕様」は RFC-764 であり、「ネットワーク仮想端末」で使用するためのさまざまな ASCII コードの解釈について説明しています。そのため、netascii はそれらの解釈に従います (これには、行を CR/LF シーケンスで終了する必要があることも含まれます)。

と:

netascii モードのデータを受信するホストは、データを独自の形式に変換する必要があります。

たとえば、ネイティブ エンコーディングとして EBCDIC を使用するホストは、netascii をそのエンコーディングに変換することが期待されるかもしれませんが、「オクテット」データはそのままにしておきます。

行末に LF を使用する Unix (またはその他) システムに TFTP サーバーを実装している場合は、netascii 転送用の CR を追加する必要があります (ファイル内の実際の CR 文字を CR/NUL に変換するだけでなく、シーケンス。

于 2011-08-18T14:52:59.403 に答える