SOCK_STREAM
ソケットオブジェクトのインスタンス化でプロトコル番号引数も受け入れる場合に、python が IPv4またはIPv6 を指定するのはなぜですかSOCK_DGRAM
(nrs 4 および 41、 プロトコル番号のリストを参照)。(のようproto
にsocket.socket([family[, type[, proto]]])
)それはfamily
議論を役に立たなくしませんか?
2 に答える
いいえ。リンクしたプロトコル リストの 4 番と 41 番は、「IPv4 カプセル化」と「IPv6 カプセル化」を明確に示しています。 IPv6 over IPv4 トンネル
proto
このコンテキストでは、使用するレイヤ 4 (L4) プロトコルを指します。ほとんどの場合、これはIPPROTO_TCP
(TCP) またはIPPROTO_UDP
(UDP) になります。実際には、これらのパラメーターを頻繁に明示的に渡す必要はほとんどありません。一般に、IP はSOCK_STREAM
TCP をSOCK_DGRAM
意味し、UDP を意味するからです。
ただし、たとえば、生のソケットを使用してプログラムに ICMP サポートを実装したい場合などに便利です。それからあなたは合格SOCK_RAW
し、IPPROTO_ICMP
. また、これは単なる IP ネットワーキング以上のものを処理するように設計された Berkeley ソケット API に基づいていることに注意してください (このモジュールが何をサポートしているかを理解するにAF_*
は、socket
モジュールの他のすべてを参照してください)。
対照的に、IPv4/IPv6 はレイヤ 3 (L3) プロトコルであり、TCP/UDP とは独立して動作します。
編集:
そのリストに IPv4/IPv6 カプセル化が表示される理由については、IPまたは6in4で IP などのプロトコルをサポートするためです。プログラムでこれらのメカニズムを直接扱うことはまずありません。