Нэг нэрээр хоёр дахь холболт эхэлсний дараа салгах бичлэг ирдэг бөгөөд тухайн хэрэглэгчийн хамгийн сүүлийн мөрийг шинэчилдэг боловсруулагч буруу сессийг хаадаг. Алдаа нь цагийн тэмдгийг харьцуулахад биш. Алдаа нь нэр дээр бүтэн секунд нэмэхэд нэг сессийг тодорхойлно гэсэн таамаглалд байна. Дэгээ үйл явдлууд холболтыг дүрсэлдэг бөгөөд холболтод зөвхөн өөрт нь хамаарах түлхүүр хэрэгтэй.

Салгах хувьсагчид үнэхээр юу гэсэн үг болохыг эхлээрэй. Зөвхөн тэгэхэд л таних тэмдгийн сонголт утга учиртай болно.

Салгах дэгээ үнэхээр юу дамжуулдаг вэ

Community OpenVPN 2.6-д дэгээний лавлагаа time_unix нь клиент холбогдсон мөч гэж тодорхойлдог; холболтын дэгээ ажиллахаас өмнө тогтоогддог ба салгах дэгээ дараа ажиллахад дахин тодорхойлогддоггүй. time_duration тухайн сессийн уртыг секундээр өгдөг, тиймээс төгсгөл нь ойролцоогоор холболтын цаг дээр үргэлжлэх хугацаа нэмсэнтэй тэнцэнэ. Хоёулаа бүтэн секунд бөгөөд аль нь ч таны мэдээллийн сан үйл явдлыг боловсруулсан мөч биш. Эдгээр гурван цагийг тусгаар байлгах нь хамаарлыг зөвхөн туршилтын үеэр зөв харагдуулах биш, бодитоор тогтох боломж олгодог.

Энэ арифметикийг бичих нь зүйтэй, учир нь энэ нь дэгээ өөрөө санал болгодог цорын ганц дуусах цаг юм. Боловсруулалтын саатал болон хост хоорондын цагийн зөрүү одоо ч түүнээс гадуур байна.

Яагаад тодорхой хос өвөрмөц бус вэ

Нэрийг холболтын цагтай хослуулах нь хайлтыг нарийсгадаг ч сессийг тодорхойлохгүй хэвээр. Клиент ижил секунд дотор дахин холбогдож болох тул хоёр сесс хоёр утгыг хуваалцаж болно. Хоёр дэмон экземпляр, эсвэл ижил тохиргоог хадгалсан серверийн солилт нь тэр хосыг өөр процессуудаас үүсгэж болно. Туннелийн хаягууд мөн адил шалтгаанаар дахин ашиглагддаг нь тэднийг сессийн шинж чанар болгож, сессийн таних тэмдэг болгодаггүй.

Гэмтлийн горим чимээгүй. Эхний сессийн оройтсон салалт хамгийн сүүлийн мөртэй таарч, хоёр дахь сесс ашиглаж буй хуваарилалтыг дуусгадаг тул хэрэглэгч өөрөө үүсгээгүй санамсаргүй хандалтын алдагдалд ордог. Дараа нь зөв харагдах мөрийн тоо асуудлыг илрүүлэхэд хүндрэлтэй болгодог.

Тогтвортой таних тэмдэг хаанаас ирдэг вэ

Удирдлагын интерфейс клиент бүрт клиент экземплярын таних тэмдэг олгодог бөгөөд тэр таних тэмдэг нь түүнийг гаргасан дэмоны экземплярт хязгаарлагддаг. Ажиллах боломжтой гадаад түлхүүр нь тогтвортой серверийн таних тэмдэг, дэмон эхлэхэд өөрчлөгддөг эрини, тэр клиентийн ID-г нэгтгэдэг. Эрин чухал, учир нь таних тэмдгүүд процессын хамт дахин эхэлдэг бөгөөд нүцгэн процессын ID-г дараа нь хамааралгүй зүйл дахин ашиглаж болно.

Хүүхэд холболтын скриптийн дотор тогтоосон орчны хувьсагчид эх дэмоны дараагийн салгах скрипт рүү дамждаггүй, учир нь тэдгээр скриптүүд өөрийн орчинтой тусдаа процессууд хэлбэрээр ажилладаг. Тиймээс холболтын үед UUID үүсгэх нь хагас шийдэл юм. Салгах тал ижил UUID-г нэрлэж чадах ёстой бөгөөд энэ нь таних тэмдэг хоёр үйл явдал хүрч чадах газар амьдрах ёстой гэсэн үг.

Гарахыг нөхцөлт ба идемпотент болго

Сессийн эзнээр гарга, хэрэглэгчээр биш. Нэрэнд одоо хамаарах аливаа хуваарилалтыг устгадаг боловсруулагч эцэст нь бурууг устгана, цорын ганц хамгаалалт бол устгагдаж буй бичлэг энэ үйл явдлыг дүрсэлсэн бичлэг мөн эсэхийг шалгах юм.

Удирдлагын интерфейс нэг удаад нэг холбогдсон удирдлагын клиентийг хүлээн авдаг тул ижил сокетын төлөө өрсөлдөх хоёр дахь ажиглагчийг хавсаргахын оронд үүнийг аль хэдийн эзэмшиж буй талтай нэгдээрэй.

Давтагдах үйл явдлыг үр дүнг хоёр удаа өөрчлөхгүйгээр шийдвэрлэж, хослогдоогүй үйл явдлыг хаяхын оронд эвлэрүүлэхэд хадгал. Салгах буцаан дуудлага нь баримтжуулсан амьдралын мөчлөгийн нөхцөлтэй бөгөөд сүйрэл эсвэл хатуу зогсолтын дараа хэзээ ч ирэхгүй байж болох тул загварт дуусгах үйл явдал нь дутуу сессийг дүрслэх арга хэрэгтэй.

Эвгүй тохиолдлуудыг санаатай туршиж үзээрэй: нэг секунд дотор хоёр дахин холболт, хоёр дэмон экземпляр, боловсруулалт нь бүтэлгүйтсэн холболт, сессийн дунд дэмон дахин эхлэх. Дөрвийг нь бүгдийг даван тулсан түлхүүр л итгэхэд үнэ цэнэтэй.

Холбоотой нийтлэлүүд