23. TCP dzīves ilguma taimeris

Last modified by Valdis Vītoliņš on 2018/01/15 21:44

23. TCP dzīves ilguma taimeris

23.01 Ievads

Daudzi jaunienācēji TCP/IP pasaulē ir pārsteigti uzzinot, ka pa nenoslogotu TCP savienojumu neplūst vispār nekādi dati. T.i., ja neviens process TCP savienojuma galos nesūta datus uz otru, tad atbilstošie TCP moduļi neapmainās ne ar kādiem ziņojumiem. Nepastāv aptaujāšana, piemēram, kā tas notiek citos tīklu protokolos. T.i. mēs varam uzsākt klienta procesu, kurš izveido TCP savienojumu ar serveri un pamest to uz stundām, dienām, nedēļām vai mēnešiem, bet konekcija joprojām pastāv. Maršrutētāji savienojumam pa vidu var nobrukt un pārstartēties, telefona līnijas var pārtrūkt un tikt atjaunotas, bet kamēr vien neviens hosts savienojuma galos nepārstartējas, savienojums paliek izveidots. 

Tas tā ir ar pieņēmumu, ka neviena no aplikācijām - ne klienta ne servera galā neizveido taimerus, lai konstatētu tīkla neaktivitāti, kas liktu kādai no aplikācijām beigties vai pārtraukt savienojumu. Atcerēsimies, ka 10.7.nodaļas nodaļas beigās BGP sūta aplikācijas provi uz otru galu ik pēc 30 sekundēm. Tas ir aplikācijas taimeris, kurš ir neatkarīgs no TCP dzīves ilguma taimera. 

Ir tomēr gadījumi, kad serveris vēlas zināt, vai klienta hosts ir nobrucis un joprojām nedarbojas, vai arī ir nobrucis un pārstartējies. Dzīves ilguma taimeris, kas ir daudzu TCP implementāciju funkcija, dod šādu iespēju. 

Dzīves ilgums nav daļa no TCP specifikācijas. Hosta prasību RFC sniedz 3 iemeslus, kādēļ tos nevajag lietot: 

  • Tie var nomest labas konekcijas, pateicoties pārejošām kļūdām
  • Tie nevajadzīgi patērē tīkla resursus
  • Tie maksā naudu, tad, ja samaksu aprēķina pēc nosūtīto pakešu skaita. 

Neraugoties uz šiem iemesliem daudzas implementācijas dzīvesilguma taimeri tomēr piedāvā.

Dzīvesilguma taimeris ir strīdīga funkcija. Daudzi uzskata, ka otra gala aptaujāšanai nav vietas TCP un to var darīt aplikācija, ja tā to vēlas. Šis ir viens no ticības jautājumiem, par ko daudziem ir dedzīgs viedoklis. 

Dzīvesilguma opcija var likt citādi labam savienojumam tikt pārtrauktam, ja uz brīdi pazūd savienojums tīklā, kas savieno abus galus. Piemēram, ja dzīves ilguma proves sūta, kad kāds maršrutētājs ir nobrucis un tiek pārstartēts, TCP nodomās, ka klienta hosts ir nobrucis, kas nav patiesība. 

Dzīvesilguma funkcija ir domāta servera aplikācijām, kuras var būt rezervējušas resursus klienta apkalpošanai, un kurām jāzina, ja klienta aplikācija ir nobrukusi. Daudzas telnet un rlogin versijas nodrošina dzīves ilguma opciju pēc noklusēšanas. 

Izplatīts piemērs, kas parāda dzīves ilguma nepieciešamību ir, kad darbstacija izmanto TCP/IP, lai ielogotos hosta datorā ar telnet. Ja dienas beigās darbstaciju vienkārši izslēdz, neizlogojoties no telneta, paliek pusatvērts savienojums.18.16.attēlā parādījām kā sūtot datus pa pusatvērtu savienojumu varēja izraisīt "reset". Bet tas notika klienta galā, kur klients sūtīja datus. Ja klients pats pazūd, atstājot pusatvērtu savienojumu servera galā, un serveris gaida datus no klienta, serveris tos gaidīs mūžīgi. Dzīves ilguma funkcijas nolūks ir atpazīt šādus pusatvērtos savienojumus servera pusē.