Tại sao nhiều giao thức internet dựa trên văn bản?


47

Từ những gì tôi đã tìm thấy, một rất số lượng lớn các giao thức du lịch qua internet là "dựa trên văn bản" chứ không phải là nhị phân. Các giao thức trong câu hỏi bao gồm, nhưng không giới hạn ở HTTP, SMTP, FTP (Tôi nghĩ rằng giao thức này hoàn toàn dựa trên văn bản?), WHOIS, IRC.

Trong thực tế, một số giao thức này nhảy qua một số vòng bất cứ khi nào họ muốn truyền dữ liệu nhị phân .

Có một lý do đằng sau điều này? Các giao thức dựa trên văn bản rõ ràng có một chút chi phí vì chúng yêu cầu gửi thêm dữ liệu để truyền cùng một lượng thông tin (xem ví dụ bên dưới). Những lợi ích vượt trội hơn thế này?


Theo văn bản , tôi có nghĩa là hầu hết các ký tự được sử dụng trong giao thức nằm giữa 0x20(dấu cách) và 0x7E( ~), với "ký tự đặc biệt" thỉnh thoảng được sử dụng cho các mục đích rất đặc biệt , chẳng hạn như dòng mới, null, ETX và EOT. Điều này trái ngược với việc truyền dữ liệu nhị phân thô qua kết nối.

Chẳng hạn, việc truyền số nguyên 123456dưới dạng văn bản sẽ liên quan đến việc gửi chuỗi 123456(được biểu thị bằng hex dưới dạng 31 32 33 34 35 36), trong khi giá trị nhị phân 32 bit sẽ được gửi dưới dạng (được biểu thị bằng hex) 0x0001E240(và như bạn có thể thấy, "chứa" ký tự null đặc biệt .


3
Trong số 5 giao thức được đề cập, HTTP, SMTP, WHOIS và IRC chủ yếu được hình thành để trao đổi dữ liệu văn bản.
el.pescado

4
Lưu ý rằng HTTP / 2 là một giao thức nhị phân.
isanae

4
Bạn chủ yếu đề cập đến các giao thức lớp ứng dụng và trình bày . Các giao thức cấp thấp hơn (TCP, IP, Ethernet) hầu như luôn luôn là nhị phân.
Nick T

2
FTP có chế độ nhị phân khá quan trọng để sử dụng khi truyền tệp nhị phân, vì chế độ truyền thông thường ở nhiều máy khách sẽ viết lại các kết thúc dòng để khớp với quy ước máy chủ sẽ làm hỏng các nhị phân khi chuyển giữa các máy chủ với các đầu cuối dòng khác nhau. Chế độ nhị phân này chỉ để chuyển tập tin và không ảnh hưởng đến công cụ lệnh.
casey

2
FTP thực sự sử dụng hai kết nối mạng, một dựa trên văn bản (kênh lệnh) và một nhị phân (kênh dữ liệu).
Bút danh

Câu trả lời:


40

Khi thế giới trẻ hơn và máy tính không phải là tất cả các PC được tôn vinh, kích thước từ thay đổi (tháng 12 năm 2020 chúng ta có ở đây có 36 từ), định dạng của dữ liệu nhị phân là một vấn đề gây tranh cãi (endian lớn so với endian nhỏ và thậm chí là kỳ lạ thứ tự của bit là hợp lý phổ biến). Có rất ít sự đồng thuận về kích thước / mã hóa ký tự (ASCII, EBCDIC là đối thủ chính, DEC của chúng tôi có 5/6/7/8 bit / mã hóa ký tự). ARPAnet (tiền thân Internet) được thiết kế để kết nối các máy theo bất kỳ mô tả nào. Mẫu số chung là văn bản (và vẫn là). Bạn có thể chắc chắn một cách hợp lý rằng văn bản được mã hóa 7 bit sẽ không bị xáo trộn bởi các phương tiện cơ bản để gửi dữ liệu xung quanh (cho đến gần đây, việc gửi email trong một số mã hóa 8 bit mang đến sự đảm bảo rằng người nhận sẽ nhận được tin nhắn bị cắt xén,

Nếu bạn lục lọi trong các mô tả giao thức telnet hoặc FTP (các giao thức Internet đầu tiên, thì ý tưởng mạng sau đó là kết nối từ xa với "siêu máy tính" và xáo trộn các tập tin qua lại), bạn sẽ thấy rằng kết nối bao gồm nhiều thỏa thuận chi tiết chúng tôi lấy đồng phục,

Có, nhị phân sẽ hiệu quả hơn (một chút). Nhưng máy móc và ký ức (và cả mạng lưới) đã phát triển rất lớn, do đó, việc thu thập thông tin một chút về quá khứ là một điều của quá khứ (chủ yếu). Và không ai trong tâm trí bên phải của họ sẽ đề xuất trích xuất tất cả các giao thức hiện có để thay thế chúng bằng các giao thức nhị phân. Bên cạnh đó, các giao thức văn bản cung cấp một kỹ thuật sửa lỗi rất hữu ích. Hôm nay tôi không bao giờ cài đặt máy chủ telnet (sử dụng tốt hơn giao thức SSH được mã hóa cho các kết nối từ xa), nhưng phải sử dụng máy khách telnet để "nói chuyện" với một số máy chủ sai lầm để tìm ra snags. Hôm nay bạn có thể sử dụng netcat hoặc ncat để làm quen với ...


10
Dễ dàng xử lý sự cố cũng được cải thiện rất nhiều. Đọc một gói chụp đủ khó, thậm chí còn tệ hơn khi các ứng dụng không gửi tin nhắn ở định dạng có thể đọc được.
Nanban Jim

5
"Và không ai trong tâm trí của họ sẽ đề xuất trích xuất tất cả các giao thức hiện có để thay thế chúng bằng giao thức nhị phân" - thay vào đó, bạn đàm phán theo cách của bạn từ các giao thức dựa trên văn bản đến điều bạn nghĩ là tốt hơn, như từ HTTP sang những gì Nén tiêu đề yêu cầu SPDY và ​​hiện là một phần của HTTP / 2. Hoặc, đối với vấn đề đó, từ HTTP đến loại nội dung nhị phân hoặc mã hóa chuyển.
Steve Jessop

4
Các giao thức văn bản thuần túy cũng cho phép bạn kiểm tra một cách an toàn dữ liệu nguy hiểm hoặc không đáng tin cậy. Ví dụ: tôi sử dụng telnet khi tôi nhận được một số nỗ lực spam / lừa đảo mà tôi hầu như có thể đảm bảo sẽ không gây hại cho hệ thống của mình. Có quyền truy cập dựa trên văn bản vào một hệ thống là rất quan trọng. Tuy nhiên, ngay cả ngày nay, bạn sẽ lưu ý rằng HTTP / 1.1 hiếm khi là "văn bản thuần túy", bởi vì tiêu đề Mã hóa chấp nhận cho phép nén, mà hầu hết các trình duyệt và máy chủ hỗ trợ, để tải trang nhanh hơn.
phyrfox

Tại Hội chợ máy tính cổ điển ở Trung Tây, tôi thấy thật thú vị khi các máy như Altair 680 cần nhận mã ở định dạng bản ghi S của Motorola, sử dụng 76 ký tự cho mỗi 32 byte dữ liệu (44 ký tự trên cao). Ngay cả khi một người bị giới hạn sử dụng bộ 41 ký tự như 0-9 AZ + - * / = thì vẫn có thể giảm mức đó xuống gần 57 ký tự (25 ký tự trên cao), điều này sẽ giảm thời gian cho một ASR-33 để cung cấp 1K mã từ 4 phút đến khoảng ba. Với tốc độ I / O chậm, tôi tự hỏi tại sao những việc như vậy dường như không được thực hiện phổ biến?
supercat

24

Một lợi thế có thể bị bỏ qua là khả năng thử nghiệm . Nếu bạn đang đẩy các bit xuống ống, bạn sẽ cần phải viết một số tiện ích dịch EHLOsang 0x18hoặc tương tự. Thay vì làm điều đó, bạn có thể chỉ cần telnet vào một máy chủ mail, gửi EHLOvà theo cách của bạn.

Không có gì ngăn cản bạn trong thời đại ngày nay viết mã trong hội hoặc Brainf * ck , và bạn rất có thể tiết kiệm một số bit bằng cách làm như vậy. Tuy nhiên, giải thích chính xác những gì bạn đã làm với người khác để họ có thể hiểu và tương tác với mã của bạn sẽ không dễ dàng nếu bạn làm như vậy.

Với các giao thức, điều quan trọng là người dùng sẽ có thể dễ dàng học cách sử dụng chúng, vì hầu hết mọi người trở lại vào thời điểm sử dụng ARPAnet hoặc sự khởi đầu của Internet là những người cảm thấy thoải mái sau thiết bị đầu cuối.

Bằng cách này, tranh luận tương tự, được tổ chức tại các công ty ngày nay. Chúng ta nên tuần tự hóa thành JSON hoặc BSON (biểu diễn nhị phân của JSON)? Nếu bạn tuần tự hóa thành BSON, bạn đã bỏ qua một số chi phí, nhưng bây giờ bạn cần một người dịch để chuyển đổi BSON của bạn thành JSON và ngược lại, vì một con người sẽ phải đọc dữ liệu đó vào một lúc nào đó khi có sự cố chắc chắn xảy ra.


Nếu các giao thức đã được thiết kế dưới dạng nhị phân ở vị trí đầu tiên, thay vì tốc ký nhị phân cho giao thức văn bản, thì thậm chí có thể không một thuật ngữ thường được thống nhất như thế EHLO. Mỗi lối vào có thể sử dụng được của con người cho giao thức nhị phân có thể tạo nên tên riêng của họ, nếu tiêu chuẩn nhị phân không đặt tên 0x18- trong vị trí này.
Peter Cordes

10

Nó không phải là nhiều giao thức internet dựa trên văn bản. Trong thực tế, nếu tôi đoán tôi sẽ nói rằng các giao thức dựa trên văn bản là thiểu số. Đối với hầu hết mọi giao thức dựa trên văn bản mà bạn thấy trên internet, có ít nhất hai giao thức nhị phân mà mọi người đã phát minh ra để gửi cùng một dữ liệu hoặc tương tự.

Nhưng sự thật là phần lớn lưu lượng truy cập internet sử dụng các giao thức dựa trên văn bản. Thực tế này rất thú vị nếu bạn cho rằng có nhiều giao thức nhị phân hơn văn bản nhưng nhiều lưu lượng văn bản hơn nhị phân. Nó có nghĩa là hầu hết các giao thức thành công trên internet là dựa trên văn bản. Ngoại trừ một số lượng nhỏ các ứng dụng (bittorrent là một ví dụ) các giao thức nhị phân có xu hướng chết.

Trong thời kỳ đầu của Internet, các tập đoàn có xu hướng thiết kế và sử dụng giao thức nhị phân (ví dụ MSN, không phải trang web MSN ngày nay, Mạng MicroSoft độc quyền ban đầu được cho là thay thế HTTP) trong khi quân đội, viện nghiên cứu và học giả có xu hướng thiết kế và sử dụng giao thức dựa trên văn bản. Một phần lý do là việc xây dựng và gỡ lỗi các giao thức nhị phân là khó khăn và các công ty có thể trả tiền cho mọi người để làm điều đó trong khi quân đội, các nhà nghiên cứu và học giả đang làm việc đó trong thời gian rảnh rỗi mà không phải trả tiền (hầu hết những người phát triển internet đều có công việc không liên quan đến phát triển internet).

Khi bạn viết mã vào cuối tuần như một sở thích và không được trả tiền để làm những gì bạn làm, bạn có xu hướng chọn giải pháp đơn giản hơn - văn bản. Vì vậy, các giao thức dựa trên văn bản đã được sử dụng bởi nhiều người hơn các giao thức nhị phân.

Nhưng đó không phải là câu chuyện đầy đủ. Xây dựng một mạng lưới là khó khăn. Thực sự khó khăn. Ngày nay chúng ta đã quá quen với internet đến nỗi chúng ta không nhận ra đầy đủ điều kỳ diệu của kỹ thuật. Hầu như mọi khía cạnh của Internet phát triển từ một sửa lỗi. Ví dụ: chúng tôi sử dụng địa chỉ IP thay vì địa chỉ MAC vì nó cho phép chúng tôi xây dựng các bộ định tuyến chỉ với kilobyte (hoặc ngày nay là megabyte) thay vì terabyte RAM cho bảng định tuyến. Chúng tôi càng cố gắng giải quyết càng nhiều vấn đề, chúng tôi càng có xu hướng thích các giao thức dựa trên văn bản để gỡ lỗi chúng. Một khi chúng ta đã có đủ kinh nghiệm phát triển các giao thức mạng cấp thấp, khi đến lúc phát triển các giao thức ứng dụng, hầu hết các lập trình viên và kỹ sư giàu kinh nghiệm có xu hướng thích các giao thức văn bản.

Từ kinh nghiệm cá nhân, tôi đã làm việc cho một công ty xây dựng bộ định tuyến và tôi cũng từng làm việc cho một công ty xây dựng thiết bị đo từ xa nên tôi có nhiều kinh nghiệm làm việc với các giao thức nhị phân như TCP / IP, ARP, IEC60870-5- 101 và DNP3. Tôi cũng đã làm việc với các giao thức văn bản như HTTP, POP3 và NMEA. Tôi cũng đã làm việc với các định dạng dữ liệu nhị phân như ASN.1 và các định dạng dữ liệu văn bản như JSON và XML. Nếu tôi chọn tôi sẽ chọn văn bản gần như mọi lúc. Lần duy nhất tôi chọn nhị phân là nếu giao thức thực sự ở mức thấp (sau đó tôi sẽ triển khai vừa đủ để tôi có thể sao chép giao thức dựa trên văn bản lên trên hoặc nó) hoặc dữ liệu là nhị phân tự nhiên (như tệp âm thanh) .


3

Cấu trúc nhị phân cũng có những hạn chế trong việc mở rộng nó. Đó là những ngày tôi làm việc với FidoNet và xây dựng một cửa ngõ giữa nó và UUCP / USNET, các tiêu đề thư của Fidonet là một nhị phân có cấu trúc. Mở rộng nó bằng cách thậm chí chỉ cần cố gắng thêm một byte ở đâu đó có nghĩa là phá vỡ mọi thứ ngoài kia đang cố gắng làm việc với nó. Có một tiêu đề văn bản hoặc giao thức có nghĩa là bạn có thể mở rộng một cái gì đó mà không phá vỡ mọi thứ.


Bài học rút ra: Đặt thẻ phiên bản trong dữ liệu nhị phân.
Peter - Tái lập Monica

3

Câu hỏi của bạn có thể được giải thích theo ba cách:

  1. Tại sao dữ liệu số được truyền trong biểu diễn văn bản, như thể nó đã được in với ví dụ printf()?
  2. Tại sao các giao thức lớp ứng dụng cổ điển - ví dụ: kênh điều khiển ftp, smtp, http - theo truyền thống đều sử dụng bộ ký tự ASCII 7 bit? (ASCII 7 bit có thể được coi là "văn bản" vì hầu hết các byte tương ứng với glyphs có thể in hoặc mã điều khiển văn bản như dòng mới và từ nguồn cấp dữ liệu.)
  3. Tại sao các đốm dữ liệu nhị phân thường được chuyển đổi thành 7 bit ascii khi chúng được gửi qua internet, ví dụ như một tệp đính kèm thư?

Câu trả lời đầu tiên là khả năng tương tác. Các số nguyên và giá trị dấu phẩy động có các biểu diễn nhị phân khác nhau trên các máy khác nhau, hoặc thậm chí các trình biên dịch hoặc thậm chí chỉ với các tùy chọn trình biên dịch khác nhau. Truyền chúng hiệu quả thông qua printf/scanflàm cho khả năng tương tác dễ dàng. Lưu ý rằng lựa chọn này chỉ được thực hiện cho các giao thức cấp cao hơn trong đó một số ít được đề cập ở trên; trên dữ liệu lớp mạng được truyền một cách nhị phân. Đối với điều này, TCP / IP định nghĩa biểu diễn số nguyên nhị phân và các thư viện triển khai TCP / IP cung cấp phương tiện để chuyển đổi giữa các biểu diễn mạng và máy chủ vớihtonl và bạn bè.

Câu trả lời cho câu hỏi thứ hai có lẽ là RFC 206 (lưu ý số thấp - 1971!) Mô tả giao thức telnet, dựa trên nhiều giao thức lớp ứng dụng, như một sự thay thế teletype trực tiếp

có chức năng làm cho thiết bị đầu cuối của Hệ thống trực tuyến xuất hiện với bất kỳ hệ thống chia sẻ thời gian, tương thích teletype nào trong Mạng như thể nó được kết nối trực tiếp với hệ thống đó .

(Nhấn mạnh trong văn bản gốc.) Ít nhất một số loại teletype và các mạng teletype cụ thể đã sử dụng ASCII 7 bit làm bộ ký tự phải làm cho nó trở thành một lựa chọn tự nhiên.

Câu trả lời cho câu hỏi thứ ba đơn giản là vì các giao thức của lớp ứng dụng dựa trên telnet và telnet là 7 bit ascii, phần mềm và phần cứng không được chuẩn bị để xử lý dữ liệu 8 bit . Gửi tệp đính kèm nhị phân có thể được coi là lạm dụng email; do đó các vòng. Ngày nay, điều đó thường không còn đúng nữa và các giao thức được mở rộng liên tục (hoặc đơn giản là được sử dụng) để xử lý trực tiếp dữ liệu nhị phân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.