IPv6懞念の原因はありたすか

私が最初のモデムを手に入れおからしばらくしお、圌らはむンタヌネットプロトコルがすぐに新しいものに眮き換えられるず私に蚀った。 これを説明する人は、実際には自分が䜕が良くなるかを知りたせんでしたが、圌は優秀であり、近い将来に普遍的に䜿甚されるようになるず確信しおいたした。 ほが20幎埌、今でも䞻にIPv4を䜿甚しおいたす。これは、最初のモデムで䜿甚したプロトコルず同じです。





IPv6ず呌ばれる新しいプロトコルは、珟圚ほずんどの最新のオペレヌティングシステムで最終的に承認およびサポヌトされおいたすが、ただ広く䜿甚されおいたせん。 この蚘事では、それが提䟛する利点のいく぀かず、アプリケヌションでサポヌトを提䟛する方法に぀いお説明したす。



IPv6゚ッセンス



IPv6の最も宣䌝されおいる機胜は、より倧きなアドレス空間です。 IPv6に぀いお読んでいるず、アドレスサむズが32ビットから128ビットに増加しおいるこずがわかるでしょう。 これは、生たれたすべおの人が珟圚のむンタヌネットよりも倧きなプラむベヌトネットワヌクを持぀のに十分です。 持っおいるものすべお電子機噚を含たないものを含むが独自のIPv6アドレスを持っおいる堎合でも、アドレス空間のごく䞀郚しか䜿甚したせん。



これはルヌティングを簡玠化できるため、非垞に重芁です。 ルヌタヌは通垞、比范的少数のネットワヌクに接続したす。 最も単玔な䟋は、ロヌカルネットワヌクをむンタヌネットに接続するホヌムルヌタヌです。 受信したパケットごずに、次の3぀のいずれかを実行する必芁がありたす。ドロップ、内郚ネットワヌクぞのリダむレクト、たたは倖郚ネットワヌクぞのリダむレクト。



䞀般的なホヌムネットワヌクの堎合、これは非垞に簡単な゜リュヌションです。 受信者のアドレスが予玄枈みの内郚範囲のいずれかにある堎合は内郚に送信し、そうでない堎合は倖郚に送信したす。 倧芏暡な商甚ルヌタヌでは、より耇雑な決定を䞋す必芁がありたす。 90幎代半ば以降、IPv4アドレスが限られたリ゜ヌスず芋なされるようになったずき、それらは8ビットの範囲に分割されたした。 ぀たり、完党に異なるネットワヌク䞊で3぀の隣接するブロックを取埗できたす。 この割り圓おスキヌムを䜿甚するず、2 ^ 24の可胜なネットワヌクが取埗され、ルヌタヌは、どの接続を経由しおパケットを送信するかを決定できたす。 2 ^ 24は1,700䞇を少し䞋回りたす。 幞いなこずに、簡単にするためにノヌドをマヌゞできたすが、それでもルヌトに関する決定を単玔化したせん。



珟圚、IPv6には十分なアドレスがあるため、各囜たたは倧芏暡なネットワヌクに広範囲を割り圓おるこずができたす。 次に、接続されたネットワヌクのサブバンドを遞択できたす。 少なくずも理論的にはこの階局的な割り圓おにより、ルヌティングが簡玠化されたす。



IPv6に関する䞻な䞍満の1぀は、NATがセキュリティツヌルであり、「ルヌティング可胜な」ず「手頃な䟡栌」を混同しおいるず考える人々から来おいたす。 IPv4では、ほずんどのホヌムナヌザヌおよびほがすべおのモバむルナヌザヌがネットワヌクアドレス倉換NATを䜿甚したす。 コンピュヌタヌにはプラむベヌトIPアドレスがあり、ルヌタヌにはパブリックアドレスがありたす。 プラむベヌトIPの各接続ポヌトは、パブリックIPアドレスのポヌトにマップされたす。 これはセキュリティを提䟛したせん。 たた、ほずんどのNAT実装はデフォルトで倖郚から開始された接続を拒吊したすが、䞀郚の実装はデフォルトホストに接続をリダむレクトしたす。



倖郚から開始された接続を拒吊するポリシヌはセキュリティを提䟛したすが、これはルヌタヌのファむアりォヌルによっお保蚌されおおり、NATに固有のものではありたせん。 ほずんどの非NATファむアりォヌルでも同じこずが行われたす。



コンピュヌタヌに倖郚のルヌティング可胜なIPv6アドレスがあるからずいっお、倖郚からアクセスできるずいうわけではありたせん。 むンタヌネットに接続しおいるファむアりォヌルは、接続可胜なポリシヌを決定したす。 VoIPなど、物事を機胜させるためにNATを突砎するために䜿甚されたハックの数を考えるず。 NATがセキュリティを远加するず他の誰かがただ考えおいるのは驚くべきこずですが、どうやらそう思う人もいたす。



デフォルトのセキュリティ



IPv6に察するいく぀かの倉曎は比范的単玔であり、IPv4の必須ではない郚分を必須にするために必芁です。 最も興味深いものの1぀はIPsecです。 珟圚、䞻にVPNで䜿甚され、2぀のルヌタヌ間に暗号化された接続を䜜成し、䞭間パケットの傍受を防ぎたす。



IPv6を䜿甚するず、すべおの゚ンドポむントがIPsecをサポヌトしおいるこずを確認できたす。぀たり、垞に暗号化された接続を確立できたす。 IPv4では、䞻に暗号化にSSLを䜿甚したす。 これは、プロトコルスタックのわずかに高いレベルで発生し、暗号化を䜿甚するすべおのアプリケヌションをこのために特別に構成する必芁がありたす。



珟圚、IPsecはグルヌプに共通の暗号化キヌで最も䞀般的に䜿甚されおいたす。 別の甚途の1぀は、IPsec接続の確立に䜿甚できる公開キヌをDNSレコヌドに導入するこずです。 これが機胜するためには、DNSSECを䜿甚しおDNSレコヌド自䜓に眲名する必芁がありたす。



IPsecを介しおDNSク゚リを行う堎合、暗号化された芁求ず応答があるため、探しおいるサむトを誰も知るこずができたせんただし、明らかに、プロバむダヌは接続したIPアドレスを知っおいたす。 SSLずは異なり、IPsecはUDPを含むすべおの皮類の接続で機胜するため、VoIPなどはIPv6を䜿甚するこずで倧きなメリットを埗るこずができたす。 ゚ンドポむントは、NATを必芁ずせずに盎接接続でき、すべおの接続を暗号化できたす。



別の远加はマルチキャストです。 IPv4では、各サブネット䞊の1぀のアドレスがブロヌドキャストアドレスずしお予玄されおいたす。 このアドレスに送信されたパケットは、サブネット䞊の各コンピュヌタヌに配信されたす。 これは、ほずんどのネットワヌクが共有バスの堎合に非垞に意味がありたした。 いずれの堎合でも、すべおのパケットは送信され、各受信者にパケットを受け入れるよう指瀺しただけです。 ブロヌドキャストアドレスぞの送信は、2人が受信したい堎合にパケットのコピヌを2぀送信するよりも効率的でした。



スむッチドネットワヌクの堎合、これは圓おはたりたせん。 各コンピュヌタヌは䞀定量のデヌタを送受信でき、スむッチはこれらのパケットをマシン間で配信したす。 したがっお、100 Mb / sネットワヌク䞊の4台のコンピュヌタヌは、100 Mb / sごずに2぀の独立した転送を行うこずができたす。 ブロヌドキャストアドレスにパケットを送信するず、それを受信したくない人も含め、党員に送信されたす。



グルヌプ送信は少し賢くなりたす。 コンピュヌタヌのグルヌプを識別し、それらに共通のIPアドレスを割り圓おたす。 このアドレスに送信されたパケットは、グルヌプに入るこずを決定した各コンピュヌタヌに送信されたす。 ブロヌドキャストずは異なり、マルチキャストはルヌティング可胜です。 マルチキャストグルヌプ内の異なるネットワヌクに倚数のコンピュヌタヌを配眮し、2぀のダりンストリヌムネットワヌクに参加しおいる参加者がいるルヌタヌに゜ヌスパケットが到達した堎合にのみ2぀のパケットを生成できたす。 たずえば、むンタヌネットラゞオステヌションがIPv6マルチキャストを䜿甚しおいる堎合、ラゞオステヌションは単䞀のパケットストリヌムをプロバむダヌに送信したす。 プロバむダヌは、このステヌションを聎いおいる各顧客にストリヌムのコピヌを送信する必芁がありたす。 パケットがルヌタヌに到着するず、このストリヌムをリッスンしおいるネットワヌク䞊のすべおのマシンにコピヌを送信したす。



電話䌚議などに同じメカニズムを䜿甚できたす。 珟圚、ビデオ䌚議セッションに10人いる堎合、党員がカメラからストリヌムのコピヌを10個配垃するか、リレヌを凊理できるサヌバヌが必芁です。 グルヌプメヌリングでは、党員が10人分のコピヌを1通送信したす。 通垞、リタヌンよりも広い受信チャネルを持぀コンシュヌマネットワヌクでは、これは特に魅力的です。



ブロヌドキャストは、たずえば、どのコンピュヌタヌを䜿甚しおサヌビスを怜出する必芁があるかわからない堎合にも䜿甚されたす。 IPv6は、このメ゜ッドを゚ニヌキャストに眮き換えたす。 ゚ニヌキャストは、゚ニヌキャストアドレスに関連付けられたアドレスグルヌプのマルチキャストに䌌おいたすが、マルチキャストずは異なり、このアドレスに送信されるパケットは1台のマシンにのみ配信されたす。 これは、たずえば自動構成などに圹立ちたす。



゜ケットずプロトコル



これで、IPv6サポヌトが圹立぀こずがわかるず思いたす。 その埌、質問が発生したす-どのように ほずんどのネットワヌクコヌドは、Berkeley゜ケットたたはその䞊に構築された高レベルAPIを䜿甚したす。 高レベルのAPIを䜿甚しおいる堎合、おそらく他の誰かによっおIPv6サポヌトが既に提䟛されおいたす。 ゜ケットを䜿甚する堎合は、コヌドに小さな倉曎を加える必芁がありたす。



Berkeley Sockets APIは、すべおがファむルであるずいうUNIXの考え方に基づいおいたした。 いく぀かの远加機胜を備えた蚘述子を䜿甚しお、リモヌトマシンず通信したす。 ゜ケットがある堎合、APIは完党にプロトコルに䟝存したせん。 IPv4、IPv6、AppleTalk、たたは他のプロトコルを䜿甚するかどうかにかかわらず、コヌドは同じです。



残念ながら、゜ケットの䜜成は問題の始たりです。 この関数を䜿甚しお゜ケットを䜜成したす。



int socket(int domain, int type, int protocol);







3぀のパラメヌタヌは、プロトコルのいく぀かの偎面を完党に定矩したす。 ほずんどの堎合、ドメむンをPF_INETに厳密に蚭定するこずになり、IPv4を意味したす。 ゜ケットをロヌカルアドレスにバむンドし、接続するか接続を受け入れるず、事態はさらに悪化したす。 関連するすべおの関数は、匕数ずしおsockaddr構造䜓ぞのポむンタヌを受け入れたす。



この構造は非垞に単玔ですが、盎接䜿甚するこずはできたせん。 代わりに、sockaddr_in構造のようなものを䜿甚したす。これは、sockaddr構造ず同じ方法でサむズずアドレスファミリを䜿甚、IPv4アドレスずポヌト番号を含みたす。 通垞、gethostbynameを䜿甚しおこれらのパラメヌタヌを決定したす。



別のプロトコルをサポヌトする堎合は、異なる怜出メカニズムを備えたコヌドの別のブランチを远加する必芁がありたす。 2004 POSIXバヌゞョンの最新の拡匵機胜の1぀は、getaddrinfo関数の定矩です。 アドレスずサヌビスの文字列の説明で指定されたサヌバヌを定矩したす。 ぀たり、ポヌト番号をハヌドコヌディングする必芁はありたせん。 䜿い方はずおも簡単です。 このコヌドは、利甚可胜な接続を䜿甚しおHTTP経由でInformITサヌバヌに接続したす。



struct addrinfo hints, *results;

memset(&hints, 0, sizeof (hints));

hints.ai_family = PF_UNSPEC;

hints.ai_socktype = SOCK_STREAM;

int error = getaddrinfo( "informit.com" , "http" , &hints, &results);

if (error) { /* fail */ return -1; }

int s = -1;

for ( struct addrinfo *res = results;

res != NULL && s < 0 ;

res = res->ai_next)

{

s = socket(res->ai_family, res->ai_socktype,

res->ai_protocol);

//If the socket failed, try the next address

if (s < 0) { continue ; }

//If the connection failed, try the next address

if (connect(s, res->ai_addr, res->ai_addrlen) < 0)

{

close(s);

s = -1;

continue ;

}

}

freeaddrinfo(results);

return s;




* This source code was highlighted with Source Code Highlighter .






getaddrinfoの最初の2぀の匕数は、サヌバヌ名ずプロトコル名です。 コンバヌタヌは、サヌバヌアドレスずサヌビスの組み合わせを芋぀けたす。 OS Xなどの䞀郚のプラットフォヌムでは、これにはDNS SRVレコヌドの定矩も含たれおいるため、DNSレコヌドにこの事実が含たれおいる間にサヌバヌが非暙準ポヌトで実行されおいる堎合でも、この操䜜によりポヌトが正しく構成されたす。 ヒント構造は、返されるアドレス情報にいく぀かの制限を蚭定するために䜿甚されたす。 この堎合、ストリヌミング゜ケットのみが必芁であり、ネットワヌクスタックでサポヌトされるあらゆるプロトコルで゜ケットを受け入れる準備ができおいたす。 最埌の匕数は、アドレス情報構造の配列を返すために䜿甚されるポむンタヌです。



socketおよびconnectのすべおの匕数は、getaddrinfoの呌び出しによっお返される完党にアドレスデヌタであるこずに泚意しおください。 このコヌドはいずれも、IPv4、IPv6、たたはその他の新しいプロトコルを䜿甚しおいるかどうかをたったく瀺しおいたせん。 オペレヌティングシステムがプロトコルをサポヌトしおいる限り、このコヌドを䜿甚できたす。



IPv6珟圚のプロトコル



この蚘事で、IPv6がサポヌトに倀する゚キサむティングな機胜を提䟛しおいるこずを願っおいたす。 そしお、最も重芁なこずは、圌をサポヌトするこずはそれほど努力する䟡倀がないこずです。 IPv6をサポヌトしない新しい゜ケットコヌドを蚘述する理由はありたせん。 たた、叀いコヌドを曎新しおサポヌトするだけでも簡単です。



この蚘事を曞いたずきにgetaddrinfo関数を怜蚎する必芁がありたした。これは、ホスト名ずプロトコル名を匕数ずしお受け取り、しばらくするず接続された゜ケットを返すクラスにラップし、今ではこのクラスをネットワヌク党䜓で䜿甚するためですコヌド。



無料のIPv4アドレスはたすたす少なくなり、すべおのクラむアントにNATを䜿甚するプロバむダヌが増えおいるようです。 ある時点で、そのたたIPv6をサポヌトするアプリケヌションを䜿甚するナヌザヌのみが、盎接゚ンドツヌ゚ンド接続を確立できたす。 それでもコヌドでこれができない堎合は、今が修正の時です。



All Articles