回答:
これらのドットはどのような情報を意味していますか?
改行、キャリッジフィード、EOF、NULなどの印刷不可能な文字を表します。対応する16進コード(左)を見て、実際のバイトを把握できます。
HTTPSサーバーからクライアントへの「証明書」パケットを表示するこの例を考えてみましょう。「証明書」TLSメッセージには、バイナリデータとテキストデータの両方が含まれています。テキストは証明書自体からのものです。
「証明書の長さ」フィールドを選択したことに注意してください。これは、証明書の長さが1336バイトであることを示しています。しかし、強調表示されたバイトを見て、「テキスト」が右側にある場合、「1336」とは言わず、「.. 8」と言います。これは、「.. 8」が0x000538のASCII表現であるためです。
あなたが見ればASCIIテーブル、あなたは0x00では「NUL(ヌル文字)」であることがわかります、0x05のは「ENQ(照会)」であり、0x38は「8」です。NULとENQは印刷できません-それらは表示できません-したがって、Wiresharkは「。」を印刷します。代わりに。
しかし、基礎となるプロトコルでは、これらはいずれの場合もテキストではありません。これは24ビット整数です。16進数000538は10進数1336に等しく、次の証明書の長さが1336バイトであることを示します。
さらに下に行くと、証明書が開始されると、通常のASCIIテキストデータ( "Entrust、Inc.")がバイナリの非テキストデータ( "..U ... 0")と混ざり合っています。
HTTPのような完全に「テキストベースの」プロトコルを使用しても、「。」が表示されます。印刷できない文字の場合。「接続:閉じる」の後の「..」に注意してください。これは、「キャリッジリターン-ラインフィード」(CRLF、または\ r \ n)に対応しています。
つまり、wiresharkはasciiを使用してビット文字列をデコードしますか?言語に関係なくすべてのテキストを理解するユニコードのようなものを使用しないのはなぜですか?
要するに、Wiresharkは単にバイトを表示しているだけで、これはテキストである場合とそうでない場合がありますが、テキストである場合はUnicodeでなくASCIIである可能性があります。
Wiresharkは、文字列とバイナリの両方のデータバイトをASCII文字として「。」で表示します 印刷できない文字を示すために使用されます。FTP、SMTP、Telnet、HTTP、IRCなど、ASCII文字を使用して通信するネットワークプロトコルは多数あります。ネットワークプロトコルがテキストを使用して通信する場合、ほぼ確実にASCIIを使用します。
私は、UTF / Unicodeを通信の基礎として使用しているプロトコルに精通していません。HTTPなどのUnicode データの通信を希望するプロトコルは、アプリケーション層で次のバイトがUnicodeとして解釈されることを通知します。(確かではありませんが、それをキャッチして適切に表示できるWiresharkインタープリターが存在することを期待しますが、それでも「パケットバイト」ウィンドウにASCIIが表示されます。 ASCIIのような8ビットテキスト形式で最適に表示されます。)