24.03. Garas resnās caurules

Pēdējais mainījis Administrator 2011-06-06 17:16

24.03. Garas resnās caurules

20.07.nodaļā? parādījām, ka savienojuma #term("kapacitāte", "capacity") ir:
capacity.gif
un nosaucām to par joslas platuma un #term("aiztures", "delay") reizinājumu. To sauc arī par caurules izmēru starp diviem galapunktiem.

TCP protokola ierobežojumi atklājas, kad šis reizinājums pieaug uz arvien augstākām un augstākām vērtībām. 24.5.attēls parāda dažas vērtības dažādiem tīklu tipiem.

#pic("f_24_5.gif", "500")
24.5.attēls: Joslas platuma un aiztures reizinājums dažādiem tīkliem

Mēs parādām joslas platuma un aiztures reizinājumu baitos, jo tas ir tas, kā mēs parasti mērām buferu izmērus un logu izmērus, kas vajadzīgi katrā galā.

Tīkli ar lieliem joslas platuma un aiztures reizinājumiem tiek saukti par #term("garajiem/resnajiem tīkliem", "long_fat_network") (angļu akronīms šiem tīkliem LFN, ko izrunā "elefanti"), un TCP savienojumu, kas darbojas garā/resnā savienojumā sauc par #term("garu resno cauruli", "long_fat_pipe"). Atgriežoties pie #picref("f_20_11.gif", "20.11.attēla") un #picref("f_20_12.gif", "20.12.attēla") cauruli var pastiept horizontālā virzienā (garāks aprites laiks - RTT), vai var pastiept vertikālā virzienā (augstāks joslas platums), vai abos virzienos. Garās resnajās caurulēs sastopamas dažādas problēmas.

  1. TCP loga izmērs ir 16 bitu lauks TCP sākumposmā, kas ierobežo loga izmēru ar 65535 baitiem. Kā varam redzēt no pēdējās kolonnas #picref("f_24_5.gif", "24.5.attēlā"), jau pašlaik eksistējošie tīkli prasa lielākus logus par šo, lai sasniegtu maksimālu #term("caurlaidspēju", "throughput").
    The window scale option described in Section 24.4 solves this problem.
  2. Pakešu zaudēšana #term("LFNā", "long_fat_network") var jūtami samazināt caurlaidību. Ja pazūd kaut viens segments, ātrās #term("atkalsūtīšanas", "retransmit") un #term("ātrās atkopšanās", "fast_recovery") algoritms, ko aprakstījām 21.7.nodaļā?, ir nepieciešams, lai caurulē neapturētu straumi. Bet pat ar šo algoritmu, vairāk nekā vienas paketes zudums viena loga ietvaros parasti aptur straumi. (Ja caurule ir sausa, lēnais starts var plūsmu atjaunot, bet tam nepieciešami vairāki #term("aprites laiki", "round_trip_time").)
    Selektīvie apstiprinājumi (SACK'i) tika piedāvāti RFC 1072 [Jacobson and Braden 1988] lai tiktu galā ar vairāku pazudušo pakešu problēmu vienā logā. Bet šo funkciju neizmanto RFC 1323, jo autori juta, ka ir jāatrisina vairākas tehniskas problēmas, pirms šo risinājumu iekļaut TCP standartā.
  3. 21.04.nodaļā? redzējām, ka daudzas TCP implementācijas mēra vienīgi aprites laiku uz visu logu. Tās nemēra RTT katram segmentam. Lai darbotos LFN'ā, ir vajadzīgi labāki RTT mērījumi.
    Laikspiedoga opcija, ko aprakstām 24.5.nodaļā, ļauj vairākiem segmentiem tikt fiksētiem laikā, ieskaitot atkalsūtīšanas.
  4. TCP identificē katru baitu ar 32-bitu bezzīmes virknes numuru. Kas var novērst kāda segmenta novēlotu ierašanos pēc tam, kad savienojums, ar kuru tas saistīts ir aizvērts un starp tām pašām mītnēm un portu numuriem izveidots jauns savienojums? Vispirms atcerēsimies, ka TTL lauks IP sākumposmā uzliek augšējo robežu katras IP datagrammas dzīves laikam - 255 lēcieni vai 255 sekundes, atkarībā no tā, kas iestājas vispirms. 18.06.nodaļā? definējām #term("maksimālo segmenta dzīvesilgumu", "maximum_segment_lifetime") (MSL) kā implementācijas parametru, ko izmanto, lai šāds scenārijs nebūtu iespējams. Ieteicamā MSL vērtība ir 2 minūtes (2MSL ir 240 sekundes). Bet 18.06.nodaļā? redzējām, ka daudzas implementācijas izmanto MSL vērtību 30 sekundes.
  5. LFN'os parādās vēl cita problēma saistībā ar TCP virknes numuriem. Tā kā virknes numuru apgabals ir galīgs, tas pats virknes numurs tiek #term("atkalizmantots", "reuse") pēc 4,294,967,296 baitu pārsūtīšanas. Kas notie, ja segments, kurš satur baitu ar virknes numuru N tiek novēlots tīklā un tad vēlāk parādās, kamēr savienojums vēl pastāv? Šāda problēma pastāv tikai tad, ja tas pats virknes numurs N tiek atkalizmantots viena MSL perioda ietvaros, t.i. ja tīkls ir tik ātrs, ka virknes numuru aptīšanās notiek mazākā laikā nekā MSL. Ethernet'ā ir vajadzīgas gandrīz 60 minūtes, lai pārsūtītu tik daudz datu, tādēļ tas nevar gadīties, bet aptīšanai nepieciešamais laiks samazinās, kad pieaug #term("caurlaidspēja", "bandwidth"): T3 telefonu līnija (45 Mb/sec) aptinas pēc 12 minūtēm, FDDI (100 Mb/sec) pēc 5 minūtēm, un gigabitu tīklā (1000 Mb/sec) jau pēc 34 sekundēm. Problēmu šeit rada nevis #term("caurlaidspējas", "throughput") un #term("kavēšanās", "delay") reizinājums, bet pati caurlaidspēja.
    24.06.nodaļā aprakstīsim veidu, kā ar to strādāt: PAWS algoritms (aizsardzība pret virknes numuru aptīšanos), kas izmanto TCP laikspiedoga opciju.

4.4BSD satur visas šīs opcijas un algoritmus, ko aplūkosim turpmākajās apakšnodaļās: loga mēroga opciju, laikspiedoga opciju un aizsardzību pret #term("virknes numuru aptīšanos", "wrapped_sequence_numbers"). Daudzskaitlīgi piegādātāji arī sāk atbalstīt šīs opcijas.

Gigabitu tīkli

Kad tīkli sasniedz gigabitu ātrumus, daudzas lietas izmainās. [Partridge 1994] izklāsta gigabitu tīklus detalizēti. Šeit apskatīsim atšķirības starp #term("novēlošanos", "latency") un #term("joslas platumu", "bandwidth"). [Kleinrock 1992].

Aplūkosim viena miljona baitu faila sūtīšanu pāri ASV, pieņemot, ka ir 30 ms novēlošanos. 24.6.attēls parāda divus scenārijus - augšējā ilustrācija izmanto T1 telefona līniju (1,544,000 b/sec) un apakšējā izmanto 1 Gb/sec tīklu. Laiks ir attēlots uz x-ass, kur sūtītājs ir kreisajā pusē, saņēmējs - labajā pusē un kapacitāte atzīmēta uz y-ass. Iekrāsotais laukums abos attēlos apzīmē vienu miljonu baitu, ko vajag nosūtīt.

#pic("f_24_6.gif", "500")
24.6.attēls: 1MB faila nosūtīšana tīklos ar 30 ms novēlošanos

24.6.attēls parāda abu tīklu stāvokli pēc 30 ms. Abos tīklos pirmais datu bits sasniedz galamērķi pēc 30 ms (novēlošanās), bet T1 tīkla gadījumā caurules kapacitāte ir tikai 5790 baiti, tādēļ 994,210 baiti joprojām gaida pie sūtītāja. Gigabita tīkla kapacitāte turpretī ir 3,750,000 baiti, tātad viss fails izmanto nedaudz vairak par 25% no caurules. Pēdējais bits šajā failā sasniedz saņēmēju 8 ms pēc pirmā bita.

Pilnais laiks, lai nosūtītu failu pa T1 tīklu ir 5.211 sekundes. Ja mēs šo pašu uzdevumu risinātu ar palielinātu joslas platumu (T3 tīklu ar ātrumu 45,000,000 b/sec), tad kopējais laiks samazinās līdz 0.208 sekundēm. Palielinot joslas platumu par reizinātāju 29, samazina pārsūtīšanas laiku 25 reizes.

Gigabita tīkla gadījumā kopējais laiks, lai nosūtītu failu ir 0.038 sekundes: 30 ms novēlošanās plus 8 ms faila #term("nosūtīšanai", "transfer"). Pieņemsim, ka varētu divreiz palielināt joslas platumu līdz 2 Gb/sec, tad kopīgo laiku varētu samazināt līdz 0.034 sekundēm: tā pati 30 ms novēlošanās plus 4 ms, lai pārsūtītu failu. Dubultojot joslas platumu, samazina pilno pārsūtīšanas laiku tikai par 10%. Pie gigabitu ātrumiem mūs ierobežo novēlošanās nevis joslas platums.

Novēlošanos izraisa gaismas ātrums un to nevar samazināt. Konstantās novēlošanās iespaids kļūst vēl sliktāks, ja aplūko paketes, kuras izveido un slēdz konekciju. Gigabitu tīkli izraisīs vairākas tīklošanās problēmas, uz ko jāskatās citādi nekā parasti.

Tagi:
Izveidojis Kalvis Apsītis 2008-05-20 20:27
    
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 6.4 - Documentation