VyÜlo v t²denφku: | COMPUTERWORLD |
╚φslo: | 27/93 |
RoΦnφk: | 1993 |
Rubrika/kategorie: | Co je Φφm ... v poΦφtaΦov²ch sφtφch |
Dφl: | 68 |
Nejprve si ale struΦn∞ p°ipome≥me pojem virtußlnφho terminßlu, kterΘmu jsme v∞novali 66. dφl serißlu: vzhledem k velkΘ r∙znorodosti skuteΦn²ch terminßl∙ nenφ dost dob°e mo₧nΘ, aby se ka₧dß aplikace p°izp∙sobovala ka₧dΘmu jednotlivΘmu terminßlu. Mφsto toho se zavedl tzv. virtußlnφ terminßl jako jednotn² mezistupe≥, kterΘmu se z jednΘ strany p°izp∙sobujφ vÜechny aplikace, a z druhΘ strany vÜechny skuteΦnΘ terminßly. Jako "virtußlnφ" je tento spoleΦn² mezistupe≥ oznaΦovßn proto, ₧e je ve skuteΦnostφ jen abstrakcφ, a nikoli fyzicky existujφcφm za°φzenφm. V 66. dφlu jsme si takΘ naznaΦili, ₧e protokol TELNET pou₧φvß zvlßÜtnφ p°φpad tzv. parametrickΘho modelu virtußlnφho terminßlu.
NVT je obousm∞rnΘ, znakov∞ orientovanΘ za°φzenφ, kterΘ lze nejlΘpe p°irovnat ke dvojici klßvesnice-tiskßrna. Klßvesnice generuje jednotlivΘ znaky v k≤du ASCII, zatφmco tiskßrna je pr∙b∞₧n∞ tiskne. Celek pak odpovφdß p°edstav∞ tzv. znakovΘho, resp. °ßdkovΘho terminßlu (scroll mode terminal, viz 66. dφl).
AΦkoli protokol TELNET vyu₧φvß pro p°enos dat spolehlivΘ a spojovanΘ p°enosovΘ slu₧by transportnφho protokolu TCP, kterΘ vytvß°φ pln∞ duplexnφ spojenφ, NVT toto spojenφ vyu₧φvß jen v poloduplexnφm re₧imu. Dφky tomu je pak mo₧nΘ vystaΦit i s takov²m skuteΦn²m terminßlem, kter² je fyzicky poloduplexnφ (jako nap°. terminßl IBM 2741).
NVT dßle p°edpoklßdß, ₧e p°enos dat bude tzv. bufferovßn - tedy ₧e data nebudou vysφlßna po jednotliv²ch znacφch, ale ₧e se budou nejprve hromadit ve vhodn²ch vyrovnßvacφch pam∞tech (anglicky: buffers), a skuteΦn∞ vysφlßny pak budou a₧ v∞tÜφ celky. JakΘ celky to ale majφ b²t?
U °ßdkovΘho terminßlu, jak²m je NVT, je jednoznaΦn²m kandidßtem °ßdka. DΘlka °ßdky ovÜem nenφ pevn∞ stanovena, a to ani u tiskßrny. Na stran∞ klienta urΦuje skuteΦnou dΘlku ka₧dΘ jednotlivΘ °ßdky u₧ivatel, kter² pracuje na p°φsluÜnΘm terminßlu - tφm, ₧e v urΦit² okam₧ik zmßΦkne tlaΦφtko ENTER, RETURN, NEW LINE Φi jak se na jeho terminßlu jmenuje klßvesa, kterou se zadßvß konec °ßdky. Klientskß slo₧ka protokolu TELNET, kterß zpracovßvß u₧ivatel∙v vstup z klßvesnice, m∙₧e na zßklad∞ zmßΦknutφ tΘto klßvesy obdr₧et r∙zn² k≤d (nap°. jen znak CR, jen znak LF, dvojici znak∙ CR a LF apod.), podle konkrΘtnφho pou₧itΘho terminßlu. Sama vÜak musφ na jeho zßklad∞ vygenerovat dvojici znak∙ CR a LF, nebo¥ virtußlnφ terminßl NVT poΦφtß s tφm, ₧e °ßdky budou zakonΦovßny prßv∞ tφmto zp∙sobem. Analogicky je tomu i na stran∞ serveru - aplikaΦnφ proces, kter² generuje data, urΦenß k zobrazenφ na terminßlu, je Φlenφ na jednotlivΘ °ßdky takov²m zp∙sobem, jak² p°edpoklßdß p°φsluÜnß "mφstnφ" konvence. Serverovß slo₧ka protokolu TELNET je vÜak p°ed odeslßnφm p°eklßdß do takovΘho tvaru, aby byly zakonΦeny dvojicφ CR LF.
Protokol TELNET tedy p°edpoklßdß, ₧e data budou standardn∞ p°enßÜena po cel²ch °ßdcφch. To ale nemusφ b²t v₧dy mo₧nΘ - nenφ-li dΘlka °ßdky p°edem omezena, m∙₧e se stßt, ₧e pro ni nebude k dispozici dostateΦn∞ velkß vyrovnßvacφ pam∞¥. TakΘ to ale nemusφ b²t v₧dy ₧ßdoucφ - n∞kdy m∙₧e b²t vhodnΘ, Φi dokonce nutnΘ odesφlat menÜφ celky ne₧ celΘ °ßdky, a₧ nap°. po jednotlivΘ znaky. S touto mo₧nostφ protokol TELNET poΦφtß, a doporuΦuje ji realizovat. P°esn² mechanismus, kter²m by si zdroj dat mohl vynutit jejich odeslßnφ jeÜt∞ p°ed zakonΦenφm °ßdky, je vÜak ponechßn na konkrΘtnφ implementaci.
P°itom ale platφ zßsada, ₧e pou₧itφ rozÜφ°enφ (anglicky: options) si nelze vynucovat - ka₧dß strana mß prßvo vznßÜet nßvrhy na jejich pou₧itφ, ale druhß strana mß v₧dy prßvo je odmφtnout. Dφky tomu je mo₧nΘ vystaΦit i s "hloup²mi" terminßly, jejich₧ skuteΦnΘ schopnosti nep°esahujφ minimum, po₧adovanΘ virtußlnφm terminßlem NVT, a na druhΘ stran∞ je mo₧nΘ efektivn∞ vyu₧φt mo₧nosti a schopnosti lΘpe vybaven²ch terminßl∙.
Bezprost°edn∞ po navßzßnφ spojenφ tedy ob∞ strany mohou pou₧φvat prßv∞ a pouze to, co jim zaruΦuje virtußlnφ terminßl NVT. Mohou vÜak kdykoli zahßjit "licitaci", v rßmci kterΘ se dohodnou na pou₧itφ oboustrann∞ p°ijateln²ch rozÜφ°enφ. VzßjemnΘ domlouvßnφ na pou₧itφ r∙zn²ch rozÜφ°enφ obvykle probφhß okam₧it∞ po navßzßnφ spojenφ, ale nenφ to nutnou podmφnkou. Stejn∞ tak se mohou ob∞ strany kdykoli dohodnout na tom, ₧e p°estanou urΦitΘ rozÜφ°enφ pou₧φvat. Zajφmavß je v tomto ohledu takΘ zßsada rovnoprßvnosti - ka₧dß ze stran mß stejnΘ prßvo navrhnout pou₧φvßnφ urΦitΘho rozÜφ°enφ, a stejn∞ tak m∙₧e po₧adovat i ukonΦenφ pou₧φvßnφ urΦitΘho rozÜφ°enφ (₧ßdosti tohoto typu p°itom nesmφ b²t druhou stranou odmφtnuty).
Protokol TELNET samoz°ejm∞ musφ definovat konkrΘtnφ zp∙sob, jak²m majφ ob∞ strany postupovat p°i vzßjemnΘ "licitaci" (anglicky: options negotiation). P°φsluÜn² mechanismus je ovÜem koncipovßn jako otev°en² - nem∙₧e toti₧ anticipovat vÜechna budoucφ rozÜφ°enφ, kterß budou p°ipadat v ·vahu, a tak pro n∞ nem∙₧e p°esn∞ p°edepisovat konkrΘtnφ formu "licitace". Mφsto toho ponechßvß otev°en² prostor pro individußlnφ postupy vzßjemnΘho dohadovßnφ, ale souΦasn∞ s tφm je umo₧≥uje jednoznaΦn∞ detekovat, tak aby druhß strana m∞la v₧dy mo₧nost rozpoznat, ₧e jde o nabφdku pou₧φvßnφ rozÜφ°enφ, a i kdy₧ jφ nerozumφ, mohla ji odmφtnout.
Po klßvesnici virtußlnφho terminßlu NVT je naopak po₧adovßno, aby byla schopna generovat vÜech 128 znak∙ k≤du ASCII (i kdy₧ n∞kterΘ nemajφ na tiskßrnu ₧ßdn² efekt). Krom∞ toho je po₧adovßno, aby klßvesnice NVT generovala jeÜt∞ i n∞kolik dalÜφch znak∙, kterΘ majφ v²znam °φdφcφch p°φkaz∙ protokolu TELNET (o nich bude °eΦ p°φÜt∞).
JednotlivΘ znaky sedmibitovΘho k≤du ASCII jsou ovÜem p°enßÜeny zßsadn∞ v osmi bitech. Dφky tomu je pak mo₧nΘ k nim "p°idat" jeÜt∞ i prßv∞ naznaΦenΘ °φdφcφ p°φkazy (odliÜenΘ nastavenφm nejvyÜÜφho bitu). Jako jedno z mo₧n²ch rozÜφ°enφ se ale ob∞ strany mohou dohodnout na tom, ₧e si budou p°edßvat osmibitovΘ znaky (tj. znaky, k≤dovanΘ v osmi bitech). Pak je ovÜem nutnΘ zajistit pot°ebnou transparenci - umo₧≥ujφcφ jednoznaΦn∞ odliÜit p°φkazy od "u₧iteΦn²ch dat" - jin²m zp∙sobem.