21. TCP noildze un atkārtota pārraide

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

21. TCP noildze un atkārtota pārraide

21.01 Ievads

TCP nodrošina drošu transporta slāni. Viens no mehānismiem, kā tiek nodrošināts drošums, ir katram galam apstiprināt datus, ko tas saņem no otra gala. Bet datu segmenti un arī paši apstiprinājumi var pazust. TCP ar to tiek galā, uzstādot noildzi, kad tas izsūta datus - ja apstiprinājums nepienāk pēc noildzes beigām, tas #term("atkalraida","retransmit") datus. Kritisks elements jebkurai implementācijai ir noildzes un pārsūtīšanas stratēģija. Kā noteikt noildzes intervālu un cik bieži notiek pārsūtīšana?

Esam redzējuši divus pārsūtīšanas piemērus:

  • ICMP "port unreachable" piemērā 6.5.nodaļā mēs redzējām, ka TFTP klientu, kurš lieto vienkāršu (un slikti strādājošu) noildzes un pārsūtīšanas stratēģiju: tas pieņem, ka 5 sekundes ir pietiekams laika posms un pārsūtīja ik pēc 5 sekundēm.
  • ARP piemērā ar neeksistējošu hostu (4.5.nodaļa) redzējām, ka TCP centās izveidot konekciju, kur tā pārsūtīja SYN, izmantojot arvien garāku intervālu pirms katras atkārtotās pārraides. TCP katrai konekcijai uztur 4 dažādus taimerus:
  1. #term("Atkalraides taimeri","retransmission_timer") lieto, kad sagaida apstiprinājumu no otra gala. Šī nodaļa iztirzā šo taimeri, aplūkojot arī saistītos aspektus, piemēram, izvairīšanos no #term("pārblīves", "congestion").
  2. #term("Noturības teimeris", "persist_timer") turpina sūtīt informāciju pat ja otrs gals aizver savu saņemšanas logu. Šis taimeris aprakstīts 22.nodaļā.
  3. #term("Dzīves ilguma taimeris", "keepalive_timer") noskaidro, kurā brīdī otrs gals citādi nenoslogotai konekcijai #term("nobrūk", "crash") vai tiek #term("pārstartēts", "reboot").
  4. #term("2MSL taimeris", "2MSL_timer") mēra laiku, ko konekcija pavadījusi TIME_WAIT stāvoklī.
We described this state in Section 18.6.

Šajā nodaļā sākam ar vienkāršu TCP noildzes un pārsūtīšanas piemēru un tad pārejam uz lielāku piemēru, kas ļauj apskatīt visas TCP taimeru pārvaldības nianses. Aplūkosim kā tipiskas implementācijas mēra #term("aprites laiku", "round_trip_time") TCP segmentiem, un kā TCP izmanto šos mērījumus, lai novērtētu nākamā segmenta atkārtotas pārraides noildzi. Pēc tam apskatīsim TCP #term("izvairīšanos no pārblīves", "congestion_avoidance") - ko TCP dara, kad paketes tiek pazaudētas un aplūkosim piemēru kur tās tiek pazaudētas. Aplūkosim arī jaunākus #term("ātras atkalraides", "fast_retransmit") un #term("ātras atkopšanas", "fast_recovery") algoritmus un redzēsim kā tie ļauj TCP konstatēt pazaudētās paketes ātrāk nekā sagaidot noildzes beigas.

Tagi:
Izveidojis Kalvis Apsītis 2008-03-22 12:34
    
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 6.4 - Documentation