Neden bu kadar çok internet protokolü metin tabanlı?


47

Bulduğuma göre, internet üzerinden yolculuk yapan çok sayıda protokol ikiliden ziyade "metin tabanlı". Söz konusu protokoller bunlarla sınırlı olmamakla birlikte HTTP, SMTP, FTP (bunların tümü metin tabanlı mı?), WHOIS, IRC'yi içerir.

Aslında, bu protokollerin bazıları ikili veri iletmek istediklerinde bazı halkalardan atlarlar .

Bunun arkasında bir sebep var mı? Metin tabanlı protokoller, aynı miktarda bilgiyi iletmek için daha fazla veri göndermeyi gerektirdiklerinden açık bir şekilde bir miktar ek yüke sahiptir (aşağıdaki örneğe bakın). Bunun yararları nelerden ağır basar?


By metin tabanlı , ben protokolde kullanılan karakterlerin çoğu arasına anlamına 0x20(boşluk) ve 0x7E( ~) için kullanılan ara sıra "speical karakteri" ile çok özel amaçlar böyle satırbaşıyla, null, ETX, ve EOT gibi. Bu, bağlantı üzerinden ham, ikili verilerin iletilmesine karşıdır.

Örneğin, tamsayıyı 123456metin olarak iletmek dizeyi 123456(onaltılık olarak temsil edilir 31 32 33 34 35 36) göndermeyi içerirken, 32-bit ikili değeri (onaltılı olarak temsil edilir ) olarak gönderilir 0x0001E240(ve gördüğünüz gibi, özel boş karakter "" içerir ") .


3
Belirtilen 5 protokolden HTTP, SMTP, WHOIS ve IRC öncelikle metinsel veri alışverişi için tasarlandı.
el.pescado

4
O Not HTTP / 2 ikili protokoldür.
isanae

4
Çoğunlukla uygulama ve sunum katmanı protokollerini kastediyorsunuz . Düşük seviyeli protokoller (TCP, IP, Ethernet) neredeyse her zaman ikilidir.
Nick T

2
FTP, ikili dosyaları aktarırken kullanması oldukça önemli olan bir ikili moda sahiptir, çünkü birçok istemcideki normal transfer modu, satır sonlarını farklı satır sonlarına sahip ana bilgisayarlar arasında aktarırken ikili dosyaları bozacak ana bilgisayar kurallarına uygun olacak şekilde yeniden yazar. Bu ikili mod sadece dosya aktarımı içindi ve komut satırını etkilemedi.
casey

2
FTP aslında bir metin tabanlı (komut kanalı) ve bir ikili (veri kanalı) olmak üzere iki ağ bağlantısı kullanır.
Sahte

Yanıtlar:


40

Dünya daha gençken ve bilgisayarlar tümüyle yüceltilmiş PC'ler olmadığında, kelime boyutları değişkendi (burada 20 Aralık'taki bir DEC 2020 vardı), ikili veri formatı çekişmeli bir konuydu (büyük endian vs küçük endian ve hatta tuhaf) bitlerin siparişleri oldukça yaygındı). Karakter büyüklüğü / kodlaması konusunda çok az fikir birliği vardı (ASCII, EBCDIC ana yarışmacılardı, DEC'de 5/6/7/8 bit / karakter kodlaması vardı). ARPAnet (İnternet öncülü), herhangi bir tanımdaki makineleri bağlamak için tasarlanmıştır. Ortak payda metindi (ve hala da). 7 bit kodlanmış metnin, etrafta veri göndermek için altta yatan yollarla dolaştırılmayacağından oldukça emin olabilirsiniz (oldukça yakın bir zamana kadar, bazı 8 bit kodlamalarda e-posta göndermek, alıcının sakıncalı mesajların alınacağını garanti eder)

Örneğin, telnet veya FTP protokolü açıklamalarında (ilk İnternet protokolleri, ağ fikri uzaktan "bir süper bilgisayara" ve dosyaları karıştırıp fro) bağlamak üzere dolaşırsanız, bağlantının çok fazla ayrıntı için müzakere içerdiğini göreceksiniz. üniforma olarak kabul ediyoruz

Evet, ikili (biraz) daha verimli olurdu. Ancak makineler ve hatıralar (ve ayrıca ağlar) muazzam bir şekilde büyüdü, bu yüzden eskiden biraz korkutucu geçmişte kaldı (çoğunlukla). Ve aklı başında hiç kimse, mevcut tüm protokolleri, ikili olanlarla değiştirmek için sökmeyi önermeyecektir. Ayrıca, metin protokolleri çok kullanışlı bir hata ayıklama tekniği sunar. Bugün hiçbir zaman telnet sunucusunu kurmuyorum (uzak bağlantılar için şifreli SSH protokolünü kullanmalıyım), ancak bazı hatalı sunucularla bağlantı kurabilmek için "konuşması" için telnet istemcisini kullanmam gerekiyor. Bugün etrafta fütürleşmek için netcat veya ncat kullanırsın ...


10
Sorun giderme kolaylığı da büyük ölçüde iyileştirildi. Bir paket yakalamayı okumak yeterince zordur, uygulamalar insan tarafından okunabilir bir biçimde mesajlar göndermediğinde daha da kötüleşir.
Nanban Jim

5
"Ve aklı başında hiç kimse, onları ikili olanlarla değiştirmek için mevcut tüm protokolleri kopyalamayı öneremez" - aksine, metin tabanlı protokollerden daha iyi olduğunu düşündüğünüz şeylere, yani HTTP'den ne olduğuna kadar görüşün SPDY istek başlığı sıkıştırması ve şimdi HTTP / 2'nin bir parçası. Veya bu konuda HTTP'den ikili içerik türlerine veya transfer kodlamalarına kadar.
Steve Jessop

4
Düz metin protokolleri ayrıca, potansiyel olarak tehlikeli veya güvenilmeyen verileri güvenle incelemenizi sağlar. Örneğin, bazı spam / phishing girişimi aldığımda telnet kullanıyorum, bu da sistemime zarar vermeyeceğini garanti ediyorum. Bir sisteme metin tabanlı erişime sahip olmak çok önemlidir. Bugün bile olsa, HTTP / 1.1'in nadiren "düz metin" olduğunu not edersiniz, çünkü Kabul Etme Kodlaması başlığı çoğu kullanıcının ve sunucunun desteklediği sayfaların daha hızlı yüklenmesi için sıkıştırmaya izin verir.
phyrfox 25:15

Midwest Vintage Bilgisayar Fuarı'nda, Altair 680 gibi makinelerin her 32 bayt veri için 76 karakter (genel olarak 44 karakter) 76 karakter kullanan Motorola S kayıt biçiminde kod alması gerektiğini ilginç buldum. Biri 0-9 AZ + - * / = gibi 41 karakterlik bir set kullanmakla sınırlı olsa bile, bunu 57 karaktere yakın bir şeye düşürmek mümkün olmalı, bu da ASR-33, 1K kodunu 4 dakikadan üçe kadar besler. Yavaş G / Ç hızları göz önüne alındığında, böyle şeylerin neden sıkça yapılmadıklarını merak ediyorum?
supercat

24

Göz ardı edilebilecek bir avantaj, deney yapma yeteneğidir . Tüpü aşağı doğru atıyorsanız, EHLOiçine 0x18ya da benzerine çeviren bir yardımcı program yazmanız gerekecektir . Bunu yapmak yerine, bir posta sunucusuna telnet gönderebilir, yollayabilir EHLOve gönderebilirsiniz .

Bu gün ve yaşta hiçbir şey Assembly veya Brainf * ck içine kod yazmaktan alıkoyamaz ve bunu yaparak bazı bitlerden çok tasarruf edebilirsiniz. Ancak, tam olarak başkalarına ne yaptığınızı açıklamak böylece kodunuzu anlamaları ve etkileşime girmeleri kolay olmaz.

Protokoller sayesinde, kullanıcıların ARPAnet'i kullanan veya İnternetin başlangıcını bir terminalin arkasında rahat hisseden insanlar olduğu için çoğu gün kullanacaklarını öğrenmeleri çok önemlidir .

Bu arada bugün de şirketlerde benzer argümanlar var. JSON veya BSON'a ( JSON'un ikili gösterimi) seri hale getirilmeli mi? BSON'a serileştirirseniz, bazı ek yükler atıyorsunuz, ancak şimdi bir insan kaçınılmaz olarak bir şeyler ters gittiğinde bir noktada bu verileri okumak zorunda kalacağı için BSON'unuzu JSON'a dönüştürmek için bir tercümana ihtiyacınız var.


Protokoller ilk etapta yerine bir metin protokolü için bir ikili kısacası ikili olarak dizayn edilmiş olsaydı, orada bile olmayabilir olmak yaygın-kararlaştırılmış gibi terim EHLO. İkili protokol için insan tarafından kullanılabilir her ön uç, eğer ikili standart 0x18bu konumda isimlendirmediyse kendi isimlerini yapmış olabilir .
Peter Cordes

10

İnternet protokollerinin çoğu metin tabanlı değildir. Aslında, tahmin edersem, metin tabanlı protokollerin azınlıkta olduğunu söyleyebilirim. İnternette gördüğünüz hemen hemen her metin tabanlı protokol için, insanların aynı veya benzer verileri göndermek için icat ettikleri en az iki ikili protokol vardır.

Ancak, internet trafiğinin çoğunun metin tabanlı protokoller kullandığı doğrudur . Bu gerçek, metinden çok daha fazla ikili protokol, ikiliden daha fazla metin trafiği olduğunu varsayarsanız ilginçtir. İnternetteki başarılı protokollerin çoğunun metin tabanlı olduğu anlamına gelir . Az sayıda uygulama dışında (bittorrent bir örnektir) ikili protokoller ölme eğilimindedir.

İnternetin ilk günlerinde, şirketler askeri protokoller, araştırma enstitüleri ve akademisyenler, ikili protokolü (örneğin, bugünün MSN web sitesi değil, HTTP'nin yerine geçmesi beklenen orijinal MicroSoft Ağı) kullandılar. metin tabanlı protokol tasarlar ve kullanır. Bunun bir nedeni, ikili protokolleri oluşturmak ve hata ayıklamak zordu ve şirketler bunu yapmak için insanlara para ödeyebiliyorlardı. Asker, araştırmacılar ve akademisyenler boş zamanlarında ücretsiz olarak yapıyorlardı (interneti geliştirenlerin çoğu internetin geliştirilmesi ile ilgili olmayan işler).

Hafta sonları bir hobi olarak kod yazarken ve yaptığınız işi yapmak için para almıyorsanız, daha basit bir çözüm olan metni seçersiniz. Bu nedenle, metin tabanlı protokoller, ikili protokollerden daha fazla kişi tarafından kullanılmaktadır.

Ama bu tam hikaye değil. Bir ağ kurmak zor. Gerçekten zor. Bugün internete o kadar alışmışız ki, mühendislik harikasının ne olduğunu tam olarak anlamıyoruz. İnternetin hemen hemen her yönü bir hata düzeltmesinden çıktı. Örneğin, MAC adresi yerine IP adresini kullanıyoruz, çünkü yönlendirme tablosu için terabayt RAM yerine yalnızca kilobayt (veya bu günlerde megabayt) olan yönlendiriciler oluşturmamızı sağlıyor. Çözmeye çalıştığımız problemler arttıkça, hata ayıklamak için metin tabanlı protokolleri tercih etme eğilimimiz de artmaktadır. Düşük seviyeli ağ protokollerini geliştirme konusunda yeterli tecrübeye sahip olduktan sonra, uygulama protokolleri geliştirme zamanı geldiğinde, deneyimli programcıların ve mühendislerin çoğu metin protokollerini tercih etme eğilimindeydi.

Kişisel tecrübemden dolayı, bir şirket yönlendiricileri kurmak için çalıştım ve ayrıca telemetri ekipmanları üreten bir şirket için çalıştım, bu nedenle TCP / IP, ARP, IEC60870-5- gibi ikili protokollerle çalışma konusunda çok fazla deneyime sahip oldum. 101 ve DNP3. Ayrıca HTTP, POP3 ve NMEA gibi metin protokolleriyle de çalıştım. Ayrıca ASN.1 gibi ikili veri formatları ve JSON ve XML gibi metin veri formatlarıyla çalıştım. Eğer seçim yapsaydım hemen hemen her seferinde metin seçerdim. İkili seçtiğim tek zaman protokolün gerçekten düşük seviyeli olup olmadığıdır (o zaman üstüne veya üzerinde metin tabanlı bir protokolü işaretleyebilmem için yeterince uygularım) veya veriler doğal olarak ikilidir (ses dosyaları gibi) .


3

Yapılandırılmış ikili kodun genişletilmesinde de sınırlamaları vardır. FidoNet ile çalışmak ve UUCP / USNET arasında bir geçit inşa etmek benim günlerdi, Fidonet'in mesaj başlıkları yapılandırılmış bir ikiliydi. Bir yere sadece bir bayt eklemeye çalışarak bile genişletmek, onunla çalışmaya çalışan her şeyi parçalamak anlamına gelir. Bir metin başlığına veya protokolüne sahip olmak, bir şeyi kırmaksızın genişletebileceğiniz anlamına gelir.


Alınan ders: İkili veriye bir sürüm etiketi yerleştirin.
Peter - Monica'yı yeniden

3

Sorunuz üç şekilde yorumlanabilir:

  1. Neden sayısal veriler, örneğin basılmış gibi, metin sunumunda iletiliyor printf()?
  2. Klasik uygulama katmanı protokolleri neden - örneğin ftp kontrol kanalı, smtp, http - geleneksel olarak hepsi bir 7-bit ASCII karakter seti kullanıyor? (7 bit ASCII "metin" olarak kabul edilebilir çünkü çoğu bayt yazdırılabilir gliflere veya newline ve feed'den gelen metin kontrol kodlarına karşılık gelir.)
  3. Neden ikili veri blobları, internet üzerinden, örneğin posta eki olarak gönderildiklerinde, genellikle 7 bit ascii'ye çevrilir?

İlki için cevap birlikte çalışabilirliktir. Tamsayılar ve kayan nokta değerleri, farklı makinelerde, hatta derleyicilerde ve hatta sadece farklı derleyici seçeneklerinde farklı ikili gösterimlere sahiptir. Bunları etkili şekilde printf/scanfiletmek birlikte çalışabilirliği kolaylaştırır. Bu seçimin yalnızca yukarıda birkaçının söz edildiği üst düzey protokoller için yapıldığına dikkat edin; Ağ katmanı üzerindeki veriler ikili olarak iletilir. Bunun için, TCP / IP ikili bir tamsayı gösterimini tanımlar ve TCP / IP'yi uygulayan kütüphaneler, host ve ağ temsilleri ile htonlarkadaşlarınız arasında dönüşüm yapmak için araçlar sağlar .

İkinci sorunun cevabı muhtemelen RFC 206'nın (düşük sayı - 1971'e dikkat edin!) Pek çok uygulama katmanı protokolünün dayandığı telnet protokolünü doğrudan teletip değiştirme olarak tanımlamasıdır.

Bu işlev, Çevrimiçi Sistem terminalini Ağdaki herhangi bir teletip uyumlu, zaman paylaşım sistemine doğrudan o sisteme doğrudan bağlıymış gibi görünmesini sağlamaktır .

(Orijinal metinde vurgu.) En azından bazı teletipler ve özellikle teletype ağları , doğal bir seçim yapmış olması gereken karakter seti olarak 7 bit ASCII kullandı .

Üçüncüsünün cevabı, basitçe, uygulama katmanı protokollerinin telnet tabanlı olması ve telnet'in 7 bit ascii olması nedeniyle, çok yumuşak ve donanım , 8 bit verilerle uğraşmaya hazır değildi . İkili eklerin gönderilmesi, e-postanın yanlış kullanımı olarak kabul edilebilir; dolayısıyla çemberler. Günümüzde bu genellikle artık doğru değildir ve protokoller ikili verileri doğrudan işlemek için sürekli olarak genişletilir (veya yalnızca kullanılır).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.