बाइनरी प्रोटोकॉल वी। टेक्स्ट प्रोटोकॉल


94

क्या किसी के पास द्विआधारी प्रोटोकॉल के लिए एक अच्छी परिभाषा है? और वास्तव में एक पाठ प्रोटोकॉल क्या है? तार पर भेजे गए बिट्स के संदर्भ में ये एक दूसरे से तुलना कैसे करते हैं?

बाइनरी प्रोटोकॉल के बारे में यहां विकिपीडिया कहता है:

एक बाइनरी प्रोटोकॉल एक ऐसा प्रोटोकॉल है जिसे किसी इंसान के बजाय मशीन द्वारा पढ़ा जाने का इरादा या अपेक्षा है ( http://en.wikipedia.org/wiki/Binary_protocol )

ओह अब छोड़िए भी!

अधिक स्पष्ट होने के लिए, अगर मेरे पास jpg फाइल है, तो वह द्विआधारी प्रोटोकॉल के माध्यम से कैसे भेजा जाएगा और पाठ के माध्यम से कैसे होगा? पाठ्यक्रम के तार पर भेजे गए बिट्स / बाइट के संदर्भ में।

दिन के अंत में यदि आप एक स्ट्रिंग को देखते हैं तो यह स्वयं बाइट्स की एक सरणी है इसलिए 2 प्रोटोकॉल के बीच का अंतर इस बात पर आराम करना चाहिए कि वास्तविक डेटा को तार पर क्या भेजा जा रहा है। दूसरे शब्दों में, भेजे जाने से पहले प्रारंभिक डेटा (jpg फ़ाइल) को कैसे इनकोड किया गया है।


जवाबों:


169

बाइनरी प्रोटोकॉल बनाम टेक्स्ट प्रोटोकॉल वास्तव में इस बारे में नहीं है कि बाइनरी ब्लॉब्स को कैसे एन्कोड किया गया है। अंतर वास्तव में है कि क्या प्रोटोकॉल डेटा संरचनाओं के आसपास या पाठ स्ट्रिंग के आसपास उन्मुख है। मुझे एक उदाहरण दें: 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>

ध्यान दें कि यह बहुत आसानी से एक संरचना में बहुत अधिक कसकर पैक किया जा सकता है जो कि (सी में) कुछ ऐसा दिखाई देगा

निवेदन:

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प्रतिक्रिया संरचना में तीन अक्षरों '2' '0' '0' के बजाय मान 200 के साथ एक int है। यह एक पाठ आधारित प्रोटोकॉल है: एक जिसे कई अलग-अलग प्रकारों के संरचित डेटा के बजाय पाठ की (आमतौर पर मानव-पठनीय) लाइनों के एक फ्लैट स्ट्रीम के रूप में संचार करने के लिए डिज़ाइन किया गया है।


19
1-लाइनर परिभाषा के लिए +1 "अंतर वास्तव में है कि क्या प्रोटोकॉल डेटा संरचनाओं के आसपास या पाठ स्ट्रिंग के आसपास उन्मुख है।"
फ्रैंक शीयर

2
टायलर, उत्तर के लिए धन्यवाद, एक गहरी बात जो मुझे कहनी चाहिए। गीक परिदृश्य जो कि हम सब पर सहमत है, तार पर केवल 0 और 1 की यात्रा पर रहता है। कृपया मुझे बताएं कि क्या यह आपके द्वारा कैप्चर किया गया है। मैं नेटवर्क पर 15 नंबर (डीईसी) भेजना चाहता हूं (आपके पास नेटवर्क पर 2 समान कंप्यूटर हैं, कोई बड़ा / छोटा भारतीय अराजकता आदि नहीं)। अगर मैं एक बाइनरी प्रोटोकॉल का उपयोग करने जा रहा हूं (कहते हैं कि मैं इसे टीसीपी सॉकेट के माध्यम से भेजता हूं) तो यह 00001111 के रूप में तार पर जाएगा, लेकिन अगर मैं एक पाठ प्रोटोकॉल का उपयोग करने जा रहा हूं तो यह 00110001 (एएससीआईआई 4 के लिए) के रूप में जाएगा। 00110101 (char 5 के लिए ASCII) सही या बकवास? :)
der_grosse

1
यह सही है। इसे टेक्स्ट तरीके से करने का फायदा न केवल मानवीय पठनीयता है, बल्कि एंडियनस के बारे में चिंता करने की भी ज़रूरत नहीं है अगर आपकी संख्या एक से अधिक बाइट लंबी हो।
टायलर मैकहेनरी

1
मैं 1-लाइन की परिभाषा से सहमत नहीं हूं और न ही 15 चार्ट भेजने के उदाहरण के साथ, मतभेदों को देखने के लिए, जैसा कि मैंने अपने जवाब में कहा है, आपको पूरे चारसेट और परिसीमन / प्रोटोकॉल को जानना होगा, आप नहीं कह सकते एकल डेटा उदाहरण के आधार पर यदि प्रोटोकॉल पाठ आधारित या द्विआधारी आधारित है। आप केबल पर "देख" सकते हैं और एक 65 (चार 'ए') देख सकते हैं और आप अभी भी यह नहीं कह सकते हैं कि यह एक टेक्स्ट आधारित या बाइनरी प्रोटोकॉल है। दोनों में एक ही चार के लिए एक ही प्रतिनिधित्व हो सकता है या नहीं, लेकिन यह मौलिक नहीं है।
हर्नान ईचे

25

यहां एक तरह की कॉप-आउट परिभाषा दी गई है:

जब आप इसे देखेंगे तो आपको पता चल जाएगा।

यह उन मामलों में से एक है जहां एक संक्षिप्त परिभाषा खोजना बहुत कठिन है जो सभी कोने के मामलों को कवर करता है। लेकिन यह उन मामलों में से एक है जहां कोने के मामले पूरी तरह से अप्रासंगिक हैं, क्योंकि वे वास्तविक जीवन में नहीं होते हैं।

बहुत सारे प्रोटोकॉल जो आप वास्तविक जीवन में सामना करेंगे या तो इस तरह दिखेंगे:

> fg,m4wr76389b zhjsfg gsidf7t5e89wriuotu nbsdfgizs89567sfghlkf
>  b9er t8ß03q+459tw4t3490ß´5´3w459t srt üßodfasdfäasefsadfaüdfzjhzuk78987342
< mvclkdsfu93q45324äö53q4lötüpq34tasä#etr0 awe+s byf eart

[वहाँ अन्य गैर-मुद्रण योग्य बकवास की एक टन की कल्पना करो। पाठ और बाइनरी के बीच अंतर को व्यक्त करने में एक चुनौती यह है कि आपको पाठ में संदेश देना होगा :-)]

या इस तरह:

< HELLO server.example.com
> HELLO client.example.com
< GO
> GETFILE /foo.jpg
< Length: 3726
< Type: image/jpeg
< READY?
> GO
< ... server sends 3726 bytes of binary data ...
> ACK
> BYE

[मैंने इसे मौके पर ही बनाया है।]

वहाँ बस इतना अस्पष्टता नहीं है।

एक और परिभाषा जो मैंने कभी-कभी सुनी है

एक पाठ प्रोटोकॉल वह है जिसका उपयोग करके आप डीबग कर सकते हैं telnet

हो सकता है कि मैं अपने nerdiness यहाँ दिखा रहा हूँ, लेकिन मैं है वास्तव में लिखा और एसएमटीपी और पॉप 3 के माध्यम से ई-मेल को पढ़ने, का उपयोग कर HTTP के माध्यम से NNTP के माध्यम से यूज़नेट लेख और देखी वेब पृष्ठों को पढ़ने telnet, कोई अन्य कारण से है कि क्या यह वास्तव में काम करेंगे देखने के लिए।

वास्तव में, यह लिखते समय, मैं थोड़े बुखार को फिर से पकड़ा:

bash-4.0$ telnet smtp.googlemail.com 25
Trying 74.125.77.16...
Connected to googlemail-smtp.l.google.com.
Escape character is '^]'.
< 220 googlemail-smtp.l.google.com ESMTP Thu, 15 Apr 2010 19:19:39 +0200
> HELO
< 501 Syntactically invalid HELO argument(s)
> HELO client.example.com
< 250 googlemail-smtp.l.google.com Hello client.example.com [666.666.666.666]
> RCPT TO:Me <Me@Example.Com>
< 503 sender not yet given
> SENDER:Me <Me@Example.Com>
< 500 unrecognized command
> RCPT FROM:Me <Me@Example.Com>
< 500 unrecognized command
> FROM:Me <Me@Example.Com>
< 500-unrecognized command
> HELP
< 214-Commands supported:
< 214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ETRN
> MAIL FROM:Me <Me@Example.Com>
< 250 OK
> RCPT TO:You <You@SomewhereElse.Example.Com>
< 250 Accepted
> DATA
< 354 Enter message, ending with "." on a line by itself
> From: Me <Me@Example.Com>
> To: You <You@SomewhereElse.Example.Com>
> Subject: Testmail
>
> This is a test.
> .
< 250 OK id=1O2Sjq-0000c4-Qv
> QUIT
< 221 googlemail-smtp.l.google.com closing connection
Connection closed by foreign host.

अरे, यह काफी समय हो गया है जब से मैंने यह किया है। काफी कुछ त्रुटियाँ :-)


7

बाइनरी प्रोटोकॉल के उदाहरण: आरटीपी , टीसीपी , आईपी

पाठ प्रोटोकॉल के उदाहरण: SMTP , HTTP , SIP

यह आपको द्विआधारी बनाम पाठ प्रोटोकॉल की एक उचित परिभाषा को सामान्य करने की अनुमति देनी चाहिए।

संकेत: उदाहरण अनुभागों या रेखाचित्रों पर जाएं। वे टायलर के रॉकिंग जवाब को स्पष्ट करने के लिए काम करते हैं ।


1
फ्रैंक, लिंक के लिए धन्यवाद, लेकिन जब मैं RFC के साथ किया जाएगा यह 2099 होगा :) मैं उन लोगों से कुछ जवाब चाहता था जिन्होंने उन्हें पढ़ा है। मैं अभी भी टायलर मैकहेनरी के जवाब पर विचार कर रहा हूँ ...
der_grosse

कहना होगा, ग्रेट शेयरिंग।
इकरा।

5

जैसा कि आप में से अधिकांश ने सुझाव दिया है कि हम यह अंतर नहीं कर सकते हैं कि प्रोटोकॉल बाइनरी है या टेक्स्ट केवल तार पर सामग्री को देखकर

Afik

बाइनरी प्रोटोकॉल - बिट्स सीमाएं हैं ऑर्डर बहुत महत्वपूर्ण है

जैसे।, आरटीपी

पहले दो बिट्स संस्करण हैं अगला बिट मार्कअप बिट है

पाठ प्रोटोकॉल - प्रोटोकॉल के लिए विशिष्ट परिमाण क्षेत्र के आदेश महत्वपूर्ण नहीं है

जैसे।, सिप

एक और, बाइनरी प्रोटोकॉल में, हम एक बाइट को विभाजित कर सकते हैं, अर्थात, एक एकल बिट का एक विशिष्ट व्यक्तिगत अर्थ हो सकता है; जबकि एक पाठ प्रोटोकॉल में न्यूनतम सार्थक इकाई BYTE है। आप एक बाइट को विभाजित नहीं कर सकते।


2

दोनों अलग-अलग चार सेट का उपयोग करते हैं, एक पाठ, एक कम चार सेट का उपयोग करते हैं, द्विआधारी में यह सब शामिल हो सकता है, न केवल "पत्र" और "संख्या", (यही कारण है कि विकिपीडिया "इंसान" कहता है)

o अधिक स्पष्ट हो, अगर मेरे पास jpg फाइल है तो उसे बाइनरी प्रोटोकॉल के माध्यम से कैसे भेजा जाएगा और टेक्स्ट टेक्स्ट के माध्यम से कैसे? पाठ्यक्रम के तार पर भेजे गए बिट्स / बाइट के संदर्भ में।

आपको यह बेस 64 पढ़ना चाहिए

किसी भी हास्य को स्वीकार किया जाता है, मैं यहां चीजों का सार पाने की कोशिश कर रहा हूं।

मुझे लगता है कि चारसेट को संकीर्ण करने के लिए सार जटिलता को कम कर रहा है, और पोर्टेबिलिटी, संगतता तक पहुंचता है। वाइड चारसेट, (या एक विस्तृत जो भी हो) का सम्मान करना बहुत मुश्किल है। लैटिन / रोमन वर्णमाला और अरबी अंकों को दुनिया भर में जाना जाता है। (बेशक कोड को कम करने के लिए अन्य विचार हैं, लेकिन यह एक मुख्य है)

मान लें कि द्विआधारी प्रोटोकॉल में भागों के बीच "अनुबंध" बिट्स के बारे में है, पहले इसका मतलब यह है कि दूसरा, आदि .. या यहां तक ​​कि बाइट्स (लेकिन पोर्टेबिलिटी में सोच के बिना उपयोग की स्वतंत्रता के साथ) निजी बंद प्रणाली में उदाहरण के लिए या (हार्डवेयर स्टैंडर्स के पास), हालाँकि यदि आप एक खुली प्रणाली डिज़ाइन करते हैं तो आपको यह ध्यान रखना होगा कि आपके कोड को परिस्थितियों के एक विस्तृत समूह में कैसे दर्शाया जाएगा, उदाहरण के लिए इसे दुनिया के दूसरी तरफ मशीन में कैसे दर्शाया जाएगा? यहां पाठ प्रोटोकॉल आता है जहां अनुबंध सकारात्मक के रूप में स्टैंडर होगा। मैंने दोनों को डिज़ाइन किया है और यह कारण थे, ओपन या / और पोर्टेबल सिस्टम के लिए बहुत ही कस्टम समाधान और पाठ के लिए बाइनरी।


मैं बेस 64 के बारे में जानता हूं और यह क्या करता है और यह बिल्कुल वैसा है जब मैंने सवाल पोस्ट किया था। base64 अच्छा है जब मैं अपने ASCII प्रतिनिधित्व (एन्कोडिंग) में कुछ भी भेजना चाहता हूं ताकि एक पाठ प्रोटोकॉल हो। तकनीकी रूप से यह 6 के जोड़े में बिट-इनपुट को विभाजित करता है, एक लुकअप टेबल और इसी तरह का उपयोग करता है। क्या कोई बाइनरी प्रोल काम करता है, इसके लिए कुछ इसी तरह की व्याख्या प्रदान कर सकता है? पूरक प्रश्न: हम ओएसआई स्तर पर बाइनरी और टेक्स्ट प्रोटोकॉल के बारे में क्या बात कर सकते हैं और उन स्तरों पर इन दुनिया के सटीक अर्थ क्या हैं?
der_grosse

1
बाइनरी का उदाहरण निम्न स्तर के प्रोटोकॉल हैं जैसे सरल धारावाहिक संचार ( en.wikipedia.org/wiki/Asynchronous_serial_communication ) या डेटा को मेमोरी में कैसे संग्रहीत किया जाता है ( en.wikipedia.org/wiki/Data_structional_alignment )। OSI..well के बारे में क्योंकि डेटा का प्रतिनिधित्व करने के लिए पाठ और बाइनरी प्रोटोकॉल का उपयोग किया जाता है (न केवल संचार के लिए) उन्हें किसी भी OSI स्तर पर होने की आवश्यकता नहीं है, कहा कि, मैं बता सकता हूँ कि परत 1,2,3,4 में "बाइनरी है प्रोटोकॉल ", और" पाठ प्रोटोकॉल "5,6,7 पर हो सकता है।
हर्नान ईचे

1

हम SOAP में एक छवि फ़ाइल कैसे भेज सकते हैं: यहां क्लिक करें

इससे पता चलता है कि बाइनरी डेटा को इस तरह के [ATTACHMENT] के रूप में संलग्न किया गया है और इसका संदर्भ SOAP संदेश में सहेजा गया है।

इसलिए, प्रोटोकॉल पाठ आधारित है और डेटा [इमेज] बाइनरी अटैचमेंट है जिसका एन्कोडिंग प्रासंगिक नहीं है

इस प्रकार, एसओएपी पाठ प्रोटोकॉल है जिस तरह से हम साबुन हेडर निर्दिष्ट करते हैं और इसमें एन्कोडेड वास्तविक डेटा नहीं है।


0

मुझे लगता है कि आपको यह गलत लगा। यह प्रोटोकॉल नहीं है जो यह निर्धारित करता है कि डेटा "तार" पर कैसा दिखता है, लेकिन यह डेटा प्रकार है जो यह निर्धारित करता है कि इसे प्रसारित करने के लिए किस प्रोटोकॉल का उपयोग करना है। उदाहरण के लिए tcp सॉकेट लें, एक jpeg फ़ाइल बाइनरी प्रोटोकॉल के साथ भेजी और प्राप्त की जाएगी क्योंकि यह बाइनरी डेटा है (मानव पठनीय नहीं है, बाइट्स जो 32-126 ascii रेंज के बीच में जाते हैं), लेकिन आप एक टेक्स्ट फ़ाइल के साथ भेज / पुन: प्राप्त कर सकते हैं दोनों प्रोटोकॉल और आप अंतर नोटिस नहीं करेंगे।


नहीं, मुझे नहीं लगता कि मुझे यह गलत लगा। मैं अभी भी बाइनरी प्रोटोकॉल आईएस के लिए (अच्छी) परिभाषा की तलाश कर रहा हूं। जेपीईजी के साथ उदाहरण मेरे प्रश्न को स्पष्ट करने के लिए था और कुछ नहीं, इसे प्रश्न का केंद्र न बनाएं। मुझे यह कहना चाहिए कि प्रोटोकॉल यह निर्धारित करता है कि जब तार दूसरे पर संचारित होता है तो डेटा कैसा दिखता है, वह प्रोटोकॉल क्यों है ??
der_grosse

मैंने आपको एक सटीक परिभाषा दी है, आपको बस ध्यान से पढ़ना है। "एक बाइनरी प्रोटोकॉल बाइट्स का प्रबंधन करता है जो 32-126 एससीआई रेंज के बीच जाता है, जिसे गैर मुद्रण योग्य वर्ण भी कहा जाता है"
सिमोन मार्गारिटेली

पाठ प्रोटोकॉल उन लोगों को भी विभाजित करते हैं जो उन्हें ASCII तालिका में फिट करेंगे। और इसी तरह। तो सबसे अच्छी स्थिति में आपकी परिभाषा अस्पष्ट है। लेकिन योगदान के लिए धन्यवाद।
der_grosse

0

पाठ प्रोटोकॉल आत्म-व्याख्यात्मक और व्यापक हो सकता है। यह स्व-व्याख्यात्मक है क्योंकि संदेश में केवल संदेश में फ़ील्ड नाम शामिल हैं। बाइनरी प्रोटोकॉल के संदेश में आप यह नहीं समझ सकते कि यदि आप प्रोटोकॉल विनिर्देश का उल्लेख नहीं करते हैं।

यह व्यापक मतलब है कि HTTP एक पाठ प्रोटोकॉल के रूप में सिर्फ सरल नियम बनाता है लेकिन आप नए हेडर को स्वतंत्र रूप से जोड़कर या अलग-अलग पेलोड परिवहन करने के लिए सामग्री प्रकार को बदलकर डेटा संरचना का विस्तार कर सकते हैं। और हेडर मेटा डेटा हैं और बातचीत और स्वचालित रूप से अनुकूलन की क्षमता रखते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.