Mengapa begitu banyak protokol internet berbasis teks?

47

Dari apa yang saya temukan, seorang yang sangat sejumlah besar protokol yang perjalanan melalui internet adalah "text-based" daripada biner. Protokol yang dimaksud termasuk, tetapi tidak terbatas pada HTTP, SMTP, FTP (saya pikir ini semua berbasis teks?), WHOIS, IRC.

Bahkan, beberapa protokol ini melompati beberapa rintangan kapan pun mereka ingin mengirimkan data biner .

Apakah ada alasan di balik ini? Protokol berbasis teks jelas memiliki sedikit overhead karena memerlukan pengiriman lebih banyak data untuk mengirimkan jumlah informasi yang sama (lihat contoh di bawah). Apa manfaatnya melebihi ini?


Dengan berbasis teks , maksud saya sebagian besar karakter yang digunakan dalam protokol adalah antara 0x20(spasi) dan 0x7E( ~), dengan "karakter khusus" sesekali digunakan untuk tujuan yang sangat khusus , seperti baris baru, null, ETX, dan EOT. Ini bertentangan dengan pengiriman data biner mentah melalui koneksi.

Misalnya, mentransmisikan integer 123456sebagai teks akan melibatkan pengiriman string 123456(direpresentasikan dalam hex as 31 32 33 34 35 36), sedangkan nilai biner 32-bit akan dikirim sebagai (diwakili dalam hex) 0x0001E240(dan seperti yang Anda lihat, "berisi" karakter null khusus .

IQAndreas
sumber
3
Dari 5 protokol yang disebutkan, HTTP, SMTP, WHOIS dan IRC disusun untuk bertukar data tekstual.
el.pescado
4
Perhatikan bahwa HTTP / 2 adalah protokol biner.
isanae
4
Anda kebanyakan mengacu pada protokol lapisan aplikasi dan presentasi . Protokol tingkat bawah (TCP, IP, Ethernet) hampir selalu bersifat biner.
Nick T
2
FTP memiliki mode biner yang cukup penting untuk digunakan saat mentransfer file biner, karena mode transfer normal di banyak klien akan menulis ulang akhir baris agar sesuai dengan konvensi host yang akan merusak binari saat mentransfer antara host dengan ujung baris yang berbeda. Mode biner ini hanya untuk transfer file dan tidak memengaruhi item perintah.
Casey
2
FTP sebenarnya menggunakan dua koneksi jaringan, satu berbasis teks (saluran perintah) dan satu biner (saluran data).
Nama samaran

Jawaban:

40

Ketika dunia lebih muda, dan komputer tidak semua PC dimuliakan, ukuran kata bervariasi (sebuah DEC 2020 yang kami miliki di sini memiliki 36 bit kata), format data biner adalah masalah yang diperdebatkan (big endian vs little endian, dan bahkan lebih aneh) pesanan bit cukup umum). Ada sedikit konsensus pada ukuran karakter / pengkodean (ASCII, EBCDIC adalah pesaing utama, DEC kami memiliki 5/6/7/8 bit / pengkodean karakter). ARPAnet (pendahulu Internet) dirancang untuk menghubungkan mesin dengan deskripsi apa pun. Penyebut yang umum adalah (dan masih) teks. Anda dapat cukup yakin bahwa teks yang dikodekan 7-bit tidak akan hancur oleh sarana yang mendasari untuk mengirim data (sampai baru-baru ini, mengirim email dalam beberapa pengkodean 8-bit membawa jaminan bahwa penerima akan mendapatkan pesan yang dimutilasi,

Jika Anda mencari-cari di mis. Deskripsi protokol telnet atau FTP (protokol Internet pertama, ide jaringan itu adalah untuk menyambungkan jarak jauh ke "superkomputer", dan mengacak file ke sana kemari), Anda melihat bahwa koneksi termasuk negosiasi banyak detail. kami mengambil seragam,

Ya, biner akan (sedikit) lebih efisien. Tetapi mesin dan ingatan (dan juga jaringan) telah berkembang sangat pesat, jadi sedikit menabrak dahulu kala adalah sesuatu dari masa lalu (kebanyakan). Dan tidak ada orang yang waras akan menyarankan merobek semua protokol yang ada untuk menggantikannya dengan yang biner. Selain itu, protokol teks menawarkan teknik debug yang sangat berguna. Hari ini saya tidak pernah menginstal server telnet (lebih baik menggunakan protokol SSH terenkripsi untuk koneksi jarak jauh), tetapi harus telnet klien berguna untuk "berbicara" ke beberapa server yang salah untuk mencari tahu hambatan. Hari ini Anda mungkin akan menggunakan netcat atau ncat untuk menghindari ...

vonbrand
sumber
10
Kemudahan pemecahan masalah juga meningkat pesat. Membaca penangkapan paket cukup sulit, itu menjadi lebih buruk ketika aplikasi tidak mengirim pesan dalam format yang dapat dibaca manusia.
Nanban Jim
5
"Dan tidak ada orang yang waras yang akan menyarankan merobek semua protokol yang ada untuk menggantikannya dengan yang biner" - alih-alih, Anda menegosiasikan cara Anda naik dari protokol berbasis teks ke hal yang menurut Anda lebih baik, seperti dari HTTP ke apa yang sebelumnya SPDY meminta kompresi tajuk dan sekarang menjadi bagian dari HTTP / 2. Atau, dalam hal ini, dari HTTP ke tipe konten biner atau penyandian transfer.
Steve Jessop
4
Protokol teks biasa juga memungkinkan Anda memeriksa data yang berpotensi berbahaya atau tidak tepercaya. Sebagai contoh, saya menggunakan telnet ketika saya menerima beberapa upaya spam / phishing, yang sebenarnya bisa saya jamin tidak akan merusak sistem saya. Memiliki akses berbasis teks ke suatu sistem sangat penting. Meskipun demikian, bahkan hari ini, Anda akan mencatat bahwa HTTP / 1.1 jarang merupakan "teks biasa", karena header Terima-Pengkodean memungkinkan kompresi, yang didukung sebagian besar pengguna dan server browser, untuk memuat halaman lebih cepat.
phyrfox
Di Pameran Komputer Vintage Midwest, saya merasa menarik bahwa mesin seperti Altair 680 perlu menerima kode dalam format S-record Motorola, yang menggunakan 76 karakter untuk setiap 32 byte data (44 karakter overhead). Bahkan jika seseorang dibatasi untuk menggunakan set 41 karakter seperti 0-9 AZ + - * / = masih mungkin untuk mengurangi itu menjadi sesuatu yang lebih dekat dengan 57 karakter (25 karakter overhead), yang akan mengurangi waktu untuk suatu ASR-33 untuk memberi makan 1K kode dari 4 menit menjadi sekitar tiga. Mengingat kecepatan I / O yang lambat, saya bertanya-tanya mengapa hal-hal seperti itu tampaknya tidak biasa dilakukan?
supercat
24

Satu keuntungan yang mungkin terlewatkan adalah kemampuan bereksperimen . Jika Anda mendorong bit ke dalam tabung, Anda perlu menulis beberapa utilitas yang diterjemahkan EHLOke dalam 0x18atau sejenisnya. Alih-alih melakukan itu, Anda cukup telnet ke server mail, mengirim EHLOdan berada di jalan Anda.

Tidak ada yang menghalangi Anda di zaman sekarang ini untuk menulis kode di Assembly atau Brainf * ck , dan Anda mungkin menghemat beberapa bit dengan melakukannya. Namun, menjelaskan apa yang sebenarnya telah Anda lakukan kepada orang lain sehingga mereka dapat memahami dan berinteraksi dengan kode Anda tidak akan mudah jika Anda melakukannya.

Dengan protokol, penting bagi pengguna untuk dapat mempelajari cara menggunakannya, karena sebagian besar orang pada masa itu yang menggunakan ARPAnet atau awal dari Internet adalah orang-orang yang merasa nyaman di belakang terminal.

Omong-omong, omong-omong, diadakan di perusahaan hari ini. Haruskah kita membuat serial ke JSON atau BSON (representasi biner dari JSON)? Jika Anda membuat serial ke BSON, Anda menumpahkan beberapa overhead, tetapi Anda sekarang membutuhkan penerjemah untuk mengubah BSON Anda menjadi JSON dan sebaliknya, karena manusia harus membaca data itu di beberapa titik ketika sesuatu yang tidak dapat dihindari terjadi kesalahan.

Naftuli Kay
sumber
Jika protokol telah dirancang sebagai biner di tempat pertama, daripada singkatan biner untuk protokol teks, bahkan mungkin tidak ada istilah yang disepakati seperti umumnya EHLO. Setiap frontend yang dapat digunakan manusia untuk protokol biner mungkin telah membuat namanya sendiri, jika standar biner tidak menyebutkan 0x18-in-posisi-ini.
Peter Cordes
10

Bukan berarti banyak protokol internet berbasis teks. Bahkan, jika saya menebak saya akan mengatakan bahwa protokol berbasis teks adalah minoritas. Untuk hampir setiap protokol berbasis teks yang Anda lihat di internet setidaknya ada dua protokol biner yang diciptakan orang untuk mengirim data yang sama atau serupa.

Tetapi memang benar bahwa sebagian besar lalu lintas internet menggunakan protokol berbasis teks. Fakta ini menarik jika Anda berasumsi bahwa ada lebih banyak protokol biner daripada teks tetapi lebih banyak lalu lintas teks daripada biner. Ini berarti bahwa sebagian besar protokol yang berhasil di internet adalah berbasis teks. Kecuali untuk sejumlah kecil aplikasi (bittorrent adalah salah satu contohnya) protokol biner cenderung mati.

Pada hari-hari awal internet, perusahaan cenderung untuk merancang dan menggunakan protokol biner (misalnya MSN, bukan situs web MSN saat ini, Jaringan MicroSoft milik asli yang seharusnya menggantikan HTTP) sementara militer, lembaga penelitian dan akademisi cenderung untuk desain dan gunakan protokol berbasis teks. Sebagian alasannya adalah bahwa membangun dan men-debug protokol biner itu sulit dan perusahaan mampu membayar orang untuk melakukannya sementara militer, peneliti dan akademisi melakukannya di waktu luang mereka tanpa upah (sebagian besar orang yang mengembangkan internet memiliki pekerjaan yang tidak terkait dengan pengembangan internet).

Ketika Anda menulis kode pada akhir pekan sebagai hobi dan tidak dibayar untuk melakukan apa yang Anda lakukan, Anda cenderung memilih solusi yang lebih sederhana - teks. Jadi protokol berbasis teks digunakan oleh lebih banyak orang daripada protokol biner.

Tapi itu bukan cerita lengkapnya. Membangun jaringan itu sulit. Sangat sulit. Kami begitu terbiasa dengan internet saat ini sehingga kami tidak sepenuhnya menyadari betapa ajaibnya teknik itu. Hampir setiap aspek internet berevolusi dari perbaikan bug. Sebagai contoh, kami menggunakan alamat IP dan bukan alamat MAC karena itu memungkinkan kami untuk membangun router hanya dengan kilobyte (atau hari ini megabita) alih-alih terabyte RAM untuk tabel routing. Semakin banyak masalah yang kami coba selesaikan, semakin kami cenderung memilih protokol berbasis teks untuk men-debug mereka. Setelah kami memiliki cukup pengalaman mengembangkan protokol jaringan tingkat rendah, ketika tiba saatnya untuk mengembangkan protokol aplikasi, sebagian besar programmer dan insinyur yang berpengalaman cenderung lebih suka protokol teks.

Dari pengalaman pribadi, saya telah bekerja untuk sebuah perusahaan yang membangun router dan saya juga telah bekerja untuk sebuah perusahaan yang membangun peralatan telemetri jadi saya punya banyak pengalaman bekerja dengan protokol biner seperti TCP / IP, ARP, IEC60870-5- 101 dan DNP3. Saya juga bekerja dengan protokol teks seperti HTTP, POP3 dan NMEA. Saya juga bekerja dengan format data biner seperti ASN.1 dan format data teks seperti JSON dan XML. Jika saya memilih saya akan memilih teks hampir setiap waktu. Satu-satunya waktu saya akan memilih biner adalah jika protokolnya benar-benar tingkat rendah (maka saya akan menerapkan cukup sehingga saya dapat plonk protokol berbasis teks di atas atau itu) atau data secara alami biner (seperti file audio) .

Slebetman
sumber
3

Biner terstruktur juga memiliki keterbatasan dalam mengembangkannya. Ini adalah hari-hari saya bekerja dengan FidoNet dan membangun gateway antara itu dan UUCP / USNET, header pesan Fidonet adalah biner terstruktur. Memperluasnya dengan bahkan hanya mencoba menambahkan byte di suatu tempat berarti memecah semua yang ada di sana yang mencoba untuk bekerja dengannya. Memiliki header teks atau protokol berarti Anda dapat memperluas sesuatu tanpa merusak sesuatu.

Tim Pozar
sumber
Hal yang dipelajari: Masukkan tag versi dalam data biner.
Peter - Reinstate Monica
3

Pertanyaan Anda dapat ditafsirkan dalam tiga cara:

  1. Mengapa data numerik ditransmisikan dalam representasi tekstual, seolah-olah telah dicetak dengan misalnya printf()?
  2. Mengapa protokol lapisan aplikasi klasik - misalnya saluran kontrol ftp, smtp, http - secara tradisional semua menggunakan set karakter ASCII 7-bit? (7 bit ASCII dapat dianggap "teks" karena sebagian besar byte berhubungan dengan mesin terbang yang dapat dicetak atau kode kontrol teks seperti baris baru dan dari umpan.)
  3. Mengapa gumpalan data biner sering dikonversi menjadi 7 bit ascii ketika dikirim melalui internet, misalnya sebagai lampiran surat?

Jawaban yang pertama adalah interoperabilitas. Nilai integer dan floating point memiliki representasi biner yang berbeda pada mesin yang berbeda, atau bahkan kompiler, atau bahkan dengan opsi kompiler yang berbeda. Mengirimnya secara efektif melalui printf/scanfinteroperabilitas menjadi mudah. Perhatikan bahwa pilihan ini hanya dibuat untuk protokol tingkat yang lebih tinggi di mana beberapa disebutkan di atas; pada lapisan jaringan data ditransmisikan secara binarily. Untuk ini, TCP / IP mendefinisikan representasi integer biner, dan perpustakaan yang mengimplementasikan TCP / IP menyediakan sarana untuk mengkonversi antara representasi host dan jaringan dengan htonldan teman-teman.

Jawaban untuk pertanyaan kedua mungkin adalah bahwa RFC 206 (perhatikan angka rendah - 1971!) Menggambarkan protokol telnet, yang menjadi dasar banyak protokol lapisan aplikasi, sebagai pengganti teletype langsung

yang fungsinya untuk membuat terminal Sistem Online muncul ke sistem berbagi waktu yang kompatibel dengan teletype di Jaringan seolah-olah terhubung langsung ke sistem itu .

(Penekanan pada teks asli.) Setidaknya beberapa teletype dan khususnya jaringan teletype menggunakan 7 bit ASCII sebagai set karakter yang pasti membuatnya menjadi pilihan yang wajar.

Jawaban yang ketiga adalah hanya karena protokol lapisan aplikasi berbasis telnet, dan telnet adalah ascii 7 bit, banyak perangkat lunak dan perangkat keras tidak siap untuk menangani data 8 bit . Mengirim lampiran biner dapat dianggap sebagai penyalahgunaan email; karenanya simpai. Hari ini itu biasanya tidak benar lagi dan protokol terus diperluas (atau hanya digunakan) untuk langsung menangani data biner.

Peter - Pasang kembali Monica
sumber