バイナリ プロトコルとは何かについて適切な定義を持っている人はいますか? また、テキスト プロトコルとは実際は何ですか? 回線上で送信されるビット数に関して、これらはどのように比較されますか?
バイナリ プロトコルについて、Wikipedia では次のように説明しています。
バイナリプロトコルは、人間ではなく機械によって読み取られることを意図または期待されているプロトコルです(http://en.wikipedia.org/wiki/バイナリプロトコル)
ああ、いい加減にしろよ!
もっと明確に言うと、jpg ファイルがある場合、バイナリ プロトコルではどのように送信され、テキスト プロトコルではどのように送信されるのでしょうか。もちろん、回線上で送信されるビット/バイトの観点でです。
結局のところ、文字列を見ると、それ自体がバイトの配列であるため、2 つのプロトコルの違いは、実際にネットワーク上で送信されるデータによって決まります。つまり、初期データ (jpg ファイル) が送信される前にどのようにエンコードされるかによって決まります。
ベストアンサー1
バイナリ プロトコルとテキスト プロトコルの違いは、バイナリ ブロブがどのようにエンコードされるかということではありません。違いは、プロトコルがデータ構造を中心にしているか、テキスト文字列を中心にしているかという点にあります。例を挙げてみましょう。HTTP です。HTTP はテキスト プロトコルですが、JPEG 画像を送信するときは、テキスト エンコードではなく、生のバイトのみを送信します。
しかし、HTTPをテキストプロトコルにしているのは、得るjpg は次のようになります:
リクエスト:
GET /files/image.jpg HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.01 [en] (Win95; I)
Host: hal.etc.com.au
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
応答:
HTTP/1.1 200 OK
Date: Mon, 19 Jan 1998 03:52:51 GMT
Server: Apache/1.2.4
Last-Modified: Wed, 08 Oct 1997 04:15:24 GMT
ETag: "61a85-17c3-343b08dc"
Content-Length: 60830
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/jpeg
<binary data goes here>
これをもっと簡単に、C言語では以下のような構造にまとめることもできることに注意してください。
リクエスト:
struct request {
int requestType;
int protocolVersion;
char path[1024];
char user_agent[1024];
char host[1024];
long int accept_bitmask;
long int language_bitmask;
long int charset_bitmask;
};
応答:
struct response {
int responseType;
int protocolVersion;
time_t date;
char host[1024];
time_t modification_date;
char etag[1024];
size_t content_length;
int keepalive_timeout;
int keepalive_max;
int connection_type;
char content_type[1024];
char data[];
};
フィールド名をまったく送信する必要はなく、たとえば、responseType
応答構造の は 3 つの文字「2」「0」「0」ではなく、値 200 の int です。これがテキスト ベースのプロトコルです。つまり、さまざまな種類の構造化データとしてではなく、(通常は人間が読める) テキスト行のフラット ストリームとして通信するように設計されたプロトコルです。