Anyị nwetara ọkwa LIR na nso nso a na / 29 IPV6 ngọngọ. Na mgbe ahụ mkpa bilitere iji na-esochi nke subnets ekenyere. Ma ebe ọ bụ na e dere ụgwọ ịgba ụgwọ anyị na PHP, anyị kwesịrị ileba anya n'okwu ahụ ntakịrị ma ghọta na asụsụ a abụghị enyi kachasị mma n'ihe gbasara ịrụ ọrụ na IPv6. N'okpuru ịkpụ bụ ngwọta anyị maka nsogbu ndị na-ebilite mgbe ị na-arụ ọrụ na adreesị na oke. Ikekwe ọ bụghị ndị kasị mara, ma ọ na-arụ ọrụ.

A bit nke tiori
Nkwuputa. Ọ bụrụ na ị maara ihe IPv6 bụ na ihe ọ na-abịa, akụkụ a nwere ike na-agwụ gị ike. O nwere ike ọ gaghị adị.
Ndị na-ahụ nkọwa IPv6 na nke mbụ nwere ike ịhụ na ọ na-akụda mmụọ. Mgbe mara mma 64.233.177.101 anyị na-eche ihu na mberede 2607:f8b0:4002:c08::8b na anyị nwere ike inwe mgbagwoju anya. Ha abụọ bụ naanị ihe nnọchianya mmadụ nwere ike ịgụ nke 32 na 128, n'otu n'otu. Ihe ngwugwu IP ọ bụla nwere nkụnye eji isi mee nke nwere ebumnuche ahaziri nke ọma maka ntakịrị ọ bụla. Na-abanyeghị n'ime usoro nke nkụnye eji isi mee, otu ihe anyị kwesịrị iwepụ na nke a bụ na maka ịrụ ọrụ na adreesị IP na oke, ọ na-adịkarị mma iji ọnụọgụ ọnụọgụ abụọ na arụmọrụ bitwise. Ọ dịkwa mma iji chekwaa ha na nchekwa data dị ka ọnụọgụ abụọ (4) maka IPv4 na ọnụọgụ abụọ (16) maka IPv6.
Akụkụ ọzọ dị mkpa kwesịrị imetụ aka bụ ihe mkpuchi netwọkụ na akara CIDR. CIDR bụ okwu mkpọ okwu maka klaasị Inter-Domain Routing (). Echiche a edochila echiche klaasị n'ịchọpụta akụkụ nke adreesị IP bụ prefix netwọkụ, yana akụkụ nke bụ adreesị netwọkụ n'ime netwọkụ a. Na omume, a ga-edobe n-bit nke mbụ dabara na prefix ka ọ bụrụ 1, nke fọdụrụ na 0.
N'ụdị mmadụ nwere nghọta, edere nke a n'ụdị ip.add.re.ss/cidr. Dịka ọmụmaatụ 64.233.177.0/24 na-egosi na ibe 24 nke mbụ na-ezo aka na nganiihu. 8 ibe n'ibe ikpeazụ, nke a makwaara dị ka ọnụọgụ ikpeazụ na nrịbama mmadụ enwere ike ịgụ, rụtụ aka na adreesị dị n'ime subnet. Mmega ahụ di na nwunye ọzọ. 64.233.177.101/32 и 2607:f8b0:4002:c08::8b/128 - otu adreesị kpọmkwem. 2607:f8b0:4002:c08::/64 - nke mbụ 64 bits (nke mbụ 4 otu) bụ prefix, nke fọdụrụ 64 bits bụ mpaghara mpaghara. Site n'ụzọ, ọ bụrụ na onye ọ bụla na-enwe mgbagwoju anya site na "::" na ntinye, okpukpu abụọ na-anọchi anya ọnụ ọgụgụ nke ngalaba nke nwere 0. Ọ nwere ike ịpụta naanị otu ugboro na nkọwa. Yabụ, 2607:f8b0:4002:c08::8b = 2607:f8b0:4002:c08:0:0:0:8b.
Gịnị ka anyị kwesịrị ịmụta n’ihe a niile? Mbụ, enwere ike nweta adreesị subnet nke mbụ na nke ikpeazụ site na iji ọnụọgụ abụọ AND na OR, na-ama ihe nkpuchi na ụdị ọnụọgụ abụọ. Nke abụọ, nha subnet na-esote (ya bụ ya na CIDR) n enwere ike gbakọọ site na ịgbakwunye 1 na n- ọnọdụ ahụ na ọnụọgụ ọnụọgụ abụọ. Site na ọnụọgụ abụọ m pụtara nsonaazụ nke iji ọrụ ngwugwu() и inet_pton () na n'ihu ojiji , site na ọnụọgụ abụọ bụ ihe nnọchianya nke usoro ọnụọgụ abụọ nke enwere ike nweta, sịnụ, base_convert().
Akụkọ ihe mere emeEbu ụzọ na-agwa okwu na-enweghị klaasị site na nkewa klaasị. N'ime afọ ndị ahụ dị anya, ọ dịghị onye chere na a ga-enwe ọtụtụ subnets; a na-ekesa ha n'aka ekpe na aka nri na nnukwu blocks: klas A - prefix bụ nke mbụ 8 ibe n'ibe (ya bụ nọmba mbụ), na-eduga bit nke 0; Klas B - mbụ 16 (nọmba abụọ mbụ), na-eduga ibe n'ibe 10; Klas C - nke mbụ 24 ibe n'ibe, na-eduga ibe n'ibe 110. Ndị a na-eduga ibe n'ibe kpọmkwem n'ókè nke e nyere adreesị nke otu klaasị: 0.0.0.0 - 127.255.255.255 maka klas A, 128.0.0.0 - 191.255.255.255 - klas B, 192.0.0.0 - 223.255.255.255 - klas C. Ka ịntanetị na-agbasa n'ụwa nile, ndị na-achịkwa ghọtara na ha agbagharala akara ahụ, na n'oge 90s mbụ ha mepụtara echiche na-enweghị isi nke mere ka ọ ghara ịdị na-ekekọta. na-eduga ibe n'ibe. Enwere ike ịhụ ntakịrị nkọwa na, sị, .
Ka anyị gaa n'ihu n'omume
Na omume, anyị ga-arụ ọrụ atọ kachasị, dịka ọ dị m, ọrụ:
- inweta adreesị mbụ na nke ikpeazụ nke oke;
- nweta oke nha nha (CIDR);
- na-enyocha ma adreesị ọ bụ nke nso.
Mmejuputa a ga-abụ maka IPv6, mana ọ bụrụ na ọ dị mkpa, enwere ike ịmegharị mgbagha ahụ ngwa ngwa. Enwere m ụfọdụ echiche , ma mejuputa ya ntakịrị iche. Ọzọkwa, ihe atụ anaghị elele maka mperi ntinye. Yabụ, ka anyị gawa.
Dịka m kwurula, enwere ike ikpebi adreesị nke mbụ na nke ikpeazụ site na iji ọrụ bitwise, na-ama mmalite nke oke na nkpuchi subnet ọnụọgụ abụọ. N'ihi ya, ihe mbụ anyị kwesịrị ime bụ ịtụgharị CIDR ka ọ bụrụ ihe mkpuchi ọnụọgụ abụọ. Iji mee nke a, anyị ga-anakọta ihe nnọchianya hex ya ma tinye ya n'ime ọnụọgụ abụọ.
function cidrToMask ($cidr) {
$mask = str_repeat('f', ceil($cidr / 4));
$mask .= dechex(4 * ($cidr % 4));
$mask = str_pad($mask, 32, '0');
return pack('H*', $mask);
}Kpọọ mkpọ ('H*', $ nkpuchi) na-akwakọba ihe nnọchianya hex n'otu ụzọ ahụ inet_pton (). Naanị ihe dị iche bụ na mgbe ị na-akpọ ngwugwu() All 0s ga-adị n'ebe ha, na e kwesịghị inwe colons na ntinye, n'adịghị ka mmadụ-agụ ntinye.
Nzọụkwụ ọzọ bụ ịgbakọ mmalite na njedebe nke oke. Na ebe a nuances bilie. Arụ ọrụ Bitwise na-ejedebe site na ike bit nke processor. N'ihi ya, na 32-bit CubieTruck m, nke m na-eji mgbe ụfọdụ maka ụdị nyocha ọ bụla, ọ gaghị ekwe omume ịhazi ihe niile 128 nke adreesị n'otu ọrụ. Otú ọ dị, ọ dịghị ihe na-egbochi anyị ikewa ya n'ime otu 32 ibe n'ibe (dị nnọọ ikpe, onye maara ihe processors anyị ga-agba ọsọ).
function getRangeBoundary ($ip, $cidr, $which, $ipIsBin = false, $returnBin = false) {
$mask = cidrToMask($cidr);
if (!$ipIsBin) {
$ip = inet_pton($ip);
}
$ipParts = str_split($ip, 4);
$maskParts = str_split($mask, 4);
$rangeParts = [];
for ($i = 0; $i < count($ipParts); $i++) {
if ($which == 'start') {
/* Побитовый & адреса и маски оставит только биты префикса. */
$rangeParts[$i] = $ipParts[$i] & $maskParts[$i];
} else {
/* Побитовый | с обратной маской (~) оставит биты префикса и установит все биты локальной части в 1. */
$rangeParts[$i] = $ipParts[$i] | ~$maskParts[$i];
}
}
$rangeBoundary = implode($rangeParts);
if ($returnBin) {
return $rangeBoundary;
} else {
return inet_ntop($rangeBoundary);
}
}Maka ojiji n'ọdịnihu, anyị ga-enye ikike ịnyefe IP wee nweta nsonaazụ na ọnụọgụ abụọ na ụdị mmadụ nwere ike ịgụ. Oke $nke ebe a ọ na-akọwapụta ma anyị chọrọ ịnweta mmalite ma ọ bụ njedebe nke oke (ụkpụrụ 'ibido' ma ọ bụ 'njedebe' n'otu n'otu).
Ọrụ na-esote (nakwa nke kachasị mma maka ụlọ ọrụ anyị) bụ ịgbakọ nso nso. Maka ọrụ a, ọ dịghị ihe dị mma batara n'uche karịa ịgbasa adreesị ahụ n'ime eriri ọnụọgụ abụọ ma tinye 1 n'ọnọdụ a chọrọ, wee daa ihe niile azụ. Iji zere arịa ndị na-apụta n'ebe ọ bụla, ekpebiri m ikewa adreesị ahụ site na byte n'oge ire ere na mgbakọ.
function getNextBlock ($ipStart, $cidr, $ipIsBin = false, $returnBin = false) {
if (!$ipIsBin) {
$ipStart = inet_pton($ipStart);
}
$ipParts = str_split($ipStart, 1);
$ipBin = '';
foreach ($ipParts as $ipPart) {
$ipBin .= str_pad(base_convert(unpack('H*', $ipPart)[1], 16, 2), 8, '0', STR_PAD_LEFT);
}
/* Добавляем 1 в нужном разряде двоичного представления строки "влоб" :) */
$i = $cidr - 1;
while ($i >= 0) {
if ($ipBin[$i] == '0') {
$ipBin[$i] = '1';
break;
} else {
$ipBin[$i] = '0';
}
$i--;
}
$ipBinParts = str_split($ipBin, 8);
foreach ($ipBinParts as $key => $ipBinPart) {
$ipParts[$key] = pack('H*', str_pad(base_convert($ipBinPart, 2, 16), 2, '0', STR_PAD_LEFT));
}
$nextIp = implode($ipParts);
if ($returnBin) {
return $nextIp;
} else {
return inet_ntop($nextIp);
}
}Na mmepụta anyị na-enweta prefix nke oke nha ọzọ akọwapụtara na ya $cidr. Site na ọrụ a, anyị na-ekenye ndị ahịa anyị blocks nke adreesị.
N'ikpeazụ, ịlele ma ọ bụrụ na adreesị ahụ bụ nke nso. Dịka ọmụmaatụ, anyị ekenyela otu ngọngọ/48 maka ikesa blocks nye ndị ahịa /64, na anyị kwesịrị ijide n'aka na mgbe ị na-ekenye anyị agaghị agabiga ngọngọ ekenyela (na omume nke a agaghị eme ngwa ngwa, ma a ka nwere ike ime). Ihe niile dị mfe ebe a. Anyị na-enweta mmalite na njedebe nke oke na ụdị ọnụọgụ abụọ ma lelee ma adreesị dị n'ime oke.
function ipInRange ($ip, $rangeStart, $cidr) {
$start = getRangeBoundary($rangeStart, $cidr, 'start',false, true);
$end = getRangeBoundary($rangeStart, $cidr, 'end',false, true);
$ipBin = inet_pton($ip);
return ($ipBin >= $start && $ipBin <= $end);
}Enwere m olileanya na nke a nyere aka. Kedu ọrụ ndị ọzọ maka iji adreesị na-arụ ọrụ nwere ike ịba uru n'echiche gị? Ihe mgbakwunye ọ bụla, nkọwa na nyocha koodu na-anabata nke ọma na nkwupụta.
Ọ bụrụ na ị bụbu onye ahịa anyị ma ọ bụ na-eche echiche ịghọ otu, n'oge mbipụta nke isiokwu a, anyị na-enye gị ohere ịnweta ngọngọ. /64 kpamkpam n'efu maka ọrụ vps niile ma ọ bụ ihe nkesa raara onwe ya nye na Equinix Tier IV data center, Netherlands maka ịrịọ maka ngalaba ahịa site n'inye njikọ na isiokwu a na tiketi. Onyinye a na-arụ ọrụ ruo Maachị 2020.
Ụfọdụ mgbasa ozi 🙂
Daalụ maka ịnọnyere anyị. Akụkọ anyị ọ masịrị gị? Chọrọ ịhụ ọdịnaya na-adọrọ mmasị karị? Kwado anyị site n'itinye iwu ma ọ bụ ịkwado ndị enyi, , analog pụrụ iche nke sava ọkwa ntinye, nke anyị chepụtara maka gị: (dị na RAID1 na RAID10, ruo 24 cores na ruo 40GB DDR4).
Dell R730xd 2x dị ọnụ ala na etiti data Equinix Tier IV na Amsterdam? Naanị ebe a na Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - sitere na $99! Gụkwuo banyere ya
isi: www.habr.com
