TCP qanday ishlaydi? Ushbu rozriv TCP ulanishini o'rnatish Uzagalnennya

Golovna / 2 Ajoyib o'quvchilar

TCP qisqartmasini yaxshiroq bilsangiz, uzatish protokoli nima ekanligini kamroq odam biladi. Ale, hisob-kitoblarni qanday yutish kerakligini deyarli hech kim bilmaydi.

Hurmat! Bu oziq-ovqat bilan aldamchi janjal qilganlar uchun sug'urta qoplamasining materiali: "Mesh qanday ta'minlanadi va men o'g'irlashim mumkin, men bilaman". Agar siz hali ham DNS, Telnet, Socket uchun so'zlarni ishlatishingiz kerak bo'lsa - unda siz ushbu materialda ball to'plashingiz mumkin - bu erda bunday "dahshatli" so'zlar, shubhasiz, qichqirmaydi, lekin siz bu haqda o'ylay olmaysiz.

Sokin, mast bo'lganlar uchun:

Shubhasiz, ko'pchiligingiz SYN-flooding yoki IP-spoofing kabi bir xil so'zlarni his qilishingiz mumkin. Har xil hujumlar - persha D.O.S., do'st
IP-manzillarni almashtirishda polagaê. Bir qarashda, bu dumba o'rtasida hech qanday yomon narsa yo'q, lekin shu bilan birga, unday emas - tajovuzkor hujumlarni TCP protokoli, qaysi protokolda turish kerakligini chuqur bilmasdan amalga oshirib bo'lmaydi.
Inet.

TCP protokoli spetsifikatsiyasi RFC793 da tasvirlangan. Men sizga ushbu hujjat bilan tanishib chiqishingizni tavsiya qilaman, agar xohlasam, sizga eng muhimlarini aytib berishga harakat qilaman, sizga qo'llanmada bilmagan muhim va tegishli sharhlar bilan ta'minlayman, lekin baribir kichik hajmda va shafaqning amaliy kesmasi, men nozik narsalarni sog'inishim mumkin.

Ma'lumotlar paketlar shaklida uzatiladi. O'tkazishning bunday tashkil etilishi ma'lumotlar qanchalik hidli bo'lmasin, kichik bo'laklarga bo'linishini anglatadi, ular paketlarga (o'tkazishda paketlarning shakllanishi, ma'lumotlarga xizmat sarlavhasi qo'shiladi), shundan so'ng bir qarashda ma'lumotlar paketlar o'lchov orqali uzatiladi (bundan tashqari, siz paketlarni uzatish tartibini buzishingiz mumkin). Paket sarlavhalari to'plamidagi ma'lumotlarning ma'lum bir qatoridan paketlarni "tanlash" ni qabul qiladigan tizim. Tse ko'p narsani tushunmadi, lekin dot, docklar paketlarning tuzilishiga qaramaydi.

TCP paket tuzilishi:

Men faqat eng muhim joylarni tushuntiraman:

Kontroller manzillari, kontroller porti va kontroller manzillari, kontroller porti - menimcha, bu oqilona edi.

Tartib raqami (SYN) - uzatish soati uchun paketning tartib raqamini ko'rsatadigan karta raqami yoki oxirgi raqam, tizim qabul qilganda paketlarni kerakli tartibda emas, balki kerakli tarzda oladi. hid keldi.

Tasdiqlash raqami (ACK) - tizim bizning ma'lumotlar paketimizni rad etganligini ko'rsatadigan tasdiqlash raqami
SYN.

Tekshirish bitlari - 6 bit (teskari va oyna o'rtasidagi sxemada). Janglarning ma'nosi:

URG: muddatli indikator maydoni
ACK: tasdiqlash maydoni
PSH: saqlash funktsiyasi
RST: ushbu qonun loyihasini qayta ko'rib chiqish
SYN: kartalardagi raqamlarni sinxronlashtirish
FIN: yuborish uchun boshqa ma'lumot yo'q

DATA - tse tí ma'lumotlar, yaki mi uzatishni xohlayman.

Menimcha, bu ish va protokol tamoyilini tushunish uchun zarur bo'lgan hamma narsa. RFC793 da boshqa maydonlarning ma'nosi haqidagi hisobotni o'qishingiz mumkin. Xo'sh, amalda qo'llanilganidek, biz buni qisqacha saralaymiz.

Agar biz tizimni o'rnatmoqchi bo'lsak, biz tajovuzkor tuzilmaning tizim paketini tahrirlashimiz mumkin:

Mijoz --- SYN (856779) --- Xost

De Client-tse mi, a Host - butun tizim. Buni qanday qilasiz, biz paketni boshqa SYN topshiriqlari bo'lmasligiga majbur qilamiz - bu bu paket birinchi ekanligini anglatadi, lekin buni amalga oshirish mumkin emas (har kuni ACK). Tsey to'plami shunga o'xshash narsa ko'rinadi:

20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 00 2C C3 00 40 00 20 06 10 0C CB 5E FD BA CB 5E F3 002 400 D 400 B

O'sha paytda Tsíkavy momenty, zvydki SYN olinadi. SYN cherganing kob raqami sifatida tasdiqlangan
(ISN) - 1 dan 4294967295 gacha bo'lgan bir xil 32 bitli raqam (32-bosqichda 2). ISN qachon re-quanted tizimlari dorivnyu 1, Potim ikkinchi vin zbilshuhni uchun 128.000 (qat'iy tuyulardi, Zmina VIDBUVA VIKHNIK 4 MIKROSKUNIYA) + teri ostida zerdnanni zbilshchi o'rnidan turdi 64000 yil davomida eskirgan emas 4.5. . Paket narxi uzoq vaqt davomida ko'tarilmasligi sababli, SYN mutlaqo noyob bo'lishiga ishonch hosil qilishimiz mumkin.

Bizning paketini otrimavshi keyin, tizim víddalena vídpovidaê, scho otrimala u buyurtma o'rnatish uchun tayyor. Ushbu paket quyidagicha ko'rinadi:

Xost --- SYN (758684758) va ACK (856780) --- Mijoz

Yak bachish, masofada tizim bizning paketimizni yutganligi haqida tushuncha beradi. Bizni g'alaba qozongan narsa uchun "bizning SYN + 1" raqami bilan ACK ni mag'lub etdi. Ushbu masofaga qo'shimcha qilish uchun tizim bizga SYN-ni yuboradi. Va bizning maslahatimiz shunday bo'ladi:

Mijoz --- SYN (856780) va ACK (758684759) --- Xost

O'ylaymanki, siz allaqachon hamma narsani tushunishingiz mumkin. Agar tushunmasangiz, unda paket kelgan degan ma'noni anglatadi: SYN (758684758) bilan paketingiz olib tashlandi, sana o'rnatildi, bizning SYN 856780 tiklandi.

Qiu protsedurasi "uch marta tasdiqlash" yoki "uch marta qo'l silkitish" deb ataladi. Birinchi ikki bosqich bizning tizimlarimizning SYN-ni sinxronlashtirish uchun zarur, uchinchisi - sinxronizatsiyaga erishilganligini tasdiqlash.

Menga pul almashtiring, tamom. hozir o'rnatilayotgan va tiklanayotganlar. Bundan tashqari, shuni ta'kidlash kerakki, TCP protokoli yordamida uzatiladigan ma'lumotlar xavfsizligining barcha bosqichlarida u quyidagicha bo'ladi: xabarlar paketi buferga joylashtiriladi va uchrashuv soati agar tizim tasdiqdan (ACK) paketni olmasa, u holda paket yana yuboriladi; Agar tasdiqlash kelgan bo'lsa, paket muvaffaqiyatli deb hisoblanadi va buferdan o'chiriladi.

Xo'sh, bizga ko'proq kerak emas, biz uni yopishimiz mumkin. Tsey bosqichi yana bo'ladi
bir necha bosqichlarni o'tkazing - men bu paketlarni o'zim o'qiy olaman.

Mijoz --- FIN(4894376) va ACK (1896955378) --- Xost

Xost --- ACK (4894377) --- Mijoz

Xost --- FIN (1896955378) va ACK (4894377) --- Mijoz

Mijoz --- ACK (1896955378) --- Xost

Menimcha, bu erda hech qanday murakkab narsa yo'q. Varto degan yagona narsa - bu FIN belgisi, ya'ni vazifani bajarish missiyasi.

To'ldirilgan tovarlarning kichik sumkalari uchun buyurtma raqamlari o'zgaradi / ba'zi hollarda sezilarli darajada o'zgarmaydi:

Paketga bitta FIN o'tkazish = +1
Bitta SYN paketini yuboring = +1
Bitta ACK paketini yuboring = 0
Bitta SYN/ACK paketini yuboring = +1
Bitta FIN/ACK paketini yuboring = +1
1 soniyada o'zgarish = +128 000
O'rnatilgan yarmi = +64 000

Agar siz shunday deb so'rasangiz, shunday bo'lishi mumkin: "Agar mashinalar bunday ACKdan paketni olib qo'ysa, nima bo'ladi?" (SYN=ACK-1, va biz bunday SYNdan paket yubormadik). Otrimavshi vídpovíd nezazumíli on scho, biz siz bilan kelgusi vaqt haqida gaplashamiz.

Kirish

TCP bir xil protokol bo'lib, maqsadni yo'naltiradi. Undan oldin, go'yo tomon boshqalarga o'lpon yuborishi mumkin, ular o'rtasida bir kun o'rnatilishi mumkin. Biz kimga bo'lingan bo'lsak, TCP qanday o'rnatilayotgani va u qanday ochilayotgani haqida xabar beriladi.

TCP ishi uchun parchalar ikkita nuqta o'rtasida o'rnatilishi kerak va u ulanishsiz protokollar uchun ishlatilishi mumkin, masalan, UDP. Biz sinab ko'rdikki, UDP dan foydalanganda, teri tomoni z'ednannya oldida turmasdan, boshqa datagramlarni qo'shib qo'ydi.

O'rnatildi va eshikni ochdi

TCP o'rnatilganda nima bo'lishini ko'rish uchun biz svr4 tizimida buyruqni bajaramiz:

svr4% telnet bsdi o'chirib tashlang
192.82.148.3 urinilmoqda ...
bsdi ga ulangan.
Escape belgisi "^]".
^] Tekshirish kiriting, o'ng kvadrat kamon,
telnet> tark et schob Telnet mijozi
ulanish yopildi.

Telnet buyrug'i hostning bsdi portida o'chirish xizmatiga mos keladigan TCP ulanishini o'rnatadi (1-bo'lim, 1-bo'lim). Bu xizmat o'rnatilganda, lekin pul almashtirmasdan nima sodir bo'lishini hayratda qoldirish uchun bizga kerak bo'lgan xizmat turi.

Visnovok tcpdump

Oz 18,1 tcpdump visnovok bu buyruq tomonidan yaratilgan segmentlar uchun o'qishlar kuni.

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521 (0)
4096 yutib oling
2 0.002402 (0.0024) bsdi.discard > svr4.1037: S 1823083521:1823083521 (0)
ack 1415531522 yutib oling 4096

3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . ack 1823083522 yutib oling 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1415531522:1415531522 (0)
ack 1823083522 yutib oling 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037:. ack 1415531523 yutib oling 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1823083522:1823083522 (0)
ack 1415531523 yutib oling 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 1823083523 yutib oling 4096

18.1-rasm TCP ulanishini o'rnatish va ochish uchun tcpdump-ni ko'rish.

Tsí s_m TCP segmentlari m_stat faqat TCP sarlavhalari. Danim almashinuvi ish bermadi.

TCP teri segmentlari uchun chiqish qatori dan boshlanadi

manba > maqsad: bayroqlar (dzherelo > tanib olish: prapori)

de bayroqlar (bayroqlar) TCP sarlavhasining oltita bayroqlaridan bir nechtasi (). Kichkina 18.2-da besh xil belgi ko'rsatilgan, ular praporsharlar bo'lib xizmat qilishi va ko'z oldida paydo bo'lishi mumkin.

3 belgili stenografiya

Tavsif

ketma-ketlik raqamlarini sinxronlashtirish
administrator ma'lumotlarni uzatishni yakunladi
chegirma
qabul qilingan jarayon ma'lumotlarini tuzatish
joden

18.2-rasm TCP sarlavhasidagi ensign janglari uchun tcpdump buyrug'i tomonidan olingan Ensign belgilar.

DA bu dumba mi bachimo prapori S, F bu nuqta. Yana ikkita praporshch (R va P) keyinroq e'lon qilinadi. TCP sarlavhasidagi qolgan ikkita bit - ACK va URG - tcpdump buyrug'i bilan bekor qilinadi.

Bitta segmentda bir nechta praporshchik janglari bo'lishi mumkin, bu kichkintoy 18.2 ni ko'rsatadi, ammo faqat bitta praporshchin ovozi eshitiladi.

RFC 1025 [Postel 1987] bir soatda (SYN, URG, PSH, FIN va 1 bayt ma'lumotlar) Kamikadze paketi (ichida) tomonidan amalga oshirilgan barcha mavjud jangovar janglarning maksimal kombinatsiyasiga ega bo'lgan segmentni nomlaydi. Inglizísnuê sche k_lka shunga o'xshash paketning vyznachen va o'zi - "Brudny paketi", "Yangi yalinka to'plami" keyin).

1-qatordagi 1415531521:1415531521 (0) maydoni paketning tartib raqami 1415531521, segmentdagi ma’lumotlar baytlari soni esa 0 ga teng ekanligini bildiradi. Iloji bo'lsa, agar baytlar soni 0 dan katta bo'lsa, qoldiq tartib raqamini ko'rib chiqing. Maydonda (1) mavjud bo'lib, segment bir yoki bir necha bayt ma'lumotlarga yoki (2) yoki ma'lumotlarga almashtirilishi mumkin. ensign SYN, FIN yoki RST. 1, 2, 4 va 6-qatorlarda biroz 18,1 ce dala e'lon qilingan, praporshchik janglarining parchalari - ayirboshlash, xoh u o'lpon bo'lsin, bu dumbada amalga oshirilmadi.

2-qator maydon akkaunti 1415531522 Vono ACK ta'limining lashkari sifatida vipadkuga kamroq do'stona. Teri qatoridagi g'alaba 4096 maydoni administrator tomonidan hayratda qolganidek, deraza kengayishini ko'rsatadi. Danim almashinuvi mumkin bo'lmagan bu dumba uchun rozmír vikna o'zgarishsiz qoldirildi va qulflash uchun 4096 qiymatini qo'lga kiritdi.

I Kichkintoyning ko'zida qolgan maydon 18.1, Maksimal segment hajmini ko'rsatadi (MSS - maksimal segment hajmi), to'g'ri katalogni o'rnatish imkoniyati. Administrator TCP segmentlarini kattaroq, pastroq qiymatlarni qabul qilishni xohlamaydi. Tse zazvychay parchalanishdan qochish uchun jang qilishdan uyatchan (11-bob, bo'lingan). Biz taqsimotni taqsimlash uchun segmentning maksimal hajmini ko'rishimiz mumkin va tarqatishni taqsimlash uchun turli TCP variantlari formati ko'rsatilgan.

Timchasovi diagrammasi

Kichik 18.3 da paketlar almashinuvini tasdiqlovchi timchas diagrammasi ko'rsatilgan. (Biz soat diagrammalarining ba'zi asosiy xususiyatlarini tasvirlab berdik, agar biz ga aylantirgan bo'lsak.) Bu kichkinagina tomonda paketlarni qanday tortayotgani ko'rsatilgan. tcpdump buyrug'i ham ko'rsatildi (aks holda u S o'rniga SYN ni ko'rsatdi). Ushbu soat diagrammasida rozmíru veknaning ma'nosi ko'rindi, shuning uchun bu bizning muhokama qilishning maqsadi emas.

Uchrashuvni o'rnatish uchun protokol

Keling, kichik 18.3 da ko'rsatilganidek, TCP protokolining tafsilotlariga murojaat qilaylik. TCP ulanishini o'rnatish uchun sizga kerak:

  1. So'ragan tomon (odatda mijoz deb ataladi) mijoz erishmoqchi bo'lgan server port raqamini va mijozning standart tartib raqamini (ushbu ilovada ISN, 1415531521) ko'rsatib, SYN segmentini tahrirlaydi. Tse segmenti 1.
  2. Server ketma-ketlikning oxirgi tartib raqamini olish uchun SYN segmenti bilan javob beradi (2-segment). Server, shuningdek, mijozning SYN-ni boshqa ACK (mijozning ISN va bitta) bilan tan oladi. SYN da bitta tartib raqami mavjud.
  3. Mijoz serverning SYN identifikatori ACK tanlovi bilan to'g'ri ekanligini tekshirish uchun javobgardir (server ISN plus bitta, segment 3).

Zavodning etarli darajada o'rnatilishi Tsikh uchta segmenti. Ko'pincha uch tomonlama qo'l siqish deyiladi.

Shakl 18.3 O'rnatishning soatlik diagrammasi va kunning ochilishi.

Partiya, masalan, birinchi SYNni engib, kunni faollashtirishi (faol ovoz berish) muhim ahamiyatga ega. Birinchi SYNni olib tashlaydigan va hujumkor SYNni boshqaradigan boshqa tomon hujumdan keyin passiv ishtirok etadi (passiv zarba). (Bo'linish bo'linishida biz yopilishni tashkil etish tartibini bayon qilamiz, bu erda huquqbuzar tomonlar yopilish soatida faollar tomonidan hurmat qilinadi.)

Agar teri tomoni seansni o'rnatish uchun o'zining SYN qoidalarini o'rnatgan bo'lsa, u ushbu seans uchun chiquvchi tartib raqamini (ISN) tanlaydi. ISN teri vaqtini o'zgartirishda aybdor bo'lib, teriga boshqa ISNlar ta'sir qilishi mumkin. RFC 793 [Postel 1981c] ISN 32-bitli raqam ekanligini ta'kidlaydi, bu har bir teri uchun 4 mikrosekunddan kattaroqdir. Zavdyaki tartib raqamlariga, keyinchalik yetkazib berish tartibida kechiktirilgan paketlar haqiqiy buyurtmaning bir qismi sifatida qabul qilinmaydi.

Tartib raqami qanday tanlanadi? Tizim ishga tushirilganda 4.4BSD (va ko'pgina Berkli ilovalarida) standart tartib raqami 1 ga o'rnatiladi. Shunga o'xshash amaliyot Xost talablari RFC tomonidan joylashtirilgan deb baholanadi. Keling, qiymatni 64000 teri pvsec ga oshiramiz va 0 qiymatini teri orqali 9,5 yilga aylantiramiz. (Bu teri 4 mikrosekundga emas, balki bir teri 8 mikrosekundga ko'paygan lichnik uchun to'g'ri keladi.) Bundan tashqari, agar kun tiklansa, u 64000 ga o'zgartiriladi.

3 va 4-segmentlar orasidagi 4,1 soniya oralig'i jurnalni ochish uchun o'rnatilgan jurnal va telnet uchun chiqish buyrug'i o'rtasida bir soat beriladi.

Buyurtmani ochish protokoli

Ulanishni o'rnatish uchun sizga 3 ta segment kerak, uni ochish uchun esa 4 ta segment kerak. Oskílki TCP s'dnannya to'liq dupleks (ma'lumotlar to'g'ridan-to'g'ri boshqa yo'nalishdan teriga uzatilishi mumkin), to'g'ridan-to'g'ri teridan boshqasidan mustaqil ravishda yopilishi mumkin. Asosiy qoida shundan iboratki, agar ma'lumot uzatish tugallangan bo'lsa, teri tomoni FINni yuborishi kerak. Agar TCP FIN ni qabul qilsa, sizning aybingiz masofaviy tomon ma'lumotlarni ochadi va to'g'ridan-to'g'ri kimdirdan ma'lumotlarni uzatishni qabul qiladi. Dastur yopilishi natijasida FIN signali eshitiladi.

Aytish mumkinki, ikkinchi tomon, birinchisi yopilganda (birinchi FINni mustahkamlaydi), faol ravishda yopiladi va boshqa tomon (FINni qabul qilganidek) passiv yopiladi. Ovoz bir tomon faolroq yopiq, ikkinchisi esa passiv, ammo ikkinchi divizion bo'linishida biz huquqbuzar tomonlarni faolroq yopish ehtimoli ko'proq.

Segment raqami 4 kichik 18.3 yopilishdan oldin qo'ng'iroq qilish uchun va Telnet mijozi robotni qabul qilsa, majburlanadi. Tse vídbuvaêtsya biz chiqsangiz kiriting. Ushbu TCP yordamida mijoz FIN shovqinini yuboradi, bu mijozdan serverga ma'lumotlar oqimini bloklaydi.

Agar server FIN-kodni qabul qilsa, u qabul qilingan ketma-ketlik raqamidan yana bittadan (5-segment) ACKni yuboradi. Bitta tartib raqami FIN da, shuningdek, SYN da ko'rsatiladi. Shu bilan birga, TCP serveri fayl oxiri kengaytmasini ham beradi (serverni o'chirish uchun). Keyin server qabul qilingan tartib raqamini bittaga (7-segment) oshirib, mijoz tan olish (ACK) uchun mas'ul bo'lgan FIN (segment 6) yuborish uchun TCP-ni o'chirish orqali o'z so'rovini yopadi.

Kichkina 18,4 o'qishda segmentlarning odatiy almashinuvi kunning yopilish soatida amalga oshiriladi. O'tkazib yuborilgan ketma-ketlik raqamlari. O'z so'rovlarini yopadigan dasturlar orqali qanday kichik FIN yuboriladi, shuning uchun bu FINlar uchun ACK avtomatik ravishda yaratiladi. dasturiy ta'minot xavfsizligi TCP.

Qo'ng'iroq mijoz tomonidan o'rnatiladi, shuning uchun birinchi SYN mijozdan serverga tushadi. Prote be-yak, partiya qonun loyihasini faol ravishda yopishi mumkin (birinchi FINni yuboring). Biroq, ko'pincha, buyurtmani yopish mumkin bo'lsa, mijozning o'ziga bog'liq, lekin mijozning jarayoni asosan eshikni yopish uchun "chiqish" kabi kiritilishi mumkin bo'lgan stenogramma bilan boshqariladi. Kichkintoy 18.4 da biz kichkintoylarning belgilarini eslay olamiz, chaqaloqni hayvonga ko'rsatib, chap tomonni server, o'ng tomonni esa mijoz deb ataymiz. Biroq, kichkintoyda ko'rsatilgandek, hamma narsani o'z ongingizda ilhomlantiring. (Birinchi dumba 14 ga bo'lingan, masalan, server soatni qanday yopishini ko'rsatadi.)

18.4-rasm Kunning yopilish soati uchun segmentlar bo'yicha maksimal almashinuv.

tcpdump winnower

SYN segmentlari uchun tartib raqamlarini saralash uchun tcpdump dasturida tartib raqamlarini saralash oson, ammo keyingi tartib raqamlari ketma-ketlikdagi tartib raqamlarining o'zgarishi sifatida ko'rsatiladi. (Visnovyni olib tashlash uchun, 18,1 chaqaloqqa ishora qilib, biz -S variantini ko'rsatishda aybdormiz.) tcpdump ning standart visnovy, 18,1 chaqaloqni ko'rsatadi, 18,5 chaqaloqqa ko'rsatkichlar.

1 0.0 svr4.1037 > bsdi.discard: S 1415531521:1415531521(0)
4096 yutib oling
2 0,002402 (0,0024) bsdi.discard > svr4.1037: S 1823083521:1823083521(0)
ack1415531522
4096 yutib oling
3 0.007224 (0.0048) svr4.1037 > bsdi.discard: . ack 1 g'alaba 4096
4 4.155441 (4.1482) svr4.1037 > bsdi.discard: F 1:1 (0) ack 1 gʻalaba 4096
5 4.156747 (0.0013) bsdi.discard > svr4.1037:. ack 2 g'alaba 4096
6 4.158144 (0.0014) bsdi.discard > svr4.1037: F 1:1 (0) ack 2 yutadi 4096
7 4.180662 (0.0225) svr4.1037 > bsdi.discard: . ack 2 g'alaba 4096

18.5-rasm Ushbu dumpni o'rnatishni bildiruvchi odatiy tcpdump buyruq qatori.

Garchi biz aniq raqam va ketma-ketlikni ko'rsatishimiz shart bo'lmasa ham, biz barcha hujumkor dumbalarda ko'rish shaklini yutamiz.

Taym-aut; turib qolish; tanaffus

Ġsnuê kílka sabablari, yakí emas mozhe buti o'rnatilgan zadnannya orqali. Masalan, xost (server) o'chirilgan. Ushbu vaziyatga qarshi turish uchun biz serverdan Ethernet kabelini ko'rganimizdan so'ng telnet buyrug'ini ishga tushirdik. Tiny 18.6 tcpdump buyrug'ining chiqishini ko'rsatadi.

1 0,0 bsdi.1024 >
4096 yutib oling
2 5.814797 (5.8148) bsdi.1024 > svr4.discard: S 291008001:291008001(0)
4096 yutib oling
3 29.815436 (24.0006) bsdi.1024 > svr4.discard: S 291008001:291008001(0)
4096 yutib oling

Shakl 18.6 Vaqt tugashi sababli bo'lgan ulanishni olish uchun tcpdump buyrug'ini ko'rish.

Ushbu mijozga hurmat ko'rsatilishi kerak, chunki TCP mijozi ko'pincha ulanishni tiklashga harakat qilib, SYN-ni tuzatadi. Boshqa segment birinchisidan 5,8 soniyadan keyin, uchinchi segment esa ikkinchisidan 24 soniyadan keyin majburlanadi.

Shuni hurmat qilish kerakki, bu dumba mijozning qayta ko'tarilganidan keyin 38 hafta o'tgach ishga tushirilgan. Shuning uchun, buyurtmaning joriy chiqish raqami 291008001 (taxminan 38x60x6400x2). Biz Berkli tipidagi tizimlar joriy tartib raqamini 1 ga o'rnatganini va keyin uni soniyada 64 000 teriga oshirishini aytdik.

Shuni ham ta'kidlash kerakki, tizim qayta yo'q qilingan paytdan boshlab TCP ishga tushirilgunga qadar mijoz port raqami 1024.

Biroq, kichik 18.6 da TCP mijozi necha marta qayta uzatishga urinayotgani ko'rsatilmagan, birinchi marta u qayta urinib ko'riladi. Vaqt qiymatini ko'rish uchun biz telnet buyrug'ini quyidagi tartibda kiritishimiz kerak:

bsdi% sana; telnet svr4 o'chirish; sana
24-sentabr, payshanba, 16:24:11 MST 1992 yil
192.82.148.2 urinilmoqda...
telnet: Ulanish vaqti tugadi masofaviy xost: Ulanish vaqti tugadi
24-sentabr, payshanba, 16:25:27 MST 1992 yil

Bir soat 76 soniyani qo'shadi. Berkeley tizimlarining aksariyati soatiga 75 soniya oralig'ida o'rnatiladi va yangi zavodni bir soat ichida o'rnatish mumkin. 21-bobni tarqatishda, mijoz tomonidan yuborilgan uchinchi paketning vaqti taxminan 16:25:29 da, so'ngra tuzatilganidan keyin 48 soniyadan so'ng, agar mijoz o'z tekshiruvini biriktirmasa, vaqti tugashi muhimdir. 75 soniyadan keyin. .

Birinchi marta chiqish

Bir oz 18,6 uchun, birinchi taym-aut, 5,8 soniya, 6 soniyaga yaqin, lekin 6 soniyadan ko'p bo'lmagan, ammo boshqa taym-aut deyarli 24 soniya bo'lganlarga e'tibor bering. Yana o'nta shunga o'xshash sinov o'tkazildi va terida birinchi taym-aut qiymati 5,59 soniyadan 5,93 soniyagacha bo'lgan. Boshqa taym-aut, ammo 24.00 soniya.

TCP ning BSD ilovalari 500 millisekundlik teri taymerini ishga tushirishini unutmang. Ushbu 500 millisekundlik taymer turli xil TCP kutish vaqtlari uchun bekor qilingan, ularning barchasi keyingi bo'limlarda tasvirlanadi. Telnet buyrug'ini kiritganimizda, 6 soniyali taymer (yiliga 12 ta belgi) o'rnatiladi, lekin u 5,5 dan 6 soniyagacha tugashi mumkin. Kichkintoy 18.7 qanday ko'rinishini ko'rsatadi.

Malyunok 18,7 500 millisekundli TCP taymer.

Oskílki taymer 12 belgiga o'rnatiladi, taymerni o'zgartirishdan oldin u o'rnatilgandan keyin 0 dan 500 millisekundgacha bo'lishi mumkin. Ushbu nuqtada taymer taxminan 500 millisekundga o'zgaradi, ammo birinchi davr boshqacha bo'lishi mumkin. (Biz "taxminan" so'zini yutamiz, bu soat, agar TCP 500 millisekundlik teri nazoratini talab qilsa, u yadro tomonidan qayta ishlash kabi ko'proq qayta yozishdan o'tishi mumkinligi aniq.)

Agar 6 soniyali taymer kichik 18,7 da 0 bilan belgilangan belgi bilan tugasa, taymer 24 soniya (48 belgi) ga o'rnatiladi. Agar 500 millisekundlik TCP taymer yadro tomonidan emas, balki yadro tomonidan chaqirilsa, bu keyingi taymer 24 soniyagacha.

Xizmat turi maydoni

Kichkintoyda 18.6 Bachimo Viraz. Bu maydon IP-datagrammada () xizmat turi (TOS - xizmat turi) hisoblanadi. BSD/386-dagi Telnet mijozi maydonni minimal tartibsizlik bo'ladigan tarzda o'rnatdi.

Maksimal segment hajmi

Maksimal segment hajmi (MSS) Agar u tiklansa, teri tomoni o'zining MSS-ni ovoz chiqarib yuborishi mumkin. Qiymat 1024. Datagram IP-si, natijada ko'rsatilganidek, 40 bayt kattaroqdir: TCP sarlavhasi uchun 20 bayt va IP sarlavhasi uchun 20 bayt.

Ba'zi nashrlarda bu variant "uy xo'jaligi uchun" o'rnatilgan. Darhaqiqat, vatanparvarlik hech qanday tarzda g'alaba qozonmaydi. Agar kun tiklansa, teri tomoni MSSni eslatib turadi, uni olish uchun olinadi. (MSS opsiyasi faqat SYN segmentida ishlatilishi mumkin.) Agar bir tomon MSS variantini boshqa tomondan qabul qilmasa, u 536 baytni bekor qiladi. (Boshqa holatda, 20 baytlik IP sarlavhasi va 20 baytlik TCP sarlavhasi bilan IP ma'lumotlargrammalarining hajmi 576 baytni tashkil qiladi.)

Umuman olganda, MSS qancha ko'p bo'lsa, parchalanish sodir bo'lguncha shunchalik chiroyli bo'ladi. (Hech qachon xato qilmang. Komaga o'tish uchun i ga qayting.) Kattaroq segment o'lchamlari IP va TCP sarlavhalari hajmini o'zgartiradigan teri segmentiga ko'proq ma'lumot yuborish imkonini beradi. Agar TCP SYN segmentini boshqarsa yoki mahalliy dastur ulanishni o'rnatmoqchi bo'lsa yoki masofaviy xostga so'rovni qabul qilsa, siz MSS qiymatini o'rnatishingiz mumkin, bu MTU chiqish interfeysi va TCP sarlavhalarini o'rnatadi. . Ethernet MSS uchun bu 1460 bayt bo'lishi mumkin. IEEE 802.3 (2-bob, 2-bo'lim) muqobil inkapsulyatsiyasi bilan MSS 1452 baytgacha bo'lishi mumkin.

Qiymat 1024, shuning uchun biz uni har qanday tarqatishda ishlatishimiz mumkin, shuning uchun biz bilamizki, u BSD / 386 va SVR4 taqdirini olishi kerak, shuning uchun ko'proq BSD ilovalari mavjud, shuning uchun MSS 512 ning ko'paytmasi edi. Boshqa tizimlar, masalan. Solaris 4.2.2, SunOS 4.2.2 va AIX 3.2.2, agar huquqbuzar tomonlar bir Ethernet tarmog'ida bo'lsa, MSS ni 1460 ga teng darajada hayratda qoldiradi. [Mogul 1993] da koʻrsatilgan koʻrinishlar shuni koʻrsatadiki, eski 1460 MSS Ethernetda yaxshi samaradorlikni taʼminlaydi, pastroq MSS eski 1024.

Agar IP-manzil "mahalliy emas" deb tan olinsa, MSS ovozi qulflanadi - 536. Mahalliy yoki mahalliy bo'lishidan qat'i nazar, tanib olishning oxirgi nuqtasi haqoratli daraja bo'lishi mumkin. Tanish nuqtasi, IP-manzili merezhíning bir xil identifikatori va mahalliy bo'lgan bo'linmaning bir xil niqobi bo'lishi mumkin; tanib olish nuqtasi, IP manzillari o'lchov identifikatori bilan bir xil tarzda tan olinadi, ya'ni mahalliy bo'lmagan; element merezhí ning bir xil identifikatori bilan tan olinadi, ammo bo'linmaning boshqa niqobi bilan u mahalliy va mahalliy bo'lmagan bo'lishi mumkin. Qo'shimcha ilovalar uchun tizim ma'muriga ularning mahalliy yoki nolokal ekanligini belgilashiga ruxsat berish uchun (i) konfiguratsiya opsiyasini o'rnating. Ushbu parametrni e'lon qilingan maksimal MSSga o'rnatish (qiymat chiquvchi interfeysning MTU qiymatiga yetishi mumkin), aks holda standart qiymat 536 ni tashkil qiladi.

MSS xostga masofaviy tomondan boshqarilishi mumkin bo'lgan datagram kengaytmasini o'rnatish imkonini beradi. Shuni ham hisobga olingki, xost ham datagram makonini qamrab oladi, shuningdek, uni bosib oladi, agar xost kichikroq MTU bilan chegaraga ulansa, parchalanishdan qochish imkonini beradi.

MTU 296 ga teng bo'lgan SLIP kanali bo'lishi mumkin bo'lgan slip xostimizni toping, bsdi routerga ulang. Kichkina 18.8 da mezbon quyosh tizimi ko'rsatilgan.

18.8-rasm, MSS qiymatini o'chirishdan oldin quyoshga yuborilgan TCP.

Biz slipdan oldin TCP ulanishini quyoshga o'rnatdik va tcpdump g'alabalarining segmentlarini ko'rib chiqdik. Kichik rasm 18.9 qattiq oynadan ko'proq narsani ko'rsatadi (oynaning ochilishi olib tashlandi).

1 0.0 sun.1093 > slip.discard: S 517312000:517312000(0)

2 0,10 (0,00) slip.discard > sun.1093: S 509556225:509556225(0)
ack517312001
3 0,10 (0,00) quyosh.1093 > slip.tashlab: . ack 1

18.9-rasm tcpdump ni ko'rish uchun quyoshni slipdan oldin joylashtirish.

Bu erda quyosh 256 baytdan kattaroq ma'lumotlar qismiga ega segmentni yubora olmaydiganlarga, MSS 256 ga teng bo'lganlarga (2-qator) e'tibor qaratish lozim. Bundan tashqari, slip chiqish interfeysining MTU ni 296 ekanligini bilganligi sababli, MSSni 1460 ga teng o'qish uchun quyoshni yuboring va parchalanishning oldini olish uchun siz 256 baytdan ortiq ma'lumot yubora olmaysiz. Prote, tizim kamroq ma'lumot yuborishi mumkin, uzoq tomondan MSS ovozlarini pasaytiradi.

Agar xost MTU 576 dan kam bo'lgan havolaga oraliq ulanishsiz ulangan bo'lsa, bu tarzda parchalanishning oldini olish mumkin. Agar xost Ethernet ulanishiga ulangan bo'lsa va havola 536 ga teng MSSni e'lon qilsa, o'rta havola MTU 296 ga teng bo'lishi mumkin, parchalanish tozalanadi. Bundan qutulishning yagona yo'li transport MTUni taqsimlash mexanizmini tezlashtirishdir (24-bob, bo'lim).

TCP yarim yopiq

TCP ulanishning bir ishtirokchisiga ma'lumotlarni uzatishni boshlashga imkon beradi, lekin baribir uzoq tomondan ma'lumotlarni qabul qiladi. Bu TCP yarim yopiq deb ataladi. Biz allaqachon taxmin qilganimizdek, dasturning deakonlari o'zlarining qobiliyatlari bilan faxrlanishlari mumkin.

Dasturiy ta'minot interfeysining tavsifini engib o'tish uchun qo'shimchani qo'shish imkoniyatini berish kerak: "Men ma'lumotlarni uzatishni tugatdim, men fayl oxiri (FIN) belgisini oxiriga yuboraman - of-fayl (FIN) oxiri uchun, lekin men hali ham fayl oxiri belgisi (FIN) menga yuborilgunga qadar ma'lumotlarni oxiridan oxirigacha olishni xohlayman."

API rozetkalari yopiq rejimni qo'llab-quvvatlaydi, shuning uchun dastur yopish o'rniga boshqa argument 1 bilan o'chirishni chaqiradi. Aksariyat dasturlar har ikki yo'nalishda ham qo'ng'iroqlarni tez bosish orqali ochadi.

Eskiz 18.10 yopiq TCP uchun odatiy stsenariyni ko'rsatadi. Biz mijozni chap tomondan ko'rsatdik, qarama-qarshi rejimni ishga tushirdik, lekin siz yon tomonda ham ishlashingiz mumkin. Birinchi ikkita segment bir xil: tashabbuskor uchun FIN, keyin ACK va qabul qiluvchi uchun FIN. Biroq, stsenariyni kichik 18.4-da ko'rsatilgan narsalar asosida ko'rib chiqaylik, shunda "qo'shiq aytish" buyrug'ini olgan tomon hali ham o'lpon qo'yishi mumkin. Biz ma'lumotlarning faqat bitta segmentini ko'rsatdik, undan keyin ACK, bu holda siz ma'lumotlarning bir qator segmentlarini yuborishingiz mumkin. (Biz sizga ma'lumotlar segmentlari va tasdiqlar almashinuvi haqida batafsil ma'lumot beramiz.) Agar siz "ma'lumotlarni yuborish" buyrug'ini bekor qilsangiz, ma'lumotlarni uzatishni bekor qilsangiz, kunning bir qismini yopib qo'yasiz. natijada FIN amalga oshiriladi, qaysi yakuniy belgi bilan fayl yetkazib beriladi, qandaydir initsiyuvav "napivzakritiy" rejimi. Agar boshqa FIN tasdiqlansa, buyurtma yana yopiladi.

Maliunok 18.10 TCP yopiq rejimda.

Navischo bir vikoristany napívzkritiy rejimi bo'lishi mumkin? Misollardan biri Unix rsh(1) buyrug'i bo'lishi mumkin, u boshqa tizimdagi buyruqni bekor qiladi. Jamoa

quyosh % rsh bsdi tartiblash< datafile

bsdi xostidagi tartiblash buyrug'ini ishga tushiring, bunda rsh buyrug'ining standart kiritilishi fayl nomi ma'lumotlar faylidan o'qiladi. Rsh buyrug'i o'zi va ushbu dastur o'rtasida TCP ni yaratadi, xuddi u uzoqdagi xostga kirgandek. Keyin rsh funktsiyasini bajarish oson: buyruq standart kirishni (ma'lumotlar faylini) kirishdan nusxalash va uni kirishdan standart displeyga (bizning terminal) nusxalashdir. Kichkina 18.11 da qanday ko'rinishi ko'rsatilgan. (TCP Full Duplex ishlamasligiga e'tibor bering.)

18.11-rasm Buyruq: rsh bsdi sort< datafile.

Masofaviy xostda bsdi server, rshd server tartiblash dasturini TCP ulanishidagi standart kirish va standart chiqish yo'nalishi bo'ladigan tarzda o'g'irlaydi. 14-raqamli shoxobchada hisobot tavsifi Bu erda ishtirok etayotgan Unix jarayonining tuzilishi, ammo biz TCP qanday buzilganligi va TCP rejimi yopilganligini aytishimiz kerak.

Saralash dasturi barcha kiritilgan ma'lumotlar o'qilmaguncha chiqishni yaratishni boshlay olmaydi. Rsh mijozidan saralash serveriga yuborilishi kerak bo'lgan barcha chiqish ma'lumotlari saralanishi mumkin bo'lgan fayl bilan almashtiriladi. Agar kirish (ma'lumotlar fayli) uchun faylni tugatish belgisi mavjud bo'lsa, rsh mijozi TCP ulanishini yozadi. Keyin saralash serveri standart chiqishidan (TCP chiqishi) fayl uchun yakuniy tegni qabul qiladi, faylni tartiblaydi va standart chiqishi (TCP chiqishi) natijasini yozadi. Rsh mijozi TCP buyrug'ini oxirida o'qishni davom ettiradi, tartiblash faylini standart oynalaridan nusxa ko'chiradi.

Vikoristannya yarim yopiq rejimsiz qandaydir qo'shimcha texnika kerak bo'ladi, masalan, mijozga serverni tiklashga ruxsat berish, ma'lumotlar so'rovini tugatgandan so'ng, mijozga serverdan ma'lumotlarni olishga ruxsat beriladi. Shu bilan bir qatorda, ikki semestrni vicorate qilish kerak, prote yopiq rejimda vikoristanydan ko'ra muhimroqdir.

TCP uzatish stantsiyasining diagrammasi

Biz sozlash va rozryu TCP ulanish uchun qoidalar nusxasini tasvirlangan. Kichkintoy 18.12.da ko'rsatilganidek, uzatish bosqichi diagrammasini tanlash uchun Qi qoidalari.

Keyingi qadam diagramma standart stantsiyalarning diagrammasi ekanligini ko'rsatishdir. Biz mijozning asosiy o‘tkazmasini qalin qalin strelkalar bilan, serverning asosiy uzatilishini nuqtali qalin strelkalar bilan belgiladik.

Lagerga olib boradigan ikkita vites O'RNATILADI, kunning boshlanishini tasdiqlaydi va lagerga olib boradigan ikkita vites o'rnatildi (O'RNATISH), kunning boshlanishini tasdiqlaydi. TUZILGAN lager hozirda ikki tomon o'rtasida har ikki yo'nalishda ham ma'lumotlarni uzatish imkoniyati mavjud. Keyingi bo'limlarda har bir lagerda nima sodir bo'lishi tasvirlanadi.

Pastki chap qismdagi ikkita kvadratni nuqta ramkaning o'rtasida diagrammalar bilan birlashtirdik va ularni "faol yopish" deb belgiladik. Qolgan ikkita kvadrat (CLOSE_CLOSED - CLOSE_WAIT va STOP_APPROVED - LAST_ACK) nuqtali ramka bilan birlashtiriladi va "passiv yopish" (passiv yopish) sifatida belgilanadi.

Bekatlarni tasdiqlash uchun netstat buyrug'ini qanday kiritish kerakligi uchun 11 ta stantsiyani nomlang (YOPIQ - YOPIQ, LISTEN - LISTEN, SYN_VIDPRAVLENY - SYN_SENT va hokazo). Netstat nomlari, o'ziga xos tarzda, RFC 793 da tasvirlangan nomlar bilan deyarli bir xil. YOPIQ lager aslida lager emas, lekin diagrammalar uchun boshlang'ich va yakuniy nuqtadir.

LISTEN dan SYN_SENT (SYN_SENT) ga o'zgartirish nazariy jihatdan mumkin, Berkeley ilovalarida qo'llab-quvvatlanmaydi.

Va o'zgartirish SYN_SYN (SYN_RCVD) ga aylanadi, LISTEN ga qaytish faqat bu holatda mumkin, chunki SYN_RCVD (SYN_RCVD) lagerida u SYN (asosiy stsenariy) ga aylanadi, SY emas. Bu shuni anglatadiki, biz passiv kiritishni amalga oshirdik (HEARING - LISTEN lageriga bordik), SYNni olib tashladik, ACK dan SYN yubordik (WITHDRAWAL_SYN lageriga - SYN_RCVD) pributtya ínshoy zapu on z'êdnannya

18.12 Diagrammani TCP ga o'zgartirish.

Eskiz 18.13 mukammal o'rnatilgan TCP yopilishini ko'rsatadi. Shuningdek, tasvirlangan boshqacha bo'ladi yaki pass mijozi va serveri orqali.

Shakl 18.13 TCP tegirmoni, bu kunning o'sishiga ajoyib javobni ko'rsatadi.

Kichkintoyda 18.13 da biz chap tomondan ma'lum bo'lgan mijoz faolroq, o'ng qo'lli server esa passiv bo'lishini qo'yib yubordik. Biz mijozning faol ravishda yopilishini ham ko'rsatdik (biz avvalroq bashorat qilganimizdek, teri tomoni faol ravishda yopilishi mumkin).

Kichkintoydagi stantsiyani 18.13 da, 12.18 da kichkintoyga yo'naltirilgan stantsiyani o'zgartirish ma'lumotnomalari yordamida o'zgartirish bosqichlarini bajarishingiz kerak, bu o'zgarish nima uchun yana sodir bo'lishini tushunishga imkon beradi.

Tozalash tegirmoni 2MSL

TIME_WAIT tegirmoni ba'zan 2MSL sanitizatsiya tegirmoni deb ham ataladi. Terini amalga oshirish uchun maksimal segmentning ishlash muddati (MSL - maksimal segment umri) qiymati tanlanadi. Bu maksimal soat bo'lib, undan oldingi o'lchovda qaysi segmentni ishlatish mumkin, chunki u tozalanadi. Biz bilamizki, bu chegara soati, TCP segmentlarining bo'laklari IP datagramlari yordamida uzatiladi va teri IP datagrammasi TTL maydonini o'z ichiga oladi, chunki bu hayot soati.

RFC 793 [Postel 1981c] MSL 2 narsaga teng bo'lishi mumkinligini ko'rsatadi. Boshqa ilovalarda qiymat 30 soniya, 1 kviling yoki 2 kviling bo'lishi mumkin.

Aytishlaricha, IP-datagrammalarining hayoti taymer bilan emas, balki bir qator uzatishlar bilan o'ralgan.

MSL mag'lubiyatga uchraganida, quyidagi qoidalar qo'llaniladi: agar TCP faol ravishda yopilsa va segmentning qolgan qismini tasdiqlash (ACK) uchun qasos olish uchun yuborsa, sana ikki MSL uchun yaxshi bo'lgan TIME_WAIT stantsiyasida bir soatga qoldirilishi mumkin. Bu TCP ga ACKning qolgan qismini birinchi ACK yuborilishi bilan bir vaqtda qayta yuborish imkonini beradi (uzoq tomon vaqt tugashi va yakuniy FINni qayta yuborish vaqtida).

Aks holda, 2MSL tekshiruvi TCP ulanishlarining 2MSL tekshiruvida ekanligini bildiradi, bu ulanish uchun ko'rilgan bir juft rozetkalar (mijoz IP manzillari, mijoz port raqami, server IP manzillari va server port raqami) wicoristanni qayta tiklay olmaydi. Ushbu qo'ng'iroqni faqat 2MSL soati tugasagina takrorlash mumkin.

Afsuski, ilovalarning aksariyati (Berkli ulardan biri) eng mashhurlari tartibida. Bloklashdan so'ng mahalliy port raqamini qayta markalash mumkin emas, dock port raqami 2MSL stantsiyasida qayta markalangan rozetka paritetining mahalliy port raqamidir. Quyida, yonayotgan vimog'larga qarang.

Amalga oshirish aktlari va API himoyasi beriladi, chunki ular almashinuvni chetlab o'tishga imkon beradi. Socket API variantiga SO_REUSEADDR soket opsiyasi berilishi mumkin. Bu sizga o'zingizning mahalliy port raqamingizni 2MSL stantsiyasida sörf qiladigan mahalliy portga belgilash imkonini beradi, lekin TCP qoidalari bu port raqamini xostga ko'chirishga ruxsat bermaydi, chunki u 2MSL stantsiyasidan ishlaydi.

2MSL stantsiyasida tanbeh berilsa, kuni keladi teri tiqilib segmenti, u chiqadi. Ulanish 2MSL stantsiyasida bir juft rozetka sifatida tayinlanganligi sababli, ulanishni nuqtaga qayta imzolash mumkin emas, chunki yangi ulanishni kiritish mumkin emas. Tse kechiktirilgan paketlar yangi kunning bir qismi sifatida qabul qilinmaganligi uchun kurashmoqda. (Sana bir juft rozetka sifatida belgilanadi. Yangi sana yangilanish yoki bu sananing mukofotlari deb ataladi.)

Biz allaqachon 18.13 ni biroz ko'rsatganimizdek, mijozni faol ravishda yopish va TIME_WAIT rejimiga kirish uchun chaqiring. Server passiv yopilgan va TIME_WAIT rejimidan o'tmagandek eshitiladi. Mijozni taqlid qilish va uni boshqa yo'l bilan qayta ishga tushirish uchun ishlatilishi mumkin bo'lgan visnovok yaratish mumkin, bu yangi mijoz bir xil mahalliy port raqamini yutib ololmaydi. Mijoz dinamik ravishda tayinlangan vikorist port deb ataydigan va ma'lum bir soatda vikoristovuetsya portini dinamik ravishda tayinlaydigan ko'p muammolar mavjud.

Biroq, server nuqtai nazaridan, hamma narsa boshqacha, serverning parchalari vikoristovuyut zazdalegíd vidomí porti. Agar biz ishga tushirish uchun sozlanishi mumkin bo'lgan serverni vimknemo qilsak va uni beparvolik bilan qayta ishga tushirishga harakat qilsak, server kirishning yakuniy nuqtasi sifatida port raqamiga qaytish sanasini yuta olmaydi, chunki bu port raqami 2MSL ning bir qismidir. . Tomga undan oldin 1 dan 4 gacha kredit kerak bo'lishi mumkin, chunki server qayta ishga tushiriladi.

Paypoq dasturi yordamida bunday stsenariyni ko'rishingiz mumkin. Biz serverni ishga tushirdik, yangi mijozga o'tdik va keyin serverni tashladik:

quyosh % paypoq-v-s 6666
(mijozni ushbu portga keladigan bsdi-da ishga tushiring)
140.252.13.33.6666 dan 140.252.13.35.1081 da ulanish
^? serverni o'chirish uchun qayta ishga tushirish belgisini kiriting
quyosh % paypoq - 6666 va biz bir xil portda serverni qayta ishga tushirishga harakat qilamiz
mahalliy manzilni bog'lab bo'lmaydi: Manzil allaqachon ishlatilmoqda
quyosh % netstat lagerni qayta ko'rib chiqishga harakat qiling
Faol Internet ulanishlari
Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)
tcp 0 0 sun.6666 bsdi.1081 TIME_WAIT
yuzsiz qatorlar ko'rindi

Agar biz serverni qayta ishga tushirishga harakat qilsak, dastur sizga kechirim haqida ma'lumot beradi, bu o'z port raqamini ololmaydiganlarga bildiradi, shuning uchun xato allaqachon g'alaba qozongan (2MSL kliring stantsiyasida qayta ishga tushirish).

Keling, meni negaly vikonuemo netstat ter qilaylik, lager z'ednannya qarash schob va u, albatta, TIME_WAIT lagerida ishlayotgan, deb reverify.

Agar davom etsak, serverni qayta ishga tushirib ko'ring va vaqt to'g'ri keladimi, deb hayron bo'ling, biz 2MSL qiymatini hisoblashimiz mumkin. SunOS 4.1.3, SVR4, BSD/386 va AIX 3.2.2 uchun serverni qayta ishga tushirish 1 daqiqa davom etadi, ya'ni MSL tugallanishi uchun 30 soniya kerak bo'ladi. Solaris 2.2 bilan serverni qayta ishga tushirish 4 kredit oladi, ya'ni MSL 2 kredit oladi.

Biz mijoz tomonidan yaratilgan juda kechirimdan foydalanishimiz mumkin, shunda mijoz qo'ng'iroqning bir qismi bo'lgan, 2MSL kliring rejimida bo'lgan portga kirishni taklif qiladi (mijozni talon-taroj qilmaslik uchun gapiring):

quyosh % sock-v bsdi echo mijoz ishga tushirildi, u echo serveriga keladi
140.252.13.33.1162 da 140.252.13.35.7 da ulangan
salom boshqa qator
salom
^D mijozni o'chirish uchun fayl uchun yakuniy belgini kiriting
quyosh % paypoq -b1162 bsdi echo
mahalliy manzilni bog'lab bo'lmaydi: Manzil allaqachon ishlatilmoqda

Mijozning birinchi ishga tushirilishida qaysi mahalliy port raqami (1162) tanlanganligini ko'rish uchun -v opsiyasi belgilandi. Mijozning boshqa ishga tushirilishida mijozga o'zining 1162 mahalliy port raqamini o'ziga belgilashni aytish uchun -b opsiyasi belgilandi. .

Bu erda 2MSL ning o'ziga xos xususiyati haqida taxmin qilish kerak, agar biz File Transfer Protocol (FTP - File Transfer Protocol) haqida gapiradigan bo'lsak, unga murojaat qilmagunimizcha. Yuqorida aytib o'tilganidek, 2MSL oynasida bir nechta rozetkalar qoldirilgan (ular mahalliy IP manzil, mahalliy port, masofaviy IP manzil va masofaviy portdan iborat). Biroq, shaxsiy bo'lmagan ilovalar jarayonga 2MSL rejimidagi rozetkaning bir qismi bo'lgan port raqamini qayta ulash imkonini beradi (muqobil SO_REUSEADDR opsiyalariga qarang) TCP bir xil rozetkalar juftligida yangi ulanishga ruxsat bera olmaydi. Tse tajovuzkor tajribaga yordam berishi mumkin:

quyosh % paypoq-v-s 6666 server 6666 portida tinglashni boshlaydi
(mijozni bsdi-da ishga tushiring, u ushbu portga keladi)
ulanish 140.252.13.33.6666 dan 140.252.13.35.1098
^? serverni o'chirish uchun qayta ishga tushirish belgisini kiriting
quyosh % paypoq -b6666 bsdi 1098 mijozni mahalliy port 6666 bilan ishga tushiring
mahalliy manzilni bog'lab bo'lmaydi: Manzil allaqachon ishlatilmoqda
quyosh % paypoq -A -b6666 bsdi 1098-A opsiyasi bilan birinchi marta qayta sehrlang
Faol ochiq xato: Manzil allaqachon ishlatilmoqda

Birinchidan, biz paypoq dasturimizni 6666 portida server sifatida ishga tushirdik va bsdi xostidan yangi mijozga o'tdik. Mijoz port raqami - 1098, u dinamik ravishda tayinlangan. Biz serverni o'chirib qo'ydik, bu darajadagi, vin zdyysniv faol ravishda yopildi. 4 parametr bilan - 140.252.13.33 (mahalliy IP-manzil), 6666 (mahalliy port raqami), 140.252.13.35 (masofaviy IP manzil) va 1098 (masofadagi port raqami) 2MSL lageri tomonidan iste'mol qilinadi.

To'satdan, biz mijoz sifatida ushbu dasturni ishga tushirdik va 6666-portdagi mahalliy raqamni kiritdik, 1098-portdagi bsdi xostiga kirishga harakat qildik. Mahalliy port 6666-ni qayta belgilamoqchi bo'lganimizda, kechirim hosil bo'ldi, chunki butun port 2MSL lagerida.

Kechirimdan xalos bo'lish uchun biz SO_REUSEADDR opsiyasini faollashtirish uchun -A opsiyasini belgilab, dasturni qayta ishga tushirdik. Bu dasturga o'zining 6666 port raqamini belgilashga imkon berdi, ammo agar dastur buni faol ravishda tan olishga harakat qilsa, u kechirildi. Misol uchun, dastur 6666 portiga o'z raqamini belgilashi mumkin, u bsdi xostidagi 1098 portiga qo'ng'iroq, bir juft rozetka, dastlabki qo'ng'iroq, 2MSL stantsiyasida qayta urinib ko'rishi mumkin.

Nima, boshqa xostdan zaxira nusxasini o'rnatishga harakat qilishimiz kerakmi? Birinchidan, biz serverni quyoshda -A ensign bilan qayta ishga tushirish uchun javobgarmiz, shunda sizga kerak bo'lgan port (6666) 2MSL stantsiyasida joylashgan boshlang'ichning bir qismidir:

quyosh % paypoq-A-s 6666 6666 portida server tinglashni boshlang

Keling, kutamiz, bundan oldin, 2MSL oynasi quyoshda tugashi bilan biz mijozni bsdi-da ishga tushiramiz:

bsdi% paypoq -b1098 quyosh 6666
140.252.13.35.1098 da 140.252.13.33.6666 raqamiga ulangan

Afsuski, u ishlaydi! Ushbu qisqa TCP spetsifikatsiyasi ko'proq Berkeley ilovalari tomonidan qo'llab-quvvatlanadi. Qi ilovalari qo'ng'iroq uchun yangi qo'ng'iroqda so'rovni qabul qiladi, masalan, TIME_WAIT stantsiyasida o'zgartirish kabi yangi raqam ketma-ketlik kattaroq bo'lsa, ketma-ketlikning qolgan soni qancha past bo'lsa, subtitrlar kunning boshida joylashgan. Qaysi yo'l bilan yangi zadnanny uchun ISN oldingi z'ednanny plyus 128000 tartib raqamining qolgan qismiga teng bo'ladi. RFC 1185 ga qo'shimchada bunday texnologiyaning mumkin bo'lgan kamchiliklari ko'rsatilgan.

Ushbu amalga oshirish xarakteristikasi mijoz va serverga bitta zavodni muvaffaqiyatli yangilash uchun bir xil port raqamlarini qayta ulash imkonini beradi, bu holda server faol ravishda yopilmaydi. Agar biz FTP bilan muhokama qilsak, yana 2MSL ni ko'rib chiqmoqchimiz. Shunday qilib, xuddi shu bo'limga qayting.

Sokin vaqtni tushunish

2MSL kliring stantsiyasi erta buyurtmalar bilan bog'liq bo'lgan orqada qolgan paketlardan himoya qilishi kerak, bu holda hid yangi zavodning bir qismi sifatida talqin etilmaydi, shuningdek, mahalliy va uzoq IP manzillar va port raqamlari. Biroq, u faqat shu holatda ishlaydi, chunki 2MSL stantsiyasida uchrashuv mezboni kelishmaydi.

Agar 2MSL stantsiyasida portlari bo'lgan xost yaxshi bo'lsa, MSL-ni har soatda qaytadan amalga oshirsa va bir xil mahalliy va uzoq IP-manzilga va mahalliy portlarga mos keladigan port raqamlariga yangi port o'rnatsa, ular avval 2MSL stantsiyasida bo'larmidi? halokat? Shunday qilib, kechikkan, yopilgan segmentlar, go'yo buzilishdan oldin uxlab qolgandek, ular yangi tartibdan keyin yaratilgan, yangi tartib bilan bog'liq kabi kechirimli talqin qilinishi mumkin. Qayta ilgarilashdan keyin qaysi sana tartib raqami tanlanganiga qarab, u mustaqil bo'lishi mumkin.

Bunday baxtsiz stsenariylardan himoya qilish uchun, RFC 793, TCP avansdan keyin MSL tugallanmaguncha yangi shartnomalar tuzishga majbur emasligini ta'kidlaydi. Tse tinch soat (sokin vaqt) deb ataladi.

Ba'zi ilovalar uchun xostlar qayta ko'tarilgandan so'ng pastroq, past soatlik MSLni tekshiradi.

FIN_FIN_WAIT_2 mil

FIN_WAIT_2 bekatida biz FINni yengib o‘tamiz va uzoq tomoni buni tasdiqlaydi. Agar biz yopiq zadnannya lagerida bir-birimizni tanimasak, unda dastur uzoq mamlakatda ekanligi aniq, biz faylning oxiri belgilarini tanib, zadnannya tomonimizni yopishimiz mumkin, bundan tashqari, FIN bizga yuborildi. Agar jarayon masofadan turib yopilsa, bizning tomonimiz FIN_WAIT_2 rejimidan TIME_WAIT rejimiga o'tadi.

Tse, hujum tomoni bu rejimda abadiy qolishi mumkinligini anglatadi. Masofaviy tomon hali ham CLOSE_WAIT mumkin va bir mamlakatda abadiy qolishi mumkin, dastur docklari yopilishni buzmaydi.

Berkeleyning ko'proq tatbiq etilishi FIN_WAIT_2 lagerida bunday abadiy qarorni hujumkor darajaga aylantiradi. Go'yo dastur, xuddi faol yopilgandek, yopilish shaklida emas, balki yopilishdan tashqarida yaratilgan, bu ma'lumotlarni olishga loyiq bo'lganlarni ko'rsatadi, bu holda taymer o'rnatiladi. Agar qo'ng'iroq 10 daqiqa va 75 soniya davomida bekor qilinmasa, TCP qo'ng'iroqni YOPIQ rejimiga o'tkazadi. Protokolning xususiyatlariga o'xshash bo'lganlar haqida sharhlar mavjud.

Segmenti Skidannya (qayta tiklash)

Biz TCP sarlavhasida qanday bit, RST sarlavhalari, "qayta tiklash" (qayta tiklash) nimani anglatishini taxmin qildik. A zagalny vpadku yilda signal "skidannya" (qayta tiklash) silaetsya TCP da o'sha vipadku, yakscho segmentlari, scho pribuvayut, belgilangan zadnannyu bilan bir-biriga yopishmaydi. (Biz "yo'naltirilgan ulanish" atamasidan foydalanamiz), bu havola qilingan ulanishning port raqamiga tayinlangan IP manzili, shuningdek, gerelning IP manzili va gerelning port raqami bilan aniqlangan ulanishni anglatadi. 793 "rozetka" deb nomlanmaydi. )

Noma'lum portga qo'ng'iroq qilish uchun so'rov

Qayta tiklash yaratilganda eng yorqin dalgalanma, shuning uchun buyurtma so'rovi kelib tushsa va hech qanday jarayon davomida qaysi eshitish porti tan olinadi. UDP holatida, biz 6-bobda ishlaganimizdek, tanib olish portiga datagramma kelganda, u muvaffaqiyatsiz bo'lmaydi - portga kirish imkoni yo'qligi haqida ICMP kechirimi hosil bo'ladi. TCP natom_st vikoristovuê skidannya.

Biz mijozning Telnet variantiga oddiy misolni tanib olish nuqtasida o'zgarmaydigan port raqamini kiritamiz:

bsdi% telnet svr4 20000 port 20000 g'olib emas
140.252.13.34 urinilmoqda...
telnet: Masofaviy hostga qo'ng'iroq qilish: ulanish rad etildi

Afv haqidagi ma'lumot Telnet mijoziga ko'rinmaydi. Kichkintoyda 18.14 buyruqlarni tasdiqlovchi paketlar almashinuvining ko'rsatkichlari.

1 0,0 bsdi.1087 > svr4.20000: S297416193:297416193(0)
4096 yutib oling
2 0.003771 (0.0038) svr4.20000 > bsdi.1087: R 0:0 (0) ack 297416194 gʻalaba 0

18.14-rasm Soatiga tushish sanasini hosil qiling

Shunisi e'tiborga loyiqki, biz ushbu chaqaloqqa, tartib raqamining maydoniga va chegirmaning tasdiqlash raqami maydoniga diqqat bilan qarashimiz kerak. Tasdiqlash biti (ACK) segmentga kiritilmaganligi sababli, u kelganida, tushirish tartib raqami 0 ga o'rnatiladi va tasdiqlash raqami kirish chiqish tartib raqamiga (ISN) va ma'lumotlar baytlari soniga o'rnatiladi. segmentida. Haqiqiy ma'lumotlardan emas, kelgan segmentdagilardan qat'i nazar, SYN biti mantiqiy ravishda tartib raqami bo'shlig'ida 1 baytni oladi; ushbu tartibda, qaysi dastur uchun diskontlangan ma'lumotlardagi tasdiqlash raqami ISN va sana ma'lumotlari (0) va bitta SYN bitiga o'rnatiladi.

Rozriv z'ednannya

Tarqatishni taqsimlashda biz kunning rivojlanishi uchun g'olib bo'lgan eng muhim usul tomonlardan biri FINga ruxsat berishiga asoslanganligini aytdik. Ba'zan ular to'g'ri raqamlar (tartibli chiqarish) deb ataladi, FIN parchalari ma'lumotlar ilgari qora rangga qo'yilganidan keyin yuboriladi, ular tuzatiladi va qo'shimcha ma'lumotlar bo'lmaganda ovoz chiqaradi. Biroq, FIN-ga qayta o'rnatish (qayta tiklash) yuborish orqali kunni to'xtatish mumkin. Ba'zan u abortiv reliz deb ataladi.

Kunning shunga o'xshash ochilishi ikkita imkoniyatni qo'shishi kerak: (1) berilganmi, shaytonga nima qarshi turish kerak - vayron bo'lish va tashlab ketish tuzatilmagan va (2) RSTni qabul qilgan tomon , Biz boshqa tomon kun zam_st sindirib, deb aytish mumkin, katta martaba bilan yoga yopish uchun. Dastur tomonidan ishlatiladigan dasturiy interfeys (API) oddiy o'chirish uchun shunga o'xshash almashtirishni yaratish uchun javobgardir.

Paypoq dasturiy ta'minotimiz bilan shunga o'xshash rivojlanishda ko'rgan narsamizdan hayratga tushishimiz mumkin. Sockets API sizga yopiq rozetkadan (SO_LINGER) foydalanish imkoniyatini beradi. Biz o'chirish soati uchun -L variantini ko'rsatdik, bu 0 degan ma'noni anglatadi. Ze kunni yopish uchun ajoyib FIN o'rniga chegirma yuborilishini anglatadi. Biz paypoq dasturining versiyasiga svr4 da server vazifasini o'tagandek ulanamiz:

bsdi% paypoq-L0 svr4 8888 ce mijoz; server quyida ko'rsatilgan
Salom Dunyo bir qator kiritiladi, bu masofaning oxiri yo'nalishi bo'yicha bo'ladi
^D mijozni o'chirish uchun fayl uchun yakuniy belgini kiriting

Tiny 18.15 ushbu ilova uchun tcpdump buyrug'ini ko'rsatadi. (Biz bu kichkintoyda, bizning mirkuvannyamizni hidlamaydigan odamda vikonlarning barcha shovqinlarini ko'rdik.)

1 0.0 bsdi.1099 > svr4.8888: S671112193:671112193(0)

2 0,004975 (0,0050) svr4,8888 > bsdi.1099: S 3224959489:3224959489(0)
ack671112194
3 0.006656 (0.0017) bsdi.1099 > svr4.8888:. ack 1
4 4.833073 (4.8264) bsdi.1099 > svr4.8888: P 1:14 (13) ack 1
5 5.026224 (0.1932) svr4.8888 > bsdi.1099:. ack 14
6 9.527634 (4.5014) bsdi.1099 > svr4.8888: R 14:14 (0) ack 1

18.15-rasm FIN pul o'tkazmalaridan (RST) hisobvaraq-fakturalarni taqsimlash.

1-3 qatorlarda oddiy z'ednannya ko'rsatilgan. 4-qatorda biz tanbeh bergan bir qator o'lponlar qo'llaniladi (12 belgi va yangi qatorning Unix belgisi), lekin 5-qatorda o'lponlar olinganligi tasdiqlanadi.

6-qator fayl oxirida kiritilgan belgini tasdiqlaydi (Control-D), uning yordami uchun biz mijozni olib tashladik. Osilatorlar biz dastlabki yopilishni bekor qilishni hal qilganimizni ko'rsatdi (buyruqlar qatori opsiyasi -L0), bsdi-dagi TCP dastlabki FINni RST bekor qilishni yubordi. Tartib raqami va tasdiqlash raqamini qaytarish uchun RST segmenti. Shuningdek, RST segmenti uzoqda tanimaydiganlarga hurmat ko'rsating - kelajakda tasdiqlash uchun qasos olmang. Bekor qilish soati kunni to'xtatadi va dasturga kun to'xtatilganligini eslatadi.

Bunday almashinuv bilan biz serverdan kechirim olamiz:

svr4% paypoq - 8888 server sifatida ishga tushiring, 8888 portida tinglang
Salom Dunyo
o'qish xatosi: ulanish tengdosh tomonidan qayta tiklandi

Ushbu server o'lchovlardan o'qiydi va standart visnovokdan nusxa oladi, hamma narsa olib tashlandi. Ishingizni yakunlash uchun VIN raqamiga qo'ng'iroq qiling, TCP-dan faylning oxiri belgisini olib tashlang, ammo bu erda RST kelganida VIN kechirimni olib tashlagan bo'lishi mumkin. Meni ochikuvali qilganlar uchun kechirim: kunni kun ishtirokchilaridan biri yirtib tashladi.

Kunning tanqidiy nomini belgilash

TCP qo'ng'irog'i o'chirilishi muhim, chunki bir tomon boshqa tomonga xabar bermasdan qo'ng'iroqni yopib qo'ydi yoki to'xtatdi. Agar ikkita uy egasidan bittasi uyg'un bo'lsa, bu mumkin edi. Shunday qilib, bir muncha vaqt bir xil tartibda ma'lumotlarni uzatishga urinish bo'lmaydi, tomonlardan biri ishlaydi, doklar boshqa tomonning ohangdan chiqib ketganligini ko'rsatmaydi.

Yana bir sabab bor, u orqali siz zapívydkrite zadnannya vyniknuti mumkin, mijozning xostida jonli o'chirilganligi sababli, mijozning dasturini o'chirish va keyin kompyuterni o'chirish o'rniga. Misol uchun, Telnet mijozi shaxsiy kompyuterda ishga tushiriladi va u, masalan, ish kuni davomida kompyuterni taqlid qiladi. Kompyuter o'chirilgan paytda ma'lumotlarni uzatish kechiktirilmagan bo'lsa ham, server mijozning ma'lum ekanligini hech qachon bilmaydi. Hujum sodir bo'lganda, shaxsiy kompyuteringizni yoqing va yangi Telnet mijozini ishga tushiring, server xostida yangi server ishga tushadi. Narx orqali server xostida ko'plab TCP qo'ng'iroqlari paydo bo'lishi mumkin. (Biz yo'lni ko'rmoqchimiz, uning yordami uchun TCP ning bir uchini aniqlash mumkin, bu boshqa belgidir. TCP "keepalive" (keepalive) opsiyalarini engib o'tishga harakat qiling).

Biz osongina kun uchun nom yaratishimiz mumkin. Telnet mijozini bsdi-da ishga tushiring va svr4-da o'chirish serveriga ulaning. Biz bir qatorga kiramiz va tcpdump javoblariga, qanday o'tishga hayron bo'lamiz va keyin server xostidan Ethernet kabelini chiqaramiz va uni qayta ishga tushiramiz. Biz o'zimiz xost-server bilan mos kelmaslikni taqlid qildik. (Server o‘chirilganida TCP modullari o‘chirib qo‘yilishi uchun serverga FIN yubormasligimiz uchun server qayta ishga tushishidan oldin chekilgan kabelni tushirib qo‘ydik.) Server qayta ishga tushirilganligi sababli biz kabelni tashladik va mijozdan serverga yana bitta qatorni sinab ko'rdi. Oskylki server buv rezavantazheniya va zadnannya, yak_snuval haqidagi barcha ma'lumotlarni rezavantazhennyagacha kiritgandan so'ng, ular zadnannya haqida hech narsa bilishmaydi va kelgan segmentlar haqida shubhalanmaydilar. Bunday holda, TCP tomoni qayta o'rnatiladi.

bsdi% telnet svr4 o'chirib tashlang mijozni ishga tushirish
140.252.13.34 urinilmoqda...
svr4 ga ulangan.
Escape belgisi "^]".
salom bu qator yaxshi
bu erda biz server xostini qayta konfiguratsiya qildik
boshqa qator shahar chegirmaga ega bo'lgan (qayta tiklash)
Ulanish xorijiy xost tomonidan yopildi.

Kichkina 18.16 bu ko'tning tcpdump ko'rinishini ko'rsatadi. (Biz vikonlarning ovozini, xizmat turi va MSS ovozi haqidagi ma'lumotlarni olib tashladik, bizning mirkuvannyamizga badbo'y hidni quymang.)

1 0,0 bsdi.1102 > svr4.discard: S 1591752193:1591752193(0)
2 0,004811 (0,0048) svr4.discard > bsdi.1102: S 26368001:26368001(0)
ack1591752194
3 0.006516 (0.0017) bsdi.1102 > svr4.discard: . ack 1

4 5.167679 (5.1612) bsdi.1102 > svr4.discard: P 1:11 (10) ack 1
5 5.201662 (0.0340) svr4.discard > bsdi.1102:. ack 11

6 194.909929 (189.7083) bsdi.1102 > svr4.discard: P 11:25 (14) ack 1
7 194.914957 (0.0050) arp kimda bsdi ayt svr4
8 194.915678 (0.0007) arp javob bsdi is-da 0:0:c0:6f:2d:40
9 194.918225 (0.0025) svr4.discard > bsdi.1102: R 26368002:26368002(0)

Shakl 18.16 Kritik qo'ng'iroq paytida ma'lumotlar segmentining kelishi uchun chegirmali ma'lumotlar.

1-3 qatorlarda odatda o'rnatilgan z'ednannya o'rnatiladi. 4-qatorda "salom u erda" qatori (u taxminan "hey, u erda" deb tarjima qilinishi mumkin) o'chirish serveriga yuboriladi, 5-qatorda tasdiqlash keladi.

Biz bu joyda svr4 kabi chekilgan kabelini oldik, uni qayta o'rnatdik va kabelni qayta uladik. Wuxia protsedurasi taxminan 190 soniya davom etdi. Keyin biz mijozga keyingi kirish qatorini ("boshqa qator") qoraladik va agar biz Qaytish tugmachasini bosgan bo'lsak, qator serverga yuborildi (kichik 18.16-dagi 6-qator). Bula bekor qilinganda, server identifikatori o'chirildi, ammo server qayta o'rnatildi, ARP keshi bo'sh edi, shuning uchun 7 va 8-qatorlarda ARP ushbu kiritish bilan yuklangan. Qayta tiklash uchun 9-qatorda kutamiz. Mijoz tushishni tugatgandan so'ng, uzatish uzoqdagi uy egasi tomonidan to'xtatilganini ko'rdi. (Telnet mijoz turi haqida qolgan ma'lumotlar u qadar ma'lumotli emas.)

Odnochasne vídkrittya

Ikki dodatkív ísnuê mozhlivíst zdíysniti uchun o'sha soatda faolroq vídkrittya. Teri tomonida SYN o'tkazmalari amalga oshirilishi mumkin va SYN to'rdan birma-bir o'tishi mumkin. Bundan tashqari, teri tomoni kichik port raqami bo'lishi kerak, bu boshqa tomondir. Bir soatlik ochiq (bir vaqtning o'zida ochiq) deb ataladi.

Misol uchun, A xostidagi qo'shimcha mahalliy 7777 porti B hostining 8888 portiga faol ravishda yozishi mumkin. Xostga qo'shimcha mahalliy 8888 porti A xostining 7777 portiga faol yozishi mumkin.

Narxlar A xostidagi Telnet mijozi B xostidagi Telnet serveriga kelganida, agar B xostidagi Telnet mijozi A xostidagi Telnet serveriga kelganida bir xil emas. Biroq Telnet mijozlari o‘z port raqamlarini tayinlaganidek, masofaviy Telnet serverlari tayinlangani uchun portlar emas, dinamik ravishda tayinlanadi.

TCP bir kechada bajarilishi mumkin bo'lgan tarzda maxsus ajratilgan, natijada ikkita emas, balki bir yarim. (Boshqa protokollar oilalarida, masalan, OSI transport qatlamida, bu safar bitta emas, ikkita ulanish mavjud.)

Agar bir soatga e'tibor berish kerak bo'lsa, 18.13.2013 yilda chaqaloqqa ko'rsatilishi bilanoq protokol o'zgartiriladi. SYN-ni bir vaqtning o'zida tahrirlash uchun ikki kun kerak bo'ladi, bu vaqtda SYN_SENT (SYN_SENT) lageriga kiradi. Agar teri tomoni SYN ni qabul qilsa, u SYN_ACCEPT ( SYN_RCVD) ga o'zgaradi (bo'lim chaqaloq 18.12) va teri SYN qabul qilinganligini tasdiqlash uchun SYN ni qayta sozlaydi. Agar teri SYN plus ACK bilan tugasa, u ESABLISHED ga o'zgaradi. Stantsiyalarning o'zgarishi biroz olib keldi 18.17.

18.17-rasm Bir soatlik qayta qo'ng'iroq qilish jarayonida segment almashinuvi.

Odnochasne vídkrittya vimagaê almashish chotirma segmentlari, yana bitta, "uch marta qo'l siqish" bilan pastroq. Shunday qilib, biz oxirgi mijozlardan birini emas, balki boshqa serverni chaqiradiganlarga hurmat ko'rsating ushbu maxsus turga haqoratlar mijoz va server kabi harakat qiladi.

Buni bir kechada qilish mumkin, u orqali o'tish oson. Xafa bo'lgan tomonlar taxminan bir soatda boshlanganlikda aybdor bo'lib, SYN birga o'girildi. Shu tarzda, siz SYNni aylantirish imkonini beruvchi uchrashuvning ikki ishtirokchisi o'rtasida aylanishning ajoyib soatiga yordam bera olasiz. Shuni yodda tutish kerakki, ulanish xostining bir ishtirokchisi bsdi, ikkinchisi esa vangogh.cs.berkeley.edu bo‘lgani uchun biz g‘alaba qozonishimiz mumkin. Ularning orasidagi bo'laklar dial-upli SLIP kanali bo'lib, aylanish soati katta bo'lishi mumkin (yuzlab millisekundlar), bu SYNni aylantirish imkonini beradi.

Bir uchi (bsdi) mahalliy 8888 portini (buyruqlar qatori varianti -b) tayinlaydi va keyin boshqa xostning 7777 portiga faol ravishda yozadi:

bsdi% sock-v-b8888 vangogh.cs.berkeley.edu 7777
140.252.13.35.8888 da 128.32.130.2.7777 raqamiga ulangan
TCP_MAXSEG = 512
Salom Dunyo butun qatorni kiriting
va salom
ulanish tengdosh tomonidan yopildi

Oxirgi oxiri taxminan o'sha soatda boshlanadi, o'zingizning mahalliy port raqamingiz 7777ni tan oladi va 8888 portiga faol murojaat qilishni boshlaydi:

vangog% paypoq -v -b7777 bsdi.tuc.noao.edu 8888
128.32.130.2.7777 da 140.252.13.35.8888 raqamiga ulangan
TCP_MAXSEG = 512
salom, dunyo boshqa davlatda tanishtirildi
va u erda biz butun qatorni suiiste'mol qildik
^D va keyin EOF fayli uchun yakuniy belgi kiritildi

Teri bilan aloqa qilish uchun IP manzillari va port raqamlarini tekshirish uchun paypoq dasturining -v buyruq qatorini belgilab oldik. Bu bayroq, shuningdek, teri fanlarida g'olib bo'lgan yana bir MSS. Biz, shuningdek, teri kíntsi bir vaqtning o'zida bir qator joriy etish uchun qanday scolded, ular eng uzoq kínets va u erda narukovany haqida bydpravlení qanday, perekonatisya uchun yig'lab, deb haqoratli mezbonlar biri "belanchak".

Chaqaloqda 18.18 yarmining yarmi uchun segmentlar almashinuvining ko'rsatkichlari. (Biz SYN dam olish kunlarida paydo bo'lgan ba'zi yangi TCP variantlarini ko'rdik, ular 4.4BSD uchun qoida sifatida vangog'da kelgan. Biz SYN taqsimotini taqsimlashda yangi variantlarni tasvirlab beramiz.) 2) ikkita SYN keyin. ACKlar (3 va 4-qatorlar). Kimni bir vaqtning o'zida bir soat ko'radi.

5-qator kirishlarni ko'rsatadi, bsdi dan vangog'ga o'tuvchi "salom, dunyo" qatori 6-qatorni tasdiqlaydi. 7 va 8-qatorlar boshqa yo'nalishda ketadigan "va salom" qatoridan keyin keladi. 9-12-qatorlarda kunning yopilishi ko'rsatilgan.

Berkeleyning aksariyat ilovalari bir kechada to'g'ri kelmaydi. Ushbu tizimlarda, agar siz SYN almashtiriladigan nuqtaga etib borishingiz mumkin bo'lsa ham, hamma narsa segmentlarni, SYN va ACK bilan terilarni ikkala yo'nalishda almashish bilan yakunlanadi. Ko'pgina ilovalar SYN_SENT dan SYN_RCVD ga o'tishni rejalashtirmoqda, guvohlik 18.12.

1 0,0 bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
4096 yutib oling
2 0,213782 (0,2138) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
8192 yutib oling
3 0,215399 (0,0016) bsdi.8888 > vangogh.7777: S 91904001:91904001(0)
ack 1058199042 yutib oling 4096

4 0.340405 (0.1250) vangogh.7777 > bsdi.8888: S 1058199041:1058199041(0)
ack 91904002 8192 yutib oling

5 5.633142 (5.2927) bsdi.8888 > vangogh.7777: P 1:14 (13) ack 1 gʻalaba 4096
6 6.100366 (0.4672) vangogh.7777 > bsdi.8888: Eslatma qoʻshish Eslatmani tahrirlash | ack 14 g'alaba 8192

7 9.640214 (3.5398) vangogh.7777 > bsdi.8888: P 1:14 (13) ack 14 yutib 8192
8 9.796417 (0.1562) bsdi.8888 > vangogh.7777: Eslatma qoʻshish Eslatmani tahrirlash | ack 14 g'alaba 4096

9 13.060395 (3.2640) vangogh.7777 > bsdi.8888: F 14:14 (0) ack 14 yutib 8192
10 13.061828 (0.0014) bsdi.8888 > vangogh.7777: Eslatma qo‘shish Eslatmani tahrirlash | ack 15 g'alaba 4096
11 13.079769 (0.0179) bsdi.8888 > vangogh.7777: F 14:14 (0) ack 15 yutib 4096
12 13.299940 (0.2202) vangogh.7777 > bsdi.8888: Eslatma qoʻshish Eslatmani tahrirlash | ack 15 g'alaba 8192

18.18-rasm Bir soatlik uyg'onish uchun segment almashinuvi.

kechada yopiladi

Yuqorida aytib o'tganimizdek, bir tomondan (ko'pincha mijoz tomonidan boshlanmasa), faol yopilish mavjud bo'lib, u bilan birinchi FIN majburlanadi. Ikkala tomon ham faol ravishda yopilishi mumkin, ammo TCP protokoli bir vaqtning o'zida yopilishga imkon beradi.

18.12.da kichkintoyni koʻrsatuvchi shartlarga koʻra, agar dastur yopilishidan oldin signalni koʻrsa, tajovuzkor nuqta OʻRNATISHDAN FIN_WAIT_1ga oʻtadi. Agar siz haqoratlanganingizni his qilsangiz, bu erda chegarada g'azablanishingiz mumkin bo'lsa, FIN yuboring. Agar FIN qabul qilinsa, oxirgi ACK FIN_WAIT_1 teri tomoniga qo'yiladi va oxirgi ACK teri tomondan qo'shiladi. Agar teri oxirgi ACK bilan tugasa, u TIME_WAIT ga o'zgaradi. Kichkintoyda 18.19 staniv o'zgarishini ko'rsatadi.

18.19-rasm Bir soatlik o'chirish jarayonida segment almashinuvi.

Bir soatlik yopilgan taqdirda, sezilarli darajada yopilganda bo'lgani kabi, bunday miqdordagi paketlarni almashtirish to'lanadi.

TCP sarlavhasini options() yordamida bekor qilish mumkin. Asl TCP spetsifikatsiyasida aniqlangan yagona variantlar quyidagilardir: yakuniy variantlar ro'yxati, operatsiyasiz va maksimal segment hajmi. Biz dermal SYN segmentida amaliy bo'lgan MSS opsiyasini aktsiyalarimiz qatoriga kiritdik.

Yana yangi RFClar, masalan, RFC 1323 qo'shimcha imkoniyatlar TCP, ularning aksariyati keyingi ilovalarda ko'rish mumkin. (Biz yangi variantlarni .da tasvirlab beramiz.) 18.20 ko'rsatkichlari bo'yicha, RFC 793 va RFC 1323 da ta'riflanganidek, TCP oqim parametrlari formati jim.

18.20-rasm TCP variantlari.

Teri varianti opsiya turini ko'rsatadigan 1 baytli turga (turga) asoslangan. 0 va 1 turdagi variantlar 1 baytni egallaydi. Boshqa variantlar bayt turiga ikki (len) baytni kuzatish imkonini beradi. Dovjina - tse povna dovjina, u dovjina kabi baytlarni o'z ichiga oladi.

"Hech qanday operatsiyalar" (NOP) opsiyasi qo'shildi, shunda ishchi darhol 4 baytga ko'p bo'lishi mumkin bo'lgan maydonlarni saqlashi mumkin. Agar biz TCP ni 4.4BSD tizimiga o'rnatsak, tcpdump yordamida SYN kob segmenti uchun quyidagi variantlardan foydalanish mumkin:

MSS opsiyasi 512 ga o'rnatiladi, undan keyin NOP, so'ngra oyna o'lchamini o'zgartirish opsiyasi. Birinchi NOP opsiyasi oynani 4 baytgacha kengaytirish uchun 3 baytlik variantni qo'shish uchun o'zgartiriladi. Shunday qilib, 10 baytlik vaqt tamg'asi variantidan oldin ikkita NOP mavjud, shuning uchun u 12 baytni oladi.

4, 5, 6 va 7-turi kabi ba'zi boshqa variantlar selektiv ACK variantlari va oy variantlari deb ataladi. Biz ularni kichik 18.20 da ko'rsatmadik, shuning uchun vaqt tamg'asi opsiyasini va tanlangan ACKni almashtirish varianti hozircha muhokama qilinmoqda va RFC 1323 ga kiritilmagan. T/TCP taklifini ko'rsatishingiz kerak. TCP tranzaktsiyalari uchun (24-bo'lim) 11, 12 va 13 ga teng bo'lgan uchta variantni ko'rsatadi.

TCP serverini amalga oshirish

1-bobning bo'limida ular TCP serverlarining aksariyati raqobatbardosh ekanligini aytishdi. Agar server yangi mijozni o'rnatish haqida so'rovni qabul qilsa, u so'rovni qabul qiladi va yangi mijozga xizmat ko'rsatadigan yangi jarayonni boshlaydi. Fallow operatsion tizimida g'alaba qozondi turli yo'llar bilan yangi server yaratish. Unix tizimlarida qo'shimcha vilkalar funksiyasi bilan yangi jarayon yaratiladi.

Biz TCP raqobatbardosh serverlar bilan qanday o'zaro aloqada bo'lishini muhokama qilishimiz kerak. Keyingi so'rov bo'yicha so'rovni olishni xohlayman: port raqamlari qanday olinadi, agar server mijozdan yangi ulanish bo'yicha so'rovni bekor qilsa va so'rovga birdaniga oz miqdordagi so'rovlar kelib tushsa nima bo'ladi?

TCP server port raqamlari

TCP serveri nima ekanligini ko'rib, TCP port raqamlari bilan qanday ishlashini aniqlashimiz mumkin. Netstat buyrug'i yordamida Telnet serverini ko'rib chiqamiz. Faol Telnet qo'ng'iroqlari bo'lmasligi uchun hujum tizim uchun o'rnatiladi. (Biz Telnet serverini ko'rsatadigan bitta qatorning orqasida barcha qatorlarni ko'rdik.)

quyosh % netstat -a -n -f inet
Faol Internet ulanishlari (shu jumladan serverlar)
Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)
tcp 0 0 *.23 *.* TINGLASH

Prapor -nafaqat lagerda topilganlar haqida emas, balki chegaraning barcha so'nggi nuqtalari haqida gapirib beradi (TA'SLANGAN). Ensign -n boshqa IP-manzillar o'ninchi raqamda, manzilni nomlarga aylantirish uchun DNS-ni o'zgartiring va boshqa raqamli port raqamlari (masalan, 23) boshqa xizmat nomlarini o'zgartiring (ushbu Telnet rejimida). -finet opsiyasi TCP va UDP so'nggi nuqtalari haqida ko'proq ma'lumot beradi.

Mahalliy manzil *.23 sifatida ko'rsatiladi, bu joker belgi yoki metabelgi deb ataladi. Bu shuni anglatadiki, kirish so'rovi (SYN) har qanday mahalliy interfeysdan qabul qilinadi. Agar xost bir nechta interfeysga ega bo'lsa, biz bitta aniq IP manzilni mahalliy IP manzil sifatida belgilashimiz mumkin (biri xostning IP manzili uchun) va faqat ushbu interfeysdan olingan xostga so'rovlar amalga oshiriladi. (Biz tarqatishda kech ishlamoqchimiz.) Mahalliy port 23, lekin Telnet porti ancha orqada.

Masofaviy manzil *.* sifatida ko'rsatilgan, ya'ni IP manzil uzoqroq. masofaviy raqam port hali ko'rinmaydi, shuning uchun oxirgi nuqta stantsiyada joylashgan LISTEN, ochikuyuchi pributtya zap on z'ednannya.

Shu bilan birga, biz serverga keladigan slip-xostda (140.252.13.65) Telnet mijozini ishga tushiramiz. Mana netstat buyrug'ining vizual qatorlari:


tcp 0 0 140.252.13.33.23 140.252.13.65.1029 TUZILGAN
tcp 0 0 *.23 *.* TINGLASH

23-port uchun birinchi qator O'RNING. Ushbu ulanish uchun mahalliy va masofaviy manzillarning barcha elementlari saqlanadi: mahalliy IP manzillar í port raqami, í masofaviy IP manzillar í port raqami. Mahalliy IP-manzillar kelganda qo'ng'iroq so'raladigan interfeysga beriladi (Ethernet interfeysi, 140.252.13.33).

LISTEN stantsiyasida yakuniy nuqta yo'qoldi. Bu yakuniy nuqta, chunki raqobatbardosh server uchrashuv so'rovini qabul qilish uchun g'alaba qozonadi, shunda siz kelajakka kelishingiz mumkin. Bunday holda, yadroda joylashgan TCP moduli, kelish va qabul qilish so'ralgan paytda, O'RNATILAN stansiyada yangi yakuniy nuqtani yaratdi. Shunday qilib, ulanish uchun port raqamiga ega bo'lganlarni hurmat qiling, chunki ular O'ZBEKISTON stansiyasida, o'zgarmagan holda: vin dor_vnyu 23, oxirgi nuqtaga kelsak, LISTEN stantsiyasida bo'lgani kabi.

Shu bilan birga, biz bitta mijozdan (slip) butun serverga yana bitta Telnet mijozini ishga tushiramiz. Netstat buyrug'ining chiqishi quyidagicha bo'ladi:

Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 TUZILGAN
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 TUZILGAN
tcp 0 0 *.23 *.* TINGLASH

Shu bilan birga, biz bir xil xostdan bitta serverga ikkita ORQANGAN ulanishga ega bo'lishimiz mumkin. Mahalliy port raqamidan xafa bo'ldim, ya'ni 23. TCP uchun bu muammo emas, chunki masofaviy portlar soni har xil. Boshqa tomondan, buni ayblang, chunki Telnet mijozi dinamik ravishda tayinlangan portni yutadi va topshiriq portga dinamik ravishda tayinlanadi, biz bilamizki, biz faqat xostda berilgan soat davomida ko'z qismaydigan portni dinamik ravishda belgilashimiz mumkin. (slip).

Ushbu misol TCP mahalliy va masofaviy manzillarga teng bo'lgan turli qiymatlarga ega bo'lgan kirish segmentlarini qanday demultiplekslashini ko'rsatadi: maqsad IP manzili, maqsad port raqami, gerel IP manzili va gerel port raqami. TCP qaysi jarayon kirish segmentini tanilgan port raqamiga qarab aniqlay olmaydi. Shuningdek, LISTEN stantsiyasida joylashgan 23-portdagi uchta terminal nuqtasidan faqat bittasi qo'ng'iroqqa kirish so'rovlarini qabul qiladi. ESABLISHED stantsiyasida joylashgan so'nggi nuqtalar SYN segmentlarini qabul qila olmaydi va LISTEN stantsiyasida joylashgan oxirgi nuqta ma'lumotlar segmentlarini qabul qila olmaydi.

Shu bilan birga, biz Ethernet orqali emas, balki quyoshdan SLIP kanali orqali o'tuvchi solaris hostidan yana bitta Telnet mijozini ishga tushiramiz.

Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)
tcp 0 0 140.252.1.29.23 140.252.1.32.34603 TUZILGAN
tcp 0 0 140.252.13.33.23 140.252.13.65.1030 TUZILGAN
tcp 0 0 140.252.13.33.23 140.252.13.65.1029 TUZILGAN
tcp 0 0 *.23 *.* TINGLASH

Birinchi o'rnatilgan (O'RNATISH) manzili uchun mahalliy IP-manzil endi SLIP kanal interfeysi manziliga boy interfeys xost quyoshida (140.252.1.29) berilgan.

Mahalliy IP manzilini almashtiring

Agar server o'zining mahalliy IP manzili sifatida joker belgilarni ishlatmasa, ma'lum bir mahalliy interfeys manzilini o'rnatsa nima bo'lishini qiziqtirishimiz mumkin. Paypoq dasturimizning IP-manzilini (yoki xost nomini) qanday aniqlaymiz, agar siz server sifatida g'alaba qozonsangiz, bu IP manzil siz eshitadigan so'nggi nuqtaning mahalliy IP-manziliga aylanadi. Masalan

quyosh % paypoq-lar 140.252.1.29 8888

Oraliq server faqat SLIP interfeysidan keladigan qo'ng'iroqlar uchun (140.252.1.29). Netstat buyrug'ining winnowok dasturi yanada rivojlangan:

Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)

Solaris hostidan SLIP kanali orqali ushbu serverga qanday etib boramiz, mana biz boramiz.

Proto Recv-Q Send-Q Mahalliy manzil Xorijiy manzil (shtat)
tcp 0 0 140.252.1.29.8888 140.252.1.32.34614 TUZILGAN
tcp 0 0 140.252.1.29.8888 *.* TINGLASH

Biroq, agar siz Ethernet (140.252.13) orqali xostdan ushbu serverga kirishga harakat qilsangiz, serverga so'rov TCP moduli tomonidan qabul qilinmaydi. Agar biz tcpdump yordamiga hayron bo'lsak, u holda RST chiqishi SYN-da o'chirilganga o'xshaydi, kichik 18.21 da ko'rsatilganidek.

1 0,0 bsdi.1026 > sun.8888: S 3657920001:3657920001(0)
4096 yutib oling
2 0.000859 (0.0009) sun.8888 > bsdi.1026: R 0:0 (0) ack 3657920002 yutib 0

18.21-rasm Serverning mahalliy IP-manziliga asoslangan tarmoqda quvvat almashish.

Serverda ishlaydigan dastur hech qachon ulanishni so'ramaydi - almashinuv qo'shimcha tomonidan tayinlangan mahalliy IP-manzil asosida yadrodagi TCP moduli tomonidan amalga oshiriladi.

Masofaviy IP manzillarni almashish

11-bobda biz UDP serveri mahalliy IP-manzil va port raqamini belgilashdan tashqari masofaviy IP-manzil va port raqamini ham belgilashi mumkinligini aniqladik. Функції інтерфейсу, наведені в RFC 793, дозволяють серверу здійснювати пасивне відкриття на основі повністю описаного віддаленого сокета (у цьому випадку очікується запит на активне відкриття від конкретного клієнта) або не зазначеного віддаленого сокета (у цьому випадку очікується запит на з'єднання від будь- qaysi mijoz).

Afsuski, ko'pgina APIlar bunday imkoniyatlarni ta'minlamaydi. Server rozetkani aniqlanmagan holda qoldirib, ulanishni tekshirib, keyin mijozning IP manzili va port raqamini o'zgartirganlikda aybdor.

18.22-rasmda siz o'zingiz uchun TCP serverini o'rnatishingiz mumkin bo'lgan uchta turdagi manzillar va portlar bilan o'zaro bog'langan manzillar ko'rsatilgan. Barcha lport variantlari uchun server porti uzatiladi va localIP mahalliy interfeysning IP manzili uchun javobgardir. Jadvalda uchta qator tartiblangan tartib, kirish so'rovini qabul qilishning mahalliy so'nggi nuqtasi sifatida TCP modulining tayinlangan tartibini ko'rsatadi. Jadvalning birinchi qatori avval sinovdan o'tkaziladi, so'ngra boshqa spetsifikatsiyalar (almashtirish belgilariga tayinlangan IP manzillari bilan qolgan qator) qolganlar tomonidan sinab ko'riladi.

18.22-rasm TCP serveri uchun mahalliy va masofaviy IP manzil va port raqamini ko'rsating.

Hisob-kitob uchun kirish to'lovi

Raqobatbardosh server teri mijoziga xizmat ko'rsatadigan yangi jarayonni ishga tushiradi, server buni eshitadi, aybdor, lekin har doim buyurtma uchun kiritish so'rovining boshlanishini qayta ishlashga tayyor. Bu raqobatbardosh serverlar g'alaba qozonishning asosiy sababidir. Biroq, agar tinglayotgan server yangi jarayon yaratayotgan bo'lsa yoki operatsion tizim yuqoriroq ustuvorlikka ega bo'lgan boshqa jarayonni qayta ishlash bilan band bo'lsa, so'rov o'sha paytda o'z-o'zidan kelishi aniq. Tinglash dasturi band bo'lganda TCP qo'ng'iroqqa kirishni qanday qayta ishlaydi?

Berkeley ilovalari ushbu qoidalarga amal qiladi.

  1. Terining so'nggi nuqtasi, men eshitganimdek, kunning oxirgi sanasini belgilashi mumkin, shuning uchun ular TCP tomonidan qabul qilinishi mumkin ("uch marta qo'l siqish" tugallangan), lekin hali qo'shimcha tomonidan qabul qilinmagan. TCP to'lovlarini qabul qilish va shaharda yoga o'tkazish o'rtasidagi farqni o'tkazishda hurmatli bo'ling, bu dastur veksellardan hisoblarni qabul qiladi.
  2. Dastur cherga narxining chegarasini yoki chegarasini ko'rsatadi, chunki u orqada qolish deb ataladi. O'zgartirishlar soni 0 dan 5 gacha bo'lishi mumkin. (Qo'shimcha qo'shimchalar maksimal 5 qiymatini bildiradi.)
  3. Agar qo'ng'iroq qilish uchun so'rov bo'lsa (SYN segmenti), TCP qo'ng'iroqning oqim tezligini ko'rib chiqadi hozirgi moment u tsíêí̈ kontsevoí̈ nuqtasi uchun chergu, scho eshitish, kim bilan vin z'yasovuê, chi zadnannya qabul qilishi mumkin. Biz shuni ta'kidlaymizki, dasturda ko'rsatilgan orqada qolish qiymati maksimal bo'ladi, shuning uchun bu unchalik oddiy bo'lmasa ham, maqsadli nuqta uchun maksimal kunlar sonini qatorga qo'yishga ruxsat beriladi. 18.23-rasmda kechikishning o'zaro qiymatlari va an'anaviy Berkeley tizimlari va Solaris 2.2-da kechiktirilishi mumkin bo'lgan maksimal kunlarning haqiqiy soni ko'rsatilgan.

    orqada qolgan qiymatlar

    z'ednan maksimal soni, qora da qo'yish

    An'anaviy BSD

    18.23-rasm Eshitiladigan oxirgi nuqta uchun qabul qilingan qo'ng'iroqlarning maksimal soni.

    E'tibor bering, orqada qolishning qiymati faqat bitta oxirgi nuqta uchun chiziqqa qo'yilgan kunlarning maksimal sonini ko'rsatadi, bu siz eshitgan, ularning barchasi allaqachon TCP tomonidan qabul qilingan va ular qo'shimcha tomonidan qabul qilinganligini ko'rsating. Orqaga tushish qiymati tizim tomonidan o'rnatilishi mumkin bo'lgan maksimal kunlar soniga yoki raqobatbardosh serverga xizmat ko'rsatishi mumkin bo'lgan mijozlar soniga hissa qo'shishi kutilmaydi.

    Biz ochíkuval bor, deb bir xil kichik o'zi ustida Solaris uchun ahamiyati. An'anaviy BSD qiymati (ba'zi bir asossiz sabablarga ko'ra) orqada qolgan qiymatni 3 marta 2 ga bo'lingan holda, ortiqcha 1 ga qaytarishdir.

  4. Tinglashning yakuniy nuqtasi yangi ulanish vaqti bo'lgan taqdirda (Div. Baby 18.23), TCP moduli kelganini (ACK) SYNni tan oladi va ovozni o'rnatadi. Eshitish so'nggi nuqtasi bo'lgan server dasturi bu yangi buyurtmani dotyga yubormaydi, "uch marta qo'l siqish" ning uchinchi segmenti doklar tomonidan qabul qilinmaydi. Shuningdek, mijoz server ma'lumotlarni qabul qilishga tayyorligini ko'rsatishi mumkin, agar mijozning faol so'rovi muvaffaqiyatli bajarilsa, keyingi server dasturi yangi ulanish haqida xabardor qilinadi. (Albatta, TCP serverini oddiygina ma'lumotlar kiritish maydoniga qo'yish mumkin.)
  5. Yangi soatni qo'yish uchun vaqt yo'qligi sababli, TCP SYN qabullarini e'tiborsiz qoldiradi. Kirishda hech narsa urinilmaydi (RST segmentida harakatlanishga urinilmaydi). Agar server, siz eshitganingizdek, allaqachon qabul qilingan buyurtmalarni qabul qilishga javob bera olmasa, agar ular chegaragacha to'ldirilgan bo'lsa, mijozning faol javobi taym-aut bilan to'xtatiladi.

Paypoq dasturida yordam olish uchun ushbu skriptni ko'rib chiqishimiz mumkin. Keling, yangi variantdan (-O) boshlaylik, go'yo oxirgi nuqta yopilgandan so'ng, siz eshitganingizdek, uchrashuv uchun har qanday so'rovni qabul qilishdan oldin pauza qilish zarurligini eslatib turamiz. Biz uzoq vaqt pauza bilan mijozni ishga tushirishni boshlaganimizdan so'ng, server qo'ng'iroqni qabul qilishdan xijolat tortadi va sodir bo'lganlarni o'zgartirish uchun tcpdump buyrug'idan foydalanamiz.

bsdi% paypoq-s-v-q1-O30 5555

-q1 opsiyasi tinglashning so'nggi nuqtasini 1-qiymatga o'rnatadi, an'anaviy BSD tizimi uchun u har bir dum uchun ikkita kirish uchun amal qiladi (18.23-rasm). Variant -O30 har qanday mijoz qo'ng'irog'ini qabul qilishdan 30 soniya oldin "uyqu" dasturini o'chiradi. Mijozning o'tishini boshlash uchun bizga 30 soniya vaqt bering, shunda chiziqni yakunlang. Sun Sunda to'rtta mijozni ishga tushiramiz.

Birinchi mijozning birinchi SYN-dan boshlanadigan tcpdump dasturining kichik 18.24 o'qishida. (Biz ovozli xabar va MSS ovozli xabarini ko'rdik. Shuningdek, mijoz port raqamlarini qalin qilib ko'rdik, agar TCP tiklansa - "uch marta qo'l siqish").

1090-portdan kelgan mijoz turiga birinchi so'rov TCP moduli tomonidan qabul qilinadi (1-3-segmentlar). 1091-portdagi mijoz uchun yana bir so'rov ham TCP moduli tomonidan qabul qilinadi (4-6-segmentlar). Server dasturi hali ham "uyqu" va kerakli uyg'onishni qabul qilmagan. Barcha viconan yadrodagi TCP moduli tomonidan amalga oshirildi. Bundan tashqari, ikkita mijozning "uch martalik qo'l yozuvi" muvaffaqiyatli yakunlanganligini faol tasdiqlashni muvaffaqiyatli yakunlaganligini ko'rsatish talab qilinadi.

10,0 quyosh. 1090 >bsdi.7777:S1617152000:1617152000(0)
2 0.002310 (0.0023) bsdi.7777 > quyosh. 1090 : S4164096001:4164096001(0)
30.003098 (0.0008) quyosh. 1090 > bsdi.7777: . ack1617152001
ack 1
4 4.291007 (4.2879) quyosh. 1091 >bsdi.7777:S1617792000:1617792000(0)
5 4.293349 (0.0023) bsdi.7777 > quyosh. 1091 : S4164672001:4164672001(0)
ack1617792001
6 4.294167 (0.0008) quyosh. 1091 > bsdi.7777: . ack 1
7 7.131981 (2.8378) sun.1092 >
8 10.556787 (3.4248) sun.1093 > bsdi.7777: S 1618688000:1618688000(0)
9 12.695916 (2.1391) sun.1092 > bsdi.7777: S 1618176000:1618176000(0)
10 16.195772 (3.4999) kun.1093 >
11 24.695571 (8.4998) sun.1092 > bsdi.7777: S 1618176000:1618176000(0)
12 28.195454 (3.4999) quyosh. 1093 >bsdi.7777:S1618688000:1618688000(0)
13 28.197810 (0.0024) bsdi.7777 > quyosh. 1093 : S4167808001:4167808001(0)
14 28.198639 (0.0008) quyosh. 1093 > bsdi.7777: . ack1618688001
ack 1
15 48.694931 (20.4963) quyosh. 1092 >bsdi.7777:S1618176000:1618176000(0)
16 48.697292 (0.0024) bsdi.7777 > quyosh. 1092 : S4170496001:4170496001(0)
ack1618176001
17 48,698145 (0,0009) quyosh. 1092 > bsdi.7777: . ack 1

18.24-rasm Orqaga qolganlarni qidirish uchun tcpdump dasturini ko'rish.

Biz uchinchi mijozni 7-segmentda (port 1092) va to'rtinchi mijozni 8-segmentda (1093-port) ishga tushirishga harakat qildik. TCP SYN haqoratiga e'tibor bermadi, shuning uchun oxirgi nuqta uchun chiziq, men eshitganimdek, to'ldiriladi. Huquqbuzar mijozlar o'zlarining SYN-larini 9, 10, 11, 12 va 15-segmentlarda qayta uzatdilar. To'rtinchi mijozning uchinchi qayta uzatilishi qabul qilindi (12-14-segmentlar), shuning uchun serverning 30 soniyalik pauzasi tugadi va server ikkita qabul qilinganini ko'rdi, iblisni tozalagandan keyin. (Buning sababi, so'rov server tomonidan soat 30 dan ortiq bo'lgan vaqtda emas, balki 28.19 da qabul qilinganligi bilan bog'liq; bu kerak bo'lgan odam bilan sodir bo'ldi. server ishga tushgandan so'ng birinchi mijozni ishga tushirish uchun bir necha soniya [1-segment, soat boshlanishi]. Uchinchi mijozning to'rtinchi qayta uzatilishi ham qabul qilinadi (15-17-segmentlar). To'rtinchi mijozning sanasi (port 1093) server tomonidan uchinchi mijoz (port 1092) sanasidan oldin 30 soniyadan keyin 30 soniyalik pauza tugashi va mijozning qayta uzatilishi o'rtasida qabul qilingan.

Ishonchimiz komilki, yarimdan qabul qilinganlar soni dastur tomonidan FIFO tamoyiliga ko'tariladi (birinchi g'alaba, birinchi g'alaba). Shunday qilib, TCP 1090 va 1091 portlarga qo'shimchani qabul qilganligi sababli, biz dastur 1090 portga, keyin esa 1091 portga qaytayotganini aniqladik. Biroq, Berkeley ilovalarining aksariyatida xatolik bor, buning natijasida LIFO buyurtma g'alaba qozonadi (oxirgi yuqoriga, birinchi pastga). Vyrobniki ko'p marta kechirishni tuzatishga harakat qildi, oqsil SunOS 4.1.3 kabi tizimlarda ishlatilgan.

Agar chiziq to'lgan bo'lsa, TCP kiruvchi SYNni e'tiborsiz qoldiradi va kechirim orqali RST variantini hurmat qilmaydi. Ovoz qo'ng'iroq to'ldirilgan, chunki dastur yoki operatsion tizim band, shuning uchun dastur kiritilgan ma'lumotlarni qayta ishlay olmaydi. Bunday lagerni qisqa vaqt ichida o'zgartirish mumkin. Biroq, agar TCP server qayta o'rnatilsa, mijozning faol ulanishi uziladi (agar server ishga tushirilmagan bo'lsa). Shunday qilib, agar SYN e'tiborga olinmasa, TCP mijozi yangi ulanish uchun joy bormi, degan savol bilan SYNni keyinroq qayta uzatishga ikkilanadi.

Bu erda TCP/IP ning barcha ilovalari uchun amaliy bo'lgan juda muhim tafsilotni muhokama qilish kerak. TCP ulanish uchun kirish so'rovini (SYN) boshqa vaqtda ham, keyinroq ham qabul qilishiga g'alaba qozondi. Agar shunday bo'lsa, dasturni kimdan so'rash kerakligiga qarab ajablanib bo'lmaydi (gerelning IP manzili va gerelning port raqami). TCP dan foydalanish shart emas, bu ko'proq yovvoyi usul bo'lib, amalga oshirishda g'alaba qozonadi. TLI (1-bo'linish) kabi API kabi, u ulanishga so'rov haqida qo'shimcha kiritish imkonini beradi va so'rovni to'xtatishga, qabul qilishga imkon beradi, so'ngra TCP-ni o'zgartirganda shunday kiritingki, agar dastur pribulo, haqiqatan ham TCP allaqachon "uch marta qo'l silkitish" ni tugatdi! Boshqa transport yo'laklarida kelishlarni ajratish va reyslarni qabul qilish mumkin (OSI transport lane), TCP bunday imkoniyatga ega emas.

Solaris 2.2 TCP ga ulanishda kiruvchi so'rovni qabul qilishiga ruxsat bermaslik imkoniyatini beradi, lekin dasturga ruxsat bermang (E dasturini tarqatishda tcp_eager_listeners).

Ushbu xatti-harakat, shuningdek, TCP serverini faol mijoz qo'ng'irog'i to'xtatiladigan tarzda yaratib bo'lmasligini anglatadi. Agar yangi mijoz bilan ulanish serverga o'tkazilsa, TCP "uch tomonlama qo'l siqish" allaqachon tugallangan va mijozning faol qo'ng'irog'i muvaffaqiyatli yakunlangan. Agar server mijozning IP manzili va port raqamiga hayron bo'lsa va siz ushbu mijozga xizmat qilishni xohlamasangiz, barcha serverlar shunchaki chiptani yopishi mumkin (FIN yuborilganda) yoki chiptani tashlab yuborishi mumkin (agar RST yuborilgan bo'lsa). Agar mijoz buni his qilsa, serverda hamma narsa yaxshi, parchalar faol javob bilan yakunlandi va, ehtimol, serverga so'rov yuborilgandan keyin.

Qisqa visnovki

Bundan oldin, ikkita jarayon TCP g'alabalari bilan ma'lumot almashishi mumkinligi sababli, o'zaro tartibni o'rnatish sizning mas'uliyatingizdir. Agar ular orasidagi ish tugallangan bo'lsa, tartib buzilishi mumkin. Bo'linish kimda batafsil ko'rib chiqiladi, "uch marta qo'lda kesish" kotirovkalari uchun kotirovka qanday o'rnatiladi va chotirioh bo'laklari kotirovkalari qanday tartibga solinadi.

Biz TCP sarlavhasidagi barcha maydonlarni ko'rsatish uchun tcpdump-ni buzdik. Shuningdek, biz qo'ng'iroq qanday sozlanganiga qiziqdik, lekin u vaqt tugashi bilan to'xtatilishi mumkin, qo'ng'iroq qanday to'xtatiladi, qo'ng'iroq yopilgandan keyin nima sodir bo'ladi va TCP qo'ng'iroqni yopish rejimiga qanday chaqiradi, bir soatlik o'chirish va bir soatlik o'chirish.

TCP ning ishlashini tushunish uchun TCP ning asosiy o'zgarishlar diagrammasini ko'rib chiqish kerak. Biz nuqtalarni, kunning qanday tiklanayotganini va lagerda qachon o'zgarishlarni ko'rib chiqdik. Shunday qilib, biz TCP serverlari TCP chaqiruvini qanday o'rnatayotganini ko'rib chiqdik.

TCP ulanishlari 4 ta parametr bilan noyob tarzda aniqlanadi: mahalliy IP manzil, mahalliy port raqami, masofaviy IP manzil va masofaviy port raqami. Har doim o'chirish sodir bo'lganda, bir tomon o'chirishni eslab qolish uchun bir xil aybdor bo'ladi, bu holda biz TIME_WAIT rejimidan foydalanilganligini aytamiz. Qoidaga ko'ra, bu tomon MSL soatidan o'tib, amalga oshirish uchun qabul qilinganidan keyin butun rejimga kirgan holda faolroq bo'lishi mumkin.

to'g'ri

  1. Bizga dilerning aytishicha, joriy tartib raqami (ISN) 1 ga o'rnatilishi va 64000 terisi pivsec ga oshishi va faolroq bo'lishi kerak. Tse ISNdagi eng yosh uchta raqam abadiy 001 bo'lishini anglatadi. Biroq, kichik 18,3 qi uchun teri uchun eng yosh uchta raqam to'g'ridan-to'g'ri 521 ni qo'shadi. Nima bo'ldi?
  2. 18.15 da kichkintoyda biz 12 ta belgini qoraladik, keyin ular TCP 13 bayt yuborganligi uchun kurashdilar. 18.16 da kichkintoyda biz 8 ta belgini suiiste'mol qildik, lekin TCP 10 bayt yubordi. Nima uchun birinchi vipadga 1 bayt, ikkinchisiga 2 bayt qo'shildi?
  3. Nima uchun vídminníst mízh napívvídkritim z'ednannyam va napívzkritim zadnannyam deyish kerak?
  4. Biz paypoq dasturini server sifatida ishga tushirganimizdan so'ng biz robotni to'xtatamiz (asl mijoz unga ulanmagan bo'lsa), biz serverni beparvolik bilan qayta ishga tushirishimiz mumkin. Tse 2MSL stantsiyasida vinni olish mumkin emasligini anglatadi. Men shartlarni sxemalar bilan tushuntiraman, o'zgartiraman.
  5. Port 2MSL tekshirish lagerining bir qismi ekan, mijoz bir xil mahalliy port raqamini qayta yuta olmasligini ko'rsatdik. Biroq, biz sock binar dasturini mijoz sifatida ishga tushirganimizda, serverga bir soat ichida etib kelganimizda, biz bir xil mahalliy port raqamidan foydalanishimiz mumkin. Bundan tashqari, biz 2MSL lagerida bo'lgandek, yangi biznes yaratishimiz mumkin. O'zingizni qanday his qilyapsiz?

    quyosh % paypoq -v bsdi kunduzi

    Chorshanba 7 iyul 07:54:51 1993 yil
    ulanish tengdosh tomonidan yopildi

    quyosh % paypoq -v -b1163 bsdi kunduzi bir xil mahalliy port raqamini qayta yo'naltirish
    140.252.13.33.1163 da 140.252.13.35.13 raqamiga ulangan
    Chorshanba 7 iyul 07:55:01 1993 yil
    ulanish tengdosh tomonidan yopildi

  6. Misol uchun, agar biz FIN_WAIT_2 tegirmonini tavsiflagan bo'lsak, biz ko'proq ilovalar YOPIQ tegirmondan YOPIQ tegirmonga o'tkazilishi kerakligini ko'rsatdik. Boshqa tomon (CLOSE_WAIT stantsiyasida) yopishdan oldin 12 kreditni qanday tekshiradi (FINni qayta yo'naltirish), TCP FINni olib qo'yishdan nimani oladi?
  7. Telefon liniyasining qaysi tomoni faolroq, qaysi tomoni passiv ovoz? Bir kechada ko'rish mumkinmi? Bir kechada yopishingiz mumkinmi?
  8. Kichkina 18.6 da biz ARP zapizu yoki ARP vodguk olmadik. Biroq, svr4 xostining apparat manzillari bsdi ARP keshida bo'lishi mumkin. ARP keshida mavjud bo'lmagan bu kichik narsa uchun nimani o'zgartirishim kerak?
  9. Tcpdump buyrug'i bilan nima sodir bo'layotganini tushuntiring. 18.13-rasm bilan yoga sozlang.

    1 0.0 solaris.32990 > bsdi.discard: S 40140288:40140288 (0)
    8760 yutib oling
    2 0,003295 (0,0033) bsdi.discard > solaris.32990: S 4208081409:4208081409 (0)
    ack 40140289 yutib oling 4096

    3 0.419991 (0.4167) solaris.32990 > bsdi.discard: P 1:257 (256) ack 1 yutib 9216
    4 0.449852 (0.0299) solaris.32990 > bsdi.discard: F 257:257 (0) ack 1 yutib 9216
    5 0.451965 (0.0021) bsdi.discard > solaris.32990:. ack 258 g'alaba 3840
    6 0.464569 (0.0126) bsdi.discard > solaris.32990: F 1:1 (0) ack 258 yutdi 4096
    7 0.720031 (0.2555) solaris.32990 > bsdi.discard: . ack 2 g'alaba 9216

  10. Nima uchun kichik 18.4 serveri mijozning FINidagi ACKni o'z FIN bilan birlashtira olmaydi, segmentlar sonini o'z-o'zidan uchtaga o'zgartiradi?
  11. 18.16 chaqaloq uchun nima uchun RST buyurtma raqami 26368002?
  12. Ayting-chi, daraja bo'yicha bo'linish printsipi bo'yicha MTU haqida TCP ni kanal darajasiga navbatga qo'yish uchun nima asos bo'ladi?
  13. TCP tanib olish port raqamini aniqlash orqali demultiplexatsiya qilinadi. Chi to'g'rimi?
Qo'l yozuvi TCP-ni yo'qoting

TCP seansining boshlanishi jarayoni ("qo'l bilan qirqish" deb ham ataladi) uch qismdan iborat.

1. Sanani belgilashi mumkin bo'lgan mijoz, ketma-ketlik raqami va SYN ensign bilan segment bilan serverni bekor qiladi.

  • Server segmentni olib tashlaydi, tartib raqamini eslab qoladi va yangi mijozga xizmat ko'rsatish uchun rozetka (buferlar va xotira tuzilmalari) yaratishga harakat qiladi.
    • Muvaffaqiyatli bo'lsa, server mijozga segmentni ketma-ketlik raqami bilan yuboradi va SYN va ACK ni belgilaydi va SYN-RECEIVED stantsiyasiga o'tadi.
    • Muvaffaqiyatsiz bo'lgan taqdirda, server segmentni RST ensign bilan mijozga yuboradi.

2. Agar mijoz SYN bayrog'i bilan segmentni olib tashlasa, u holda tartib raqamini eslab qoladi va segmentni ACK bayrog'i bilan yuboradi.

  • Yakshcho vín bir soat otrimuê i prapor ACK (qanday ovoz va vídbuvaêtsya), vín TASBILGAN stantsiyaga o'ting.
  • Agar mijoz segmentni RST belgisi bilan qabul qilsa, u ulanishga harakat qiladi.
  • Agar mijoz 10 soniya davomida kechikishni bekor qilmasa, u yana qo'ng'iroq qilish jarayonini takrorlaydi.

3. Agar server ACK belgisi bilan SYN-RECEIVED segmentini qabul qila olsa, u ESABLISHED ga o'tadi.

  • Aks holda, vaqt tugashidan keyin rozetka yopiladi va YOPIQ holatiga o'tadi.

Jarayon "triheap uzgodzhennyam" deb ataladi oskylki ulardan bexabar, scho mumkin o'rnatish jarayoni z'dnannya z vikoristannya chotirokh segmentív (orqa server uchun SYN, orqa mijoz uchun ACK, orqa mijoz uchun SYN, tejamkorlik uchun ACK soat), amalda uchta segment g'alaba qozondi.

TCP - vikno

Qaysi maydon uchun ma'lumotlar baytlarida ko'rsatilgan raqam mavjud, chunki qo'llanma tasdiqlanmasdan yuborilishi mumkin.

TCP vikno - ma'lumotlar oqimining intensivligini boshqarish algoritmi, ma'lumotlarning maksimal miqdorini o'zgartirish uchun asoslar, chunki egasi qaytib kelganda bitta segmentni qabul qilishga va tasdiqlashga tayyor.
Rozmir vikna avf etilganlar soni bo'yicha statistik ma'lumotlarga ko'ra, muntazam ravishda itoatkorlikni tayinlaydi.

Domen nomlari

Domen kolízyy- ce chegara hududiEthernet, barcha universitetlar kolizmani mustaqil ravishda tan oladilar, aslida vinilning galusiya kolizmasining bir qismida.

  • Vinil kolízíya ramka tashqari rozpovsyudzhuêtsya emaskolizmlar sohasiga o'xshash
  • Koloniyalardagi domenlar soni qancha ko'p bo'lsa, teri koloniyalarining izlari shunchalik kam esda qoladi.
  • Uyda zanjirlarni sindirish uchunhech kolízyy zastosovuyut kalitlari

Kalitlardagi VTP rejimlari

VTP - VLAN Trunking Protocol, bu kalitlarni boshqarishni osonlashtiradi va Cisco kommutatorlarida VLAN-larni boshqarish imkonini beradi. VTP-dan siz VTP serverlarida VLAN-larni yaratishingiz, o'zgartirishingiz yoki ko'rishingiz mumkin va barcha o'zgarishlar avtomatik ravishda bitta VTP domenidagi barcha kalitlarga o'tkaziladi. Administratorga teri kalitida VLANni sozlash imkonini beradigan narsa.
Uchta VTP rejimi mavjud (VTP rejimi):

1. VTP Server - server rejimi. Ushbu rejimda siz VLAN-larni yaratishingiz, ko'rishingiz va o'zgartirishingiz, shuningdek, butun VTP domeni uchun protokol versiyasi (vtp versiyasi), vtp filtrlash (vtp kesish) kabi turli parametrlarni o'rnatishingiz mumkin. VTP serveri o'zining VLAN konfiguratsiyasi haqida bir xil VTP domenidagi boshqa kalitlarga xabar beradi va VLAN konfiguratsiyasini sinxronlashtiradi. Bundan tashqari, VTP server o'z konfiguratsiyasini mijozning VTP konfiguratsiyasi bilan sinxronlashtirishi mumkin, agar mijozda yuqoriroq konfiguratsiyani qayta ko'rib chiqish raqami bo'lsa. VTP ma'lumotlarini almashish TRUNK porti orqali yuboriladi.

2. VTP Client - mijoz rejimi. VTP Client rejimiga ega kalitda siz VLAN-larni yarata olmaysiz, ko'ra olmaysiz yoki o'zgartira olmaysiz. Kommutatordagi barcha VLAN sozlamalari VTP serveridan olingan.

3. VTP Transparent - shaffof rejim. Ushbu rejimda kalit VTP serveridan VLAN konfiguratsiyasini bloklamaydi va uning konfiguratsiyasi haqida boshqa kalitlarga aytmaydi, lekin VTP ma'lumotlarini o'zining magistral porti orqali boshqa kalitlarga o'tkazish imkonini beradi.

Iqtibos

Ko'rib chiqish doirasida teri segmentini o'tkazishning to'g'riligi buyurtmani olish bilan tasdiqlanishi mumkin. Iqtibos- bu bitta qo'ng'iroqni himoya qilishning an'anaviy usullaridan biridir. Ishdan bo'shatish g'oyasi hujumda.

Yaratilgan ma'lumotlarni qayta uzatishni tashkil qilish imkoniyatiga ega bo'lish uchun tuzatiladigan birliklar soni (soddalik uchun ular ramkalar deb ataldi). Teri ramkasi uchun xizmat xodimi ijobiy kvitansiya deb ataladigan kvitansiyani tekshirishi kerak - xizmat ko'rsatish xabarnomasi, pul olishning oxirgi ramkasi va yangi ma'lumotlarning to'g'ri ekanligi tasdiqlangan. Atrofni birinchi tozalash soati - teri ramkasi yuborilganda, uzatish taymerni ishga tushiradi va kvitansiya tugatish uchun ijobiy bo'lishi bilanoq, ramka hisobga olinadi. Ba'zi protokollarda, qabul qiluvchi, yaratilgan ma'lumotlarga ega bo'lgan freymni uzib qo'ygan taqdirda, salbiy kvitansiyani tuzatishda aybdor - kadrni qayta uzatish kerakligi aniq.


Transport liniyasining funktsiyalari

  • qo'shimchalar orasidagi mantiqiy tartibni ta'minlash;
  • realizuê nadíynu ma'lumotlarni uzatish;
  • uzatish tezligini nazorat qilishni ta'minlash.

Rozetkalar

rozetka(Socket, nest) - ob'ektni aniqlaydigan ma'lumotlar strukturasi.

Ko'proq rozetkalar kerakmi? Server (dastur) bir vaqtning o'zida boshqa kompyuterlar, shu jumladan bir xil kompyuterlar bilan TCP ulanishini qo'llab-quvvatlashi mumkin standart xona port. Qanday amalga oshirish kerak? Siz vazifani dasturchiga qo'yishingiz mumkin. U pul paketlarini olish uchun buferdan sharob tanlasin, kimga badbo'y hid yuborilganiga hayron bo'lsin va darajani tasdiqlang. Ammo siz yaxshiroq ishlashingiz mumkin.

Teridan z'êdnannyam aybdor buti po'yazaniya svíy potík, unda siz ma'lumot yozishingiz mumkin va undan o'qishingiz mumkin. Teri oqimiga masofaviy kompyuterning IP manzili va masofaviy kompyuterning porti beriladi. Bunday teri oqimini qo'llab-quvvatlaydigan ma'lumotlarning tuzilishini rozetka (rozet) deb ataymiz. Shu tarzda, server rozgaluzhuvachem z rozetkalar to'plami bilan ulanishi mumkin, ulargacha mijozlar ulanadi.

Agar shunday bo'lsa, u holda buferdan media darajasidagi qabul qiluvchiga qadar turli xil paketlarni saralash o'rnini bosadi, server oqimlardan o'qilishi mumkin va bunday so'rovlardan olingan teri o'z mijoziga yuboriladi. . Mijozlarning ma'lumotlar turlari bo'linmada chaqirilmaydi, lekin soket oqimlariga bo'linadi. Bunday rozpodil uchun Vidpovidalnist dasturchida emas, balki operatsion tizimning transport darajasining haydovchisida yotadi.

Soketlar Berklidagi Kaliforniya universitetida ishlab chiqilgan va OSI TLI (Transport Layer Interface) ga nisbatan de-fakto standartga aylandi.

Tarixiy dalil. Rozkol UNIX

1978 yildan boshlab u BSD UNIX tarixini Berkli universitetida yaratishni boshladi. BSD muallifi Bill Joy. 1980-yillarning boshida Bell Labs kompaniyasiga egalik qiluvchi AT&T UNIX ning qiymatini tan oldi va UNIX ning tijorat versiyasini yaratdi. UNIXning bo'linishining muhim sababi 1980-yillarning amalga oshirilishi edi. TCP/IP protokoli stegi. UNIX-da ushbu mashinalararo o'zaro ta'sirdan oldin men tug'ilgan joyda sinab ko'rdim - UUCP harflarini bog'lashning eng keng tarqalgan usuli (bir UNIX tizimidan boshqasiga fayllarni nusxalash uchun, bu ko'proq foydalanish uchun ishlatiladi). telefon choralari modemlarga yordam berish uchun).

Ushbu ikkita operatsion tizim tarmoq qo'shimchalari uchun ikkita turli dasturlash interfeyslarini amalga oshirdi: Berkley soketlari (TCP/IP) va TLI (OSI ISO) transport qatlami interfeysi (Transport Layer Interface). Berkli soketlari interfeysi Berkli universitetida kengaytirildi va TCP / IP protokoli stegi parchalandi. AT&T yaratilishlarining TLI darajasi OSI modeli transport darajasiga qadar. Shu bilan birga, TCP / IP va boshqa tarmoq protokollarini amalga oshirish amalga oshirildi, ammo bunday dasturlar uchinchi tomon kompaniyalari tomonidan taqdim etildi. Tse, yak va ínshí mirkuvannya (zdebílshoy, rínkoví), dvom gílkami UNIX - BSD (Berkeley universitetiga) va System V (AT&T dan tijorat versiyasi) o'rtasida vyklikalo qoldiq razmízhuvanní íẑ. Yillar davomida AT&T kompaniyasidan System V litsenziyasini olgan ko'plab kompaniyalar UNIX ning AIX, HP-UX, IRIX, Solaris kabi turli tijorat versiyalarini ishlab chiqdilar.

Soket primitivlari

SOKET yangi (bo'sh) rozetka yarating
BIND server o'zining mahalliy manzilini (port) rozetkadan ko'rsatadi
TINGLASH server mijozlar ulanishi uchun xotirani ko'radi (TCP)
QABUL QILING server mijozning ulanishini tekshiradi yoki kartadan (TCP) birinchi ulanishni qabul qiladi. Kirish ulanishlarini tekshirishni bloklash uchun server ACCEPT primitivini o'chiradi. So'rovni olib tashlaganingizdan so'ng, OS transport moduli rozetkaga ega bo'lgan bir xil quvvatlarga ega yangi rozetka yaratadi va tavsif faylini yangisiga aylantiradi. Keyin server yangi rozetka uchun ulanishni qayta ishlash jarayonini yoki keyinroq, va asl rozetkaga hujumni tekshirish bilan parallel ravishda o'chirishi mumkin.
ULANMOQ so'rov mijozi (TCP)
YUBORISH/YUBORISH ma'lumotlarni yuborish (TCP/UDP)
OLISH / QABUL OLING Ma'lumotlarni qabul qilish (TCP/UDP)
UZING quvvat manbai (TCP)

Multiplekslash va demultiplekslash

Multiplekslash- Ishlatilgan qo'shimchalarning rozetka turini qo'shishni tanlash va sarlavhalarni qo'shish.

Demultiplekslash- rozetkalarga rozpodyl ma'lumotlar.

UDP uchun kerakli rozetka xostning port raqami, TCP uchun - hostning port raqami, IP manzili va masterning port raqami bilan belgilanadi.

Transport protokollari

Transport darajasida ikkita protokol mavjud: TCP (yuqori) va UDP (yuqori bo'lmagan).

UDP protokoli

UDP (User Datagram Protocol) minimal chegaraga ega bo'lib, dasturlarning vositachi o'zaro aloqasisiz ishlashiga imkon beradi. Pratsyuê TCP uchun boyroq, shuning uchun sanani o'rnatish va etkazib berishni tasdiqlashni tasdiqlash shart emas. Siz segmentlarni sarflashingiz mumkin. O'tkazilayotgan ma'lumotlarning to'g'riligi ustidan nazorat mavjud (nazorat miqdori).

UDP segmentining tuzilishi

Sarlavha faqat 8 baytdan iborat.

Ma'lumotlarni ishonchli uzatish tamoyillari

Biz myTCP protokolini ishlab chiqmoqdamiz, shuning uchun uni murakkablashtiramiz.

  • myTCP 1.0 protokoliga aylaning. Mutlaq ustun kanal orqali uzatish
  • myTCP 1.0 protokoliga aylaning (o'ngda) (mutlaqo to'g'ri kanal orqali uzatish).JPG

    Vidpravnik

    myTCP 1.0 protokoliga (master) aylaning (mutlaq o'ng kanalda uzatish).JPG

    Oberjuvach

  • myTCP 2.0 protokoliga aylaning. Janglarni yaratishga imkon beruvchi kanal orqali uzatish. Paketlarni imkonsiz narsaga sarflang
  • myTCP 2.0 protokoliga aylaning (o'ngda) (janglar yaratish imkonini beruvchi kanal orqali uzatish. Imkoniyatsiz paketlarni sarflang).JPG

    Vidpravnik

    myTCP 2.0 protokoliga (master) aylaning (janglar yaratish imkonini beruvchi kanal orqali uzatish. Imkoniyatsiz paketlarni sarflang).JPG

    Oberjuvach

Ammo kvitansiyalar ham buzilishi mumkin. Kvitansiya yaratilishi bilanoq ishchi paketni yangilaydi. Egasi takroriy paketlarni qanday qayta ishlashni o'ylashda aybdor (yangi lagerni joriy qilish kerak - ular minus paketni qo'shimchaga topshirdilar).

TCP/IP da "takroriy" va "yangi" identifikatorlarning rolini paket raqamlari bajaradi (chunki paketlar yo'q qilinishi mumkin).

  • myTCP 2.1 protokoliga aylaning. Janglarni yaratishga imkon beruvchi kanal orqali uzatish. Paketlarni imkonsiz narsaga sarflang
  • myTCP 2.1 protokoliga aylaning (o'ngda) (janglar yaratish imkonini beruvchi kanal orqali uzatish. Imkoniyatsiz paketlarni sarflang).JPG

    Vidpravnik

    myTCP 2.1 protokoliga (master) aylaning (janglar yaratish imkonini beruvchi kanal orqali uzatish. Imkoniyatsiz paketlarni sarflang).JPG

    Oberjuvach

Mamlakatlar o'rtasidagi asosiy farq takroriy paketlarni qayta ishlashda itoatkorlikdir. "Qo'shimchaga o'tkazilgan minulium paketi" stantsiyasida bizga takroriy paketlar beriladi va "Qo'shimcha tomonidan o'tkazilmaydigan minulium paketi" stantsiyasida biz qo'shimchani qabul qilamiz va o'tkazamiz.

Endi qanday paketlarni buzish mumkinligini taxmin qilish vaqti keldi.

  • Paketning sarflanganligini ta'kidlash kerak, masalan, paket yuborilgandan keyin soatni tekshiring.
  • Paketlarni raqamlash kerak.
  • Kvitansiyalarda u yuborilgan paketning raqamini ko'rsatish kerak.

Ushbu darajada biz taymer iste'moliga kelamiz. Kun tugashi bilan, go'yo qo'shiqning oxirgi soati va tasdig'i kelmagandek, keyin xabarnomani takrorlash kerak. Bir soatlik interval katta emas. Sarflash imkoniyati 1 ga yaqin olinadi (yaxshi WiFi ulanishi uchun undan foydalanish shart emas).

Tasdiqlash nuqtalari bo'lgan qisqa protokollar

Keling, bir misolni ko'rib chiqaylik. Keling, ê 1Gb-kanal Rostov - Moskva. 1000 bayt (yoki 8000 bayt) yuborish soatini kutamiz:

8000 bit/1 Gb/s = 8 mks

Rozpovsudzhennya signali soati:

1000 km/300 000 km/s = 3333 mks

Birgalikda: keyingi 1000 bayt 6674 mksda ko'proq va kamroq yuboriladi.

Visnovok: 99,9% vaqt kanal g'alaba qozonmaydi.

Gilos usuli - paket hajmini oshiring. Ale, agar siz 1 bit qoqilmoqchi bo'lsangiz, unda butun paketni tashlang. Yana nima?

Craft protokollari

Muammoni hal qilish: administratorga bitta freymni emas, balki birinchi pastroq zupinity spratini engib o'tishga ruxsat bering va tasdiqlash (qabul qilish) rejimiga o'ting. Ushbu texnika deyiladi yig'ish liniyasi.

Kichkina yashil rangda, bu kvitansiyalar, agar ular allaqachon olib qo'yilgan bo'lsa, agar ular olib tashlangan bo'lsa, agar ular olib tashlanmagan bo'lsa, o'chirishlar o'zgartirishdan oldin tayyorlangan, ammo ularni tuzatib bo'lmasa, doklar olib tashlangan deb belgilanadi. Jovtdagi tushumlar. Víkno: zhovti va blakitny - tse paketlari, yaki kvitansiyalarni kliringsiz o'tkazilishi mumkin. Birinchi oq paket faqat birinchi sariqni tasdiqlaganidan keyin chiqarilishi mumkin. Todikno 1 o'ng qo'lda yiqilib tushadi.

Siz eslatma so'rashingiz mumkin: endi biz oynaning ochilishini tashkil qilishimiz kerak, keling, barcha paketlarni jo'natamiz va keyin tasdiqlashni tekshiring. Ammo bu qadar qo'rqoq bo'lishning iloji yo'q: merezhídagi tashabbusdan foydalanish oson.

Xodimlarni topshirish soati uchun kechirimlarni oqlash muammosini hal qilishning ikki yo'li mavjud:

  • GBN (Orqaga qaytish N - N paketni orqaga qaytarish);
  • SR (Selective Repeat - vibratsiyali takrorlash).
GBN

Oberzhuvach ko'proq ijobiy tushumlarni amalga oshiradi va bunday paketlarni olib qo'yish haqida kamroq, ular uchun aql kaltaklanadi: raqamlari past bo'lgan barcha paketlar allaqachon olib qo'yilgan. Bu unvonda, bu erda vikoristovuêtsya guruhni tenglashtirish: menejer tomonidan i raqami bilan kvitansiya qabul qilinganligi, igacha bo'lgan barcha paketlar muvaffaqiyatli yetkazib berilganligini anglatadi. Agar ma'lum bir soat ichida kotib kvitansiyalarni olmasa, men kvitansiyaning qolgan qismi uchun keyingisidan boshlab barcha N paketlarni berishni takrorlayman.

Pul sarflanganligi sababli uzoq va uzoq muddat uzaytirilgan paketlar bo'lsa, GBN usuli samarasizdir. Butt: 1000 ta paket tuzatildi, ikkinchisi kelmadi, boshqasidan boshlab hammaning kuchini takrorlash kerak edi. Biz zasmíchuemo mezhu marny trafik.

SR

Tsey teri paketi uchun kvitansiya kuchini o'tkazish pidhíd. Menejer o'z buferidan noto'g'ri olinganidan keyin olingan barcha to'g'ri kadrlarni oladi. Qachon tsimu noto'g'ri ramka vídkidaêtsya. Xuddi shu ramka uchun kvitansiya birlashtirilgandan so'ng, menejer barcha kelgusidagi tuzatishlarni takrorlamasdan bir xil ramkani qayta joylashtiradi. Yana bir sinov sifatida, u muvaffaqiyatli bo'ladi, egalikda to'plangan paketlar simli chiziqqa o'tkazilishi mumkin, shundan so'ng eng ko'p raqamga ega bo'lgan freymni olib tashlashni tasdiqlash yuboriladi.

Ko'pincha tebranish usuli afv qilingan taqdirda (masalan, noto'g'ri nazorat summasi bilan) "salbiy tasdiqlash" (NAK - Negativ tasdiq) ni tuzatish bilan birlashtiriladi. Kim uchun robotning samaradorligi oldinga siljiydi.

Katta tanaffus bo'lsa, SR muhim bufer hajmini talab qilishi mumkin.

TCP protokoli

TCP segment formati

TCP segmenti ma'lumotlar maydonlari va sarlavha maydonlari sonidan iborat. hurmat maydoni jarayonlar o'rtasida uzatiladigan ma'lumotlarning bir qismi uchun qasos olish. Ma'lumotlar maydonining kengayishi o'lcham bilan ajratiladi XONIM(Maksimal segment hajmi). Agar protokol katta faylni uzatishni talab qilsa, u holda ma'lumotlarni MSS o'lchami bo'yicha bo'laklarga bo'lish ovozi eshitiladi (qolgan fragmentning qichqirig'i). kichikroq o'lcham). Boshqa tomondan, interaktiv dasturlar ko'pincha ma'lumotlar bilan almashtiriladi, odatda MSSga qaraganda ancha kam. Masalan, Telnet kabi masofaviy kirish dasturlari transport liniyasiga 1 bayt ma'lumot yuborishi mumkin. TCP-segment sarlavhasining uzunligi 20 bayt (12 bayt ko'proq, UDP uchun pastroq), bu tarzda segmentning oxirgi hajmi 21 baytni tashkil qiladi.

UDP protokolida bo'lgani kabi, sarlavha ma'lumotlarni multiplekslash va demultiplekslash protseduralari uchun tan olingan master va drayver portlarining raqamlarini, shuningdek nazorat summasini o'z ichiga oladi. Bundan tashqari, TCP-segment ombori deak_ maydonlariga kirishidan oldin.

  • Seriya raqami va tasdiqlash raqamining 32-bitli maydonlari. Ma'lumotlarni uzatish uchun kerak.
  • 4 bitli sarlavha uzunligi maydoni TCP sarlavhasining uzunligini 32 bitli so'zlarda o'rnatadi. Minimal hajm 5 so'zga o'rnatiladi, maksimal esa 15, shuning uchun 20 va 60 baytni o'rnatish oqilona. TCP sarlavhasini quyida tavsiflangan parametr maydoni uzunligiga o'zgartirish mumkin (parametr maydonini bo'sh qilib qo'ying; bu sarlavha uzunligi 20 baytga o'rnatilganligini anglatadi).
  • Ensign maydoni 6 bitdan iborat. Tasdiqlash biti (ABC) chekda bo'lishi kerak bo'lgan muhim bo'lganlarning to'g'ri ekanligini ko'rsatadi. RST, SYN va FIN bitlari qo'ng'iroqni yakunlash uchun chaqiriladi. Foydalanuvchiga koristuvacha qo'shimchasi bo'lgan asosiy buferda to'plangan ma'lumotlarni qayta ishlashni buyuradigan PSH bitlarini kiritish. URG biti segmentda yuqori darajadagi atama sifatida joylashtirilgan ma'lumotlar mavjudligini ko'rsatadi. Termin ma'lumotlarining qolgan baytini dekompressiyalash atama ma'lumotlar ko'rsatkichining 16 bitli maydonida ko'rsatilgan. Qabul qilgan tomondan, TCP protokoli segmentda muddatli ma'lumotlar mavjudligining yuqori chegarasi haqida xabar berish va uni ma'lumotlarning oxiri ko'rsatkichiga o'tkazish uchun javobgardir. Amalda PSH, URG bayroqlari va atamalar ko'rsatkichi maydoni tipiklashtirilmagan. Biz to'liq inventarizatsiyadan ko'proq narsani taxmin qildik.
  • Birinchi marta 16-bitli ma'lumotlar oqimini boshqarish. Qabul qilgan tomonni qabul qilish yaxshi fikr bo'lganidek, bir qancha baytlardan o'ch oladi.
  • Muhimlik qiymati - berilgan segmentdagi seriya raqamining ijobiy qiymatining 16 bitli qiymati. Bu maydon shoshilinch ma'lumotlarni tugatadigan oktetning seriya raqamini belgilaydi. O'rnatilgan URG praporshining paketlariga nisbatan kamroq hurmat ko'rsatish uchun maydon olinadi.
  • neobov'yazykove dala parametrív vikoristovuêtsya vypadki da, uzatuvchi va qabul tomoni bo'lsa, segment maksimal hajmi haqida "domovlyayutsya", lekin vysokoshvidkísnyh merezha da oyna masshtablash uchun. Shuningdek, ushbu sohada vaqt belgilarining parametri ko'rsatiladi. Qo'shimcha ma'lumotni RFC 854 va RFC 1323 da topishingiz mumkin.
Tartib raqami va tasdiqlash raqami

Segment tartib raqami- segmentning birinchi baytining raqami.

Tasdiqlash raqami- yaqinlashib kelayotgan oktifikatsiyalangan baytning Tse tartib raqami.

TCP segmentining sarlavhasida eng muhim ekanligini tasdiqlovchi tartib raqami maydonlari, tebranishlar ma'lumotlarni uzatish xizmatining ishlashida asosiy rol o'ynaydi. Biroq, bundan oldin, bu sohalarda o'ch olish uchun TCP protokoli kabi qadriyatlarga olib keladigan ortiqcha uzatish mexanizmidagi rolini qanday ko'rib chiqish kerak.

TCP protokoli ma'lumotlarni bayt baytlarining tuzilmagan tartiblari sifatida ko'rib chiqadi. Bu xatti-harakatlar TCP ketma-ketlik raqamlarini segmentlarga emas, balki uzatilayotgan teri baytiga belgilashida namoyon bo'ladi. Buning o'rniga segmentning tartib raqami segmentning birinchi baytining tartib raqami sifatida belgilanadi. Keling, hujum qilayotgan dumbani ko'rib chiqaylik. A xostiga ma'lumotlarni TCP-rad etish orqali uzatmoqchi bo'lgan hostni yuboring. Uzatuvchi tomondagi TCP protokoli har bir oqim uchun bayt sonini bilvosita sanab beradi. O'tkazilayotgan faylni kengaytiramiz, uni 500 000 baytga o'rnatamiz, MSS qiymati 1000 bayt va oqimning birinchi bayti 0 tartib raqamiga ega bo'lishi mumkin. TCP ma'lumotlar oqimini 500 segmentga ajratadi. Birinchi segmentga tartib raqami 0, boshqa segmentga tartib raqami 1000, uchinchi segmentga tartib raqami 2000 va hokazo tartib raqamlari TCP terisining tartib nomeri maydonlariga kiritiladi. segment.

Endi tasdiqlash raqamini ko'rib chiqaylik. Keling, TCP protokoli ma'lumotlarning ikki tomonlama uzatilishini ta'minlaydigan narsalar haqida o'ylab ko'raylik, shunda bitta TCP orqali ma'lumotlar A xostlari o'rtasida uzatiladi va bir vaqtning o'zida ikkala tomonga ham uzatilishi mumkin. Xostni tark etish uchun teri segmenti, B xostdan A xostiga uzatiladigan maʼlumotlarning tartib raqamini almashtiring. A xost oʻz segmentiga yuboradigan tasdiqlash raqami xostdan A xost tomonidan tasdiqlangan, tajovuzkor baytning tartib raqamidir. B. Keling, hujum qiluvchi dumbani ko'rib chiqaylik. Faraz qilaylik, A xost 0 dan 535 gacha raqamlar bilan barcha baytlarni olib tashladi, xost tomonidan yuborildi va B xostiga uzatish uchun segmentni tashkil qiladi. Raqam maydoni uchun 536 uning segmentini tasdiqlaydi.

Keling, boshqa vaziyatni ko'rib chiqaylik. A xostiga U xost turini ikki segmentga ajratsin, birinchisida 0 dan 535 gacha raqamlarga ega baytlar, ikkinchisida esa 900 dan 1000 gacha raqamlarga ega baytlar mavjud. 899 xost A tomonidan qabul qilinmadi. Bu holda xost A kunlik baytlarning ko'rinishini tekshiradi va segmentining tasdiqlash raqami maydoniga 536 raqamini qo'yadi.

Qolgan misollar TCP protokoli funksionalligining yanada muhim jihatini ko'rsatadi. Uchinchi segment (900-1000 baytlarni olib tashlash uchun) A hosti tomonidan boshqasidan pastroq (536-899 baytlarni olib tashlash uchun) avvalroq qabul qilingan, shuning uchun ma'lumotlar ketma-ketligi buzilgan. Ayblash kuchi: TCP ishlamay qolganiga qanday javob beradi? Agar segment olib tashlansa, ketma-ketlik raqami yuqoriroq, pastroq ballar, segmentdagi ma'lumotlar buferlanadi, ammo tasdiqlangan tartib raqami o'zgartirilmaydi. Belgilangan tartib raqamiga ko'tarilgan segment qabul qilinganda, ma'lumotlar tartibi segmentlarning tartib raqamlari asosida avtomatik ravishda yangilanadi. Ushbu darajadagi TCP SR protokollariga ko'tariladi, ammo yangisida GBN kabi rasmiy tan olish sifatida nishonlanadi. SRni xohlash - unchalik toza emas. Agar partiya bitta va bir xil x segmenti uchun (3) salbiy kvitansiyani qabul qilsa, u holda buyurtma va x +1, x +2, x +3, ... segmentlari uchun to'lov borligi taxmin qilinadi. yetkazib berildi. Todi nadsilaetsya butun qator x - GBN protokollari kabi.

Segmentning maksimal hajmi bilan bog'liq muammolar

TCP hali ham segment bo'ylab virtualizatsiya qilinishi uchun maksimal segment hajmini aniq belgilashi kerak va birlik uchun maksimal o'lcham (MTU) standart Ethernet MTU (1500 bayt) dan kamroq bo'ladi. GRE, IPIP, shuningdek, PPPoE tunnel MTU kabi tunnel protokollari standartdan kamroq, shuning uchun maksimal o'lchamdagi TCP segmenti maksimal paket hajmidan kattaroq, MTU pastroq bo'lishi mumkin. Eng muhim holatlarda parchalanish parchalari bloklanadi, bunday paketlar tashqariga tashlanadi.

Ushbu muammolarni ko'rsatib, kunning "to'xtatilishi" kabi ko'rinadi. Har qanday "to'xtatib turish" bo'lsa, uni ma'lum bir daqiqada va soatda osib qo'yish mumkin va agar g'olibning etakchisi ruxsat etilgan kengayish uchun kaptarning segmentlariga etib kelgan bo'lsa ham. Muammoni hal qilish uchun drayver ruxsat etilgan o'lchamdagi segmentlarni engib o'tishi uchun ulanishni boshlaydigan barcha paketlarga MSS parametrini qo'shish uchun routerlarda xavfsizlik devori qoidalari o'rnatiladi. MSS operatsion tizim sozlamalari orqali ham boshqarilishi mumkin.

Qo'l yozuvini sinab ko'ring

Qiyinchilikni belgilash uchun 2-host ACCEPT ni ishga tushirish orqali kirish muammosini passiv tarzda baholaydi.

2-host IP-manzil va portni, ulanishni o'rnatmoqchi bo'lgan vin, TCP segmentining maksimal hajmini va hokazolarni ko'rsatib, CONNECT primitivini tanlaydi. ASK=0 va tasdiqlashni tekshiring. Ushbu tartibda uy egasi mezbondagi janglar ketma-ketligining x seriya raqamini 1 dan 2 gacha e'lon qiladi.

Xost 2 "Ulanish qabul qilindi" (funktsiyani qabul qilish) tasdiqini yuboradi. Oddiy rejimga o'tadigan TCP segmentlarining ketma-ketligi rasmda ko'rsatilgan: SYN=1 ASK=1, 2-host 2-xostdagi janglar ketma-ketlik sonining x tartib raqamini 1 dan 1 gacha tekshiradi va sizga ma'lumotlar borligini aytadi. x+ bir bayt raqamidan boshlab tekshirildi.

1-host (Ulanish) ulanishni qabul qilganligini tasdiqlaydi.

TCP bo'yicha katta kurash

Devorga keladigan o'lponlar ko'proq bo'lsa, ko'proq ish qilish kerak bo'ladi, devorda tirbandlik paydo bo'ladi. Hech kimning his-tuyg'ulari uchun Internet aybdor emas. Fringe ríven ham bema'nilikka qarshi kurashda yordam bergan bo'lsa-da, ma'lumotlarni uzatish tezligining pasayishi bilan bog'liq bo'lgan ushbu muammoni hal qilishda asosiy hissa TCP protokoli tomonidan amalga oshiriladi.

Nazariy jihatdan, fizikadan tashqarida bo'lgan qo'shimcha printsip - paketlarning saqlanish qonuni uchun revantatsiya qilish uchun kurashish mumkin. G'oya yangi paketlarni o'lchovga o'tkazmaslikdir, doklar eskilarini tark etmasligi kerak (shuning uchun ular etkazib berilmaydi). TCP protokoli dinamik muhit yordamida dunyoga taqdim etiladi.

Maydonning sarguzashtlariga qarshi kurashda birinchi qadam uni tashqariga chiqarishdir. O'n yil davomida merezhí o'zgarishini ko'rsatish qiyin edi. Paket nima uchun soatiga yetkazib berilmasligini tushunish kerak. Shuningdek, paketni baland daryo chizig'i orqali chiziqqa o'tkazish uchun ajoyib imkoniyat mavjud.

Daniyada paketlar uzatish paytida sarflanadi, ular kamdan-kam hollarda tuzoqqa tushadilar, chunki vositachi liniyalarning aksariyati optik tola bilan bog'langan (garchi dartsiz merezha vydsotok pakív, shkodi orqali scho vtrachayutsya, dosit yuqori). Shubhasiz, Internetda sarflangan paketlarning aksariyati tiqilib qolishga olib keldi. Barcha TCP-algoritmlariga Internetga ruxsat berilgan, bu chiqindi paketlar avangardlarga chaqiriladi va ular xuddi muammo tug'diruvchidek taym-autlarni kuzatib boradi.

Birinchidan, keling, TCP hujumga qanday munosabatda bo'lishini muhokama qilishga o'tamiz va biz protokolni to'xtatishning bir necha usullarini tasvirlab beramiz. Shoshilinch holda, hayotiy rozmir uchun uchrashuv bo'lishi mumkin. Obedzhuvach rozmyr víkna, vyhodyachi íz kílkostí ko'rsatishi mumkin. bo'sh joy buferda. Go'yo uvazí rozmír víkn ustidagi matime haydovchisi, yo'lovchidagi buferning to'lib ketishi muammoning sababi bo'lishi mumkin emas;

TCP bo'yicha katta kurash

Men suv ta'minotidagi muammoni tasvirlab beraman. Kichkintoyda men quvurni puflamoqchiman, bu esa kichik quvvatga ega bo'lgan obsesyonga olib keladi. Suv uyining docklari ko'proq suvga ruxsat bermaydi, pastki qismi shamolga sig'ishi mumkin, suv to'kilmaydi, oraliq omil shamolning sig'imi emas, balki binoning quvvati. Gipog'ondagi jo'mrakdan suv tezroq oqib chiqadi, keyin girdobdagi suv oqimi tez-tez ko'tariladi va agar u tiniq bo'lsa, suvning bir qismi girdob chetidan oshib ketishi mumkin.

Ikki potentsial muammolarni tan olish da poking, Internetda zastosovuêtsya yechim: past o'tkazuvchanlik quvvati va past imkoniyatlar oberzhuvacha - har ikkala muammo uchun yechim turdagi. Bu charm ishchi uchun ikkita g'alaba bor: vikno, obsesif va vikno revantazhennia. Rozmir teri í̈x vidpídi kilkoí̈ byteív, hidoyat sifatida o'tkazish huquqiga ega bo'lishi mumkin. Vdpravnik keruetsya bu ikki qadriyatlar minimal. Misol uchun, egasi: "8 Kbayt yuboring" deganga o'xshaydi, lekin menejer biladiki, agar siz 4 Kbaytdan ko'proq olgan bo'lsangiz, u holda o'lchovda tiqilinch o'rnatilgan bo'lib, siz hali ham 4 Kbayt yuborasiz. Xo'sh, ishchi biladi Ajoyib raqam ma'lumotlar, masalan, 32 Kbayt, uslublarni topshiring, sertifikatlarni so'rang (tobto 8 Kbayt).

Chipta o'rnatganingizda, haydovchi oynaning o'lchamini berilgan zonada yutgan maksimal segmentning o'lchamiga teng qilib o'rnatadi. Keling, bitta maksimal segmentni o'tkazamiz. Ushbu segmentni ushlab turishni tasdiqlash uchun yil oxirigacha skoring davri tugaydi, segmentning kengayishi qo'shiladi, shuning uchun asrning kengayishi o'zgartiriladi va ikkita segment allaqachon majburlanadi. Teri segmentatsiyasini yaxshilashda terining segmentatsiyasini bitta maksimal segment qiymatiga kengaytirish amalga oshiriladi. Aytaylik, kengaytirish n segment uchun yaxshi. Barcha segmentlarning tasdiqlanishi har soatda kelishi bilan, u n segmentga qarab baytlar soniga ko'payadi. Aslida, segmentlarning teri ketma-ketligini tasdiqlash urush tugashidan oldin amalga oshirilishi kerak.

Eksponensial o'sishning bu jarayoni uch marta, nazorat oynasining kengayishi bilan docklarga etib bo'lmaydi yoki chegaraning siljishi haqida signal beruvchi vaqt-aut belgisi bilan tebranmaydi. Masalan, 1024, 2048 va 4096 bayt o'lchamdagi paketlar muvaffaqiyatli bo'lganligi sababli, 8192 bayt o'lchamdagi paketni uzatishni tasdiqlash qo'shish atamasi bilan tasdiqlanmagan, ammo muammo 4096 baytga teng bo'lgan. . Bo'sh joyning kengayishi 4096 baytga teng bo'lib qolar ekan, egalik qilish umidida bo'lgan vakansiyaning kengayishidan qat'i nazar, ko'proq boshqa paketlar kuchsizlanmaydi. Butun algoritm deyiladi cho'zilgan boshlanish, yoki to'g'ri ishga tushirish. Biroq, sharob endi keng tarqalgan emas (Jacobson, 1988). Eksponensial yutish. TCP protokolining barcha ilovalari qo'llab-quvvatlanishi kerak.

Endi Internetda g'alaba qozongan baxtsizliklarga qarshi kurash mexanizmini ko'rib chiqaylik. Krim vikon o'sha revantatsiyada hukmronlik qiladi, chunki uchinchi parametr chegara qiymatiga ega, qoida tariqasida, 64 Kb tiklanadi. Vaqt tugashi holati xato bo'lsa (tasdiqlash satrlarda aylantirilmasa), yangi chegara qiymati oqim sig'imi oynasining yarmiga teng o'rnatiladi va sig'im chegarasi bitta maksimal segment hajmiga o'zgartiriladi. Keyin, xuddi qiyalik oldida, cho'zilgan ishga tushirish algoritmi ishlab chiqiladi, bu sizga bo'lakning o'tkazish qobiliyatini tezda ko'rsatishga imkon beradi. Biroq, venaning tarqalishining eksponentsial o'sishi chegara qiymatiga etganidan keyin ko'tariladi, shundan so'ng u chiziqli ravishda, teriga hujum qilish uchun bir segmentga oshadi. Darhaqiqat, siz kelajakning ikki baravar kengayishini xotirjamlik bilan kamaytirishingiz mumkin, shundan so'ng asta-sekin yoga ko'paytiriladi.

Yuqori uzatish mexanizmlari. Uzagalnennya

Tekshirish summasi Qabul qilingan paketda janglarning yaratilishini ochib berdi
Taymer Vídl_k _interval och_kuvannya deb yogo zakichennya bo'yicha vkaz_vka. Qolganlari paketning o'tkazish qobiliyati yuqori ekanligini yoki uzatish paytida kvitansiya ishlatilganligini anglatadi. Shu bilan birga, agar paket blokirovkadan etkazib berilsa, lekin u ishlatilmasa (to'lov oralig'i tugagunga qadar), aks holda kvitansiya yo'qoladi, qayta o'tkazish paket qabul qilingan tomonda takrorlanmaguncha amalga oshiriladi. .
Tartib sonlar Paketlarni ketma-ket raqamlash, ular uzatish tomoni bilan oshib ketadi. Qabul qilingan paketlar sonida "Probíli", ular pul sarflash haqida mo'ylov qo'shishga imkon beradi. Bir xil ketma-ketlik raqamlari va paketlar paketlar bittadan birini takrorlashini anglatadi
"+" va "-" kvitansiyalari U qabul qiluvchi tomon tomonidan ishlab chiqariladi va paket qabul qilingan yoki paketlar guruhi qabul qilingan yoki qabul qilinmaganlarga uzatuvchi tomonni ko'rsatadi. Buyurtma raqamlari va muvaffaqiyatli qabul qilingan paketlarni tasdiqlash uchun qo'ng'iroq qiling. Protokolga ko'ra, individual va guruh tasdiqlovlari protokolga muvofiq bo'linadi
Vikno/konveyer Paketlarni uzatishda g'alaba qozonish uchun seriya raqamlari oralig'ini o'rab oling. Guruh o'tkazish va qo'l siqish sezilarli o'sishga imkon beradi Men binoning yonidan o'taman por_vnyanny z rejimi ochykuvannya podverdzhennya da protokollar. Rozmír vykna qabul qiluvchi tomonni qabul qilish va buferlash imkoniyati, shuningdek kapitallashuv darajasi asosida qayta sug'urtalanishi mumkin.

Dasturlash xususiyatlari

  1. TCP ulanish oqimi
    • vaziyat a) mumkin iflos yulduz Merejniy daryosining datagram guruhlari kelishi o'rtasida atigi bir soat juda yaxshi:
      • computer1 bir marta g'olib yuborish funktsiyasi;
      • computer2 barcha ma'lumotlarni bitta recv siklida qabul qilmaydi (sikl tsiklini talab qiladi).
    • Vaziyat b) mumkin, chunki funktsiya chaqiruvlari orasidagi soatlar oralig'i malium yuboradi va bu maliumning kengayishi:
      • computer1 vicorist funktsiyasi sprat marta yuborish;
      • computer2 barcha ma'lumotlarni bir marta bosish bilan oladi.
  2. UDP protokoli ortida
    • vaziyat a) - mumkin emas
      • kompyuter1 bir marta yuborish funksiyasi bilan chegara chizig'ida UDP-segment paketlar spratiga bo'linadi;
      • computer2 har safar bitta recv bosish bilan segmentni oladi va faqat bir nechtasi barcha IP datagrammalarida kelgan.
    • vaziyat b) - mumkin emas
      • 1-kompyuterda turli xil tvitlar yuborishga turli UDP datagramlariga va kompyuter2-dagi tvitlardan turli xil recvlarga ruxsat beriladi.
  3. Recv va recvfrom funktsiyalari uchun bufer kichikroq bo'lgani uchun yuborilgan ma'lumotlarning hajmi, keyin UDP rejimi uchun ma'lumotlarning bir qismi behuda ketadi va TCP rejimi uchun ortiqcha tajovuzkor recv chaqiruvi uchun saqlanadi.
  4. UDP serverida 1 ta rozetka bo'lishi mumkin va TCP serverda juda ko'p turli xil rozetkalar bo'lishi mumkin (bir soatlik ulangan mijozlar uchun) va o'z ma'lumotlari teriga uzatiladi.

© 2022 androidas.ru - Android haqida hamma narsa