24.06. PAWS - aizsardzība pret virknes numuru aptīšanos
24.06. PAWS - aizsardzība pret virknes numuru aptīšanos
Aplūkosim TCP savienojumu, kas izmanto loga mērogošanas opciju ar lielāko iespējamo logu 1 gigabaits (GB = 230 baiti). (Lielākais logs ir nedaudz mazāks - 65535 x 214, nevis 216 x 214, bet tas neiespaido tālāko spriedumu.) Pieņemam arī, ka tiek izmantota laikspiedoga opcija un, ka laikspiedoga vērtība, ko piešķir sūtītājs, palielinās par 1 uz katru nosūtīto logu (Tas ir konservatīvs novērtējums; parasti laikspiedogs palielinās ātrāk.) 24.8.attēls parāda iespējamo datu plūsmu starp divām mītnēm, kad tiek pārsūtīti 6 gigabaiti. Lai izvairītos no daudziem 10-ciparu skaitļiem, izmantojam G, kas apzīmē skaitli 1,073,741,824. Arī izmantojam apzīmējumu no tcpdump, ka J:K nozīmē baitus no J līdz baitam K-1 (ieskaitot). #pic("f_24_8.gif", "500") 24.8.attēls: 6 GB pārsūtīšana sešos 1 GB logos32 bitu virknes numuri aptinas starp laikeim D un E. Pieņemam, ka viens segments pazūt laika momentā B un tiek atkalsūtīts. Mēs arī pieņemam, ka šis pazudušais segments atkal parādās laika momentā F.
Pieņemam arī, ka laiku starpība starp segmenta pazušanu un atkārtotu parādīšanos ir mazāks nekā MSL; citādi segments būtu kāda maršrutētāja izmests, kad notecētu tā dzīvesilgums (TTL). Kā minējām agrāk, šī problēma parādās tikai liela ātruma savienojumos, kur vecie segmenti var atkal parādīties un saturēt virkņu numurus, kuri tiek šobrīd pārsūtīti.
No 24.8.attēla varam arī redzēt, ka laikspiedoga lietošana šo problēmu novērš. Saņēmējs uzlūko laikspiedogu kā 32-bitu paplašinājumu virknes numuram. Tā kā zudušais segments, kurš atkal parādās laika momentā F, ir ar laikspiedogu 2, kas ir mazāks nekā visnesenākais derīgais laikspiedogs (5 vai 6), PAWS algoritms to izdzēš.
PAWS algoritmam nevajag nekāda veida sinhronizāciju starp sūtītāju un saņēmēju. Viss, ko vajag saņēmējam - lai lakspiedoga vērtības monotoni pieaugtu un lai tās palielinātos vismaz par 1 uz katru pārsūtīto logu.