Պորտի ստուգիչը ասում է՝ բաց է. ինչու Minecraft-ի խաղացողները դեռ չեն կարող միանալ
Հաջող TCP կապը միայն ապացուցում է, որ մեկ սոքեթ ընդունվել է մեկ տեղից։ Մուտքը, աշխարհ ընդունվելը և ներսից դուրս ուղին առանձին թեստեր են։
Ինչ-որ մեկը գործարկում է պորտի ստուգում, տեսնում «բաց» բառը և սերվերը համարում լուծված։ Այդ արդյունքի իրական իմաստը նեղ է. ստուգիչի տեղից, այդ պահին, TCP կապ է ընդունվել տվյալ հասցեին և պորտին։ Այն ոչինչ չի ասում Minecraft արձանագրության ձեռքսեղմման, հաշվի նույնականացման կամ այն մասին, թե արդյոք սերվերը խաղացողին թույլ է տվել մտնել աշխարհ։
Դրանք չորս տարբեր շերտեր են, և դրանցից որևէ մեկում ձախողումը խաղացողից հանում է նույն նախադասությունը. դա չաշխատեց։
Զոնդը ստուգում է միայն այն, ինչ կարող է տեսնել
TCP կապը լրացվում է, երբ երկու կողմերն ավարտում են եռակողմ ձեռքսեղմումը, որը գտնվում է ամեն ինչից ներքև, ինչ խաղը գիտի։ Զոնդը հաղորդում է, որ լսող գոյություն ուներ և պատասխանել է իր ցանցային դիրքից։ Այն չի կարող ասել, որ լսողը հենց խաղն է, որովհետև ցանկացած պրոցես կարող է զբաղեցնել պորտ և ընդունել կապեր։
Տեղը նույնքան կարևոր է, որքան արդյունքը։ Հանրային ինտերնետում գտնվող ստուգիչը փորձարկում է մեկ ուղի մեկ ցանցից։ Ստուգիչը, որը օպերատորը գործարկում է նույն ցանցի ներսից, փորձարկում է բոլորովին այլ ուղի, և այնտեղ դրական արդյունքը գրեթե ոչինչ չի ասում այն մասին, ինչ ապրում է հեռավոր խաղացողը։ Երկու տարբեր ստուգիչներ երկու տարբեր մատակարարների մոտ կարող են նույնիսկ չհամաձայնել պատճառներով, որոնք ոչ մի կապ չունեն ձեր սերվերի հետ։
Ժամանակը նույնպես կարևոր է։ Զոնդի արդյունքը նկարագրում է այն պահը, երբ այն աշխատել է, և դինամիկ հասցեով կամ փոփոխված փոխանցման կանոնով տնային կապը կարող է իրական պատասխանը տեղափոխել մի քանի րոպե ուշ։ Գրանցեք հանրային հասցեն, պորտը, հասցեների ընտանիքը և ժամանակը վճռի հետ միասին, այլապես դիտարկումը վերարտադրելի չէ։ Կրկնեք ստուգումը իսկապես այլ ցանցից, ոչ թե նույն կապի հեռախոսից։
Չորս շերտ սոքեթի և խաղացողի միջև
Պատկերացրեք այն հաջորդականությունը, որը միացող կլիենտն իրականում կատարում է։ Սկզբում այն լուծում է հասցեն, հետո TCP կապ է բացում հրապարակված պորտին, հետո խոսում է խաղի սեփական արձանագրությամբ՝ բանակցելու և նույնականացնելու համար, և վերջում սերվերը որոշում է՝ արդյոք այդ ինքնությանը թույլատրվում է մտնել աշխարհ։ Յուրաքանչյուր շերտ ունի իր ձախողման ստորագրությունը, և միայն առաջինն է տեսանելի պորտի ստուգիչին։
Java Edition-ի լռելյայն պորտը 25565 է, բայց օպերատորը կարող է հրապարակել այլ արտաքին պորտ և փոխանցել այն ներս, այնպես որ խաղացողի մուտքագրած թիվը պարտադիր չէ, որ լինի այն թիվը, որը տեսնում է սերվերը։ Սխալ արտաքին պորտին ուղղված ստուգիչը հաղորդում է փակ, մինչ սերվերը լիովին առողջ է, և սա է ամենատարածված կեղծ ահազանգը այս ամբողջ ոլորտում։
Անունները պորտից վեր ավելացնում են ևս մեկ քայլ։ Եթե խաղացողը մուտքագրում է հոսթի անուն, լուծումը պետք է վերադարձնի հրապարակված հասցեն, իսկ ցանցի ներսում գտնվող մեքենայի վրա այն կարող է փոխարենը վերադարձնել մասնավոր հասցե։ Սա firewall-ի ձախողում չէ, և պորտերի փոխանցման ոչ մի քանակություն դա չի փոխի։
Ինչու ներսի խաղացողն անցնում է այլ ուղի
Նույն LAN-ում կամ այդ LAN-ին հասնող VPN-ում գտնվող խաղացողը փորձում է ներսից հասնել հանրային հասցեին։ Հարցումը գնում է երթուղիչի արտաքին հասցեին, և երթուղիչը պետք է այն հետ թարգմանի դեպի ներս, ինչը սովորաբար կոչվում է hairpinning կամ NAT արտացոլում։ Որպեսզի դա աշխատի, և՛ առաջընթաց թարգմանությունը, և՛ վերադարձի ուղին պետք է համընկնեն, և շատ սպառողական երթուղիչներ դա ընդհանրապես չեն իրականացնում։
Այդ պատճառով դրսի հյուրը միանում է, իսկ սերվերի կողքին նստածը չի կարող։ Արտաքին ուղին իրոք կարգին է. ձախողվում է ներքին շրջանցումը, և այն ձախողվում է այնպես, որ խաղացողի էկրանից թվում է սերվերի խնդիր։ Սերվերի սեփական մատյանն է որոշում, թե որն է պատահել, որովհետև երբեք չթարգմանված կապը երբեք չի հասնում դրան։
Կան երկու ազնիվ ուղղում և մեկ վատ սովորություն։ Լավ տարբերակներն են՝ թույլ տալ ներքին խաղացողներին օգտագործել մասնավոր հասցեն կամ split-DNS անուն, որը ներսում լուծվում է մասնավոր հասցեի, կամ միացնել արտացոլումը երթուղիչում, եթե գործառույթը կա և ճիշտ է աշխատում։ Վատ սովորությունն ավելի շատ պորտեր բացելն է կամ հոսթի firewall-ն անջատելը, ինչը չի կարող ազդել այն թարգմանության վրա, որը երթուղիչը երբեք չի կատարել։
Netgate-ի NAT արտացոլման փաստաթղթերը ավելի մանրամասն նկարագրում են արտաքինի և ներքինի տարբերությունը և split-DNS այլընտրանքը։ Կարդացեք այն որպես մեխանիզմի նկարագրություն, ոչ որպես խոստում, որ որևէ կոնկրետ VPN մատակարար կամ երթուղիչ աջակցում է loopback-ի բոլոր տարբերակներին։
Ապացույցներ հավաքեք յուրաքանչյուր տեսանկյունից
Յուրաքանչյուր թեստի համար գրեք, թե ով է գործարկել այն, որտեղից, ինչ ժամի, որ հասցեի և պորտի դեմ, և ինչ է գրանցել սերվերը։ Խաղի մերժումը սերվերի կոնսոլում հստակ պատճառով այլ եզրակացություն է, քան երբեք չհասած կապը, և երկուսը տանում են հակառակ ուղղություններով։
Եթե թույլատրված հեռավոր խաղացողները միանում են, իսկ մեկ տեղական խաղացող չի կարող, ապա մնացած հարցը տեղական ուղին է, և այն արժանի է առանձին հետաքննության. ո՞ր հասցեն է օգտագործել կլիենտը, ի՞նչ է արել երթուղիչը թարգմանության հետ, և արդյոք սերվերը գրանցել է գոնե որևէ կապի փորձ։ Փոխանցեք այդ երեք փաստերը ցանցի տիրոջը՝ պատահականորեն պորտեր նորից բացելու փոխարեն։