Prestaň sa báť protokolov za 2 minúty! Vytvoril som jeden aj pre svoj toastovač.

Čo ti napadne, ak poviem HTTP protocol? Alebo FTP protokol? A čo tak Telnet?

Jasné, vieme kde a prečo sa využívajú… Ale čo tam znamená to slovo protokol?

Pre mňa to bol dlho záhadný pojem: “Hmm, asi nejaká mágia čo teleportuje obsah zo servera do môjho browsera.”

Pamätám si ale, že keď som to konečne pochopil, tak ma to dosť pobavilo. ” … to je fakt také očividné!”

Keď pochopíme čo to vlastne znamená “protocol” v podstate pochopíme aj všetky ostatné protokoly. Minimálne teda ich podstatu.

Bez toho, aby som to ďalej zbytočne naťahoval:

“Protocol je v networkingu množina pravidiel a usmernení, diktujúce ako by sa mali dáta prenášať cez sieť.”

Polopatisticky povedané:

“If-else statementy rozparsovaných stringov prenášaných na internete”

Nižšie je jednoduchý protokol v Cčku zbúchaný na kolene, s ktorým by som mohol ovládať ako dlho trvá môjmu toastovaču urobiť jeden toast podľa toho, či sa ponáhľam alebo nie:

#include <stdio.h>
#include <string.h>

# define SENDER "Me"
# define RECEIVER "My toaster"

# define PROTOCOL_ID "MAKE_MY_TOAST"

void send_data(char *data, char *headers) {
  char protocol_header[100];
  sprintf(protocol_header, "%s %s -> %s (%s)", SENDER, PROTOCOL_ID, RECEIVER, data);
  printf("Sending data: %s\n", protocol_header);
}

void receive_data(char *data, char *headers) {
    if (strncmp(SENDER, headers[0], strlen(SENDER)) == 0) {
        printf("Data received: %s\n", data);
    } else {
        printf("Invalid data received.\n");
    }
}

int main() {
    char headers[][20] = {SENDER,PROTOCOL_ID,RECEIVER}
    char am_i_in_a_hurry[] = "YES";
    send_data(am_i_in_a_hurry,headers);
    receive_data(am_i_in_a_hurry,headers);
    return 0;
}

Chápeme čo sa deje? Niekto niekomu pošle string, ten druhý niekto ho rozparsuje a na základe predom daných pravidiel (teda na základe porotokolu) pochopí, čo v ňom je.

Teraz, ti napríklad ukážem jednoduchý HTTP GET request. Zrazu je už cca vidno, čo všetky tie headrse asi znamenajú:

GET /index.html HTTP/1.1
Host: www.michalpavlis.sk
User-Agent: SomeBrowser/1.0
Accept: text/html,application/xhtml+xml
X-XSS-Protection: 1
Accept-Encoding: gzip, deflate
Connection: keep-alive

Ak by sme nevedeli absolútne nič o HTTP requestoch a vedeli čo je protocol, možno by sme aspoň pochopili, že ide o inštrukcie. Hlavne v prvom riadku.

Keby sme chceli ešte väčšiu párty: Predstav si, že som ti hackol počítač a uložil si na svoj súkromný server heslo od tvojho Internet Bankingu. Z neznámych dôvodov sa k ním musím dostať cez Telnet:

Stačia nám len tieto dva headre, aby bol request v súlade s HTTP protokolom a aby sme dostali naspäť plnohodnotnú odpoveď (tvoje heslo som vyfotošopoval):

Toto sú samozrejme iba jednoduché príklady. Naozajstné protokoly sú o trošku zložitejšie (ale fakt len o kus).

Mať dobre definovaný protokol je dôležité z mnohých praktických, bezpečnostných a funkčných dôvodov. To samozrejme znamená, že musia mať dobre-organizovanú a priehľadnú dokumentáciu – čo znamená, že najlepšie bude mať pravidlá na to, ako dokumentovať protokoly.

Tým sa dostávame k RFC, a.k.a protokol k písaniu protokolov, čím sa vlastne uzatvára kruh…

Protokol = pravidlá.

A to je vlastne všetko, čo potrebuješ vedieť. Od teraz sa už nemusíš nikdy báť žiadného zo stoviek existujúcich internetových protokolov.

Leave a Reply

Your email address will not be published. Required fields are marked *