1

SOCK_STREAMソケットオブジェクトのインスタンス化でプロトコル番号引数も受け入れる場合に、python が IPv4またはIPv6 を指定するのはなぜですかSOCK_DGRAM(nrs 4 および 41、 プロトコル番号のリストを参照)。(のようprotosocket.socket([family[, type[, proto]]]))それはfamily議論を役に立たなくしませんか?

4

2 に答える 2

1

いいえ。リンクしたプロトコル リストの 4 番と 41 番は、「IPv4 カプセル化」と「IPv6 カプセル化」を明確に示しています。 IPv6 over IPv4 トンネル

于 2012-05-15T14:14:06.467 に答える
1

protoこのコンテキストでは、使用するレイヤ 4 (L4) プロトコルを指します。ほとんどの場合、これはIPPROTO_TCP(TCP) またはIPPROTO_UDP(UDP) になります。実際には、これらのパラメーターを頻繁に明示的に渡す必要はほとんどありません。一般に、IP はSOCK_STREAMTCP をSOCK_DGRAM意味し、UDP を意味するからです。

ただし、たとえば、生のソケットを使用してプログラムに ICMP サポートを実装したい場合などに便利です。それからあなたは合格SOCK_RAWし、IPPROTO_ICMP. また、これは単なる IP ネットワーキング以上のものを処理するように設計された Berkeley ソケット API に基づいていることに注意してください (このモジュールが何をサポートしているかを理解するにAF_*は、socketモジュールの他のすべてを参照してください)。

対照的に、IPv4/IPv6 はレイヤ 3 (L3) プロトコルであり、TCP/UDP とは独立して動作します。

編集:

そのリストに IPv4/IPv6 カプセル化が表示される理由については、IPまたは6in4で IP などのプロトコルをサポートするためです。プログラムでこれらのメカニズムを直接扱うことはまずありません。

于 2012-05-15T14:23:47.143 に答える