2017-10-18 113 views
0

私はC言語のソケットを使いこなしていますが、このプロトコルは引き続き表示されていますが、何も見つかりませんでした。 HOPOPTとIPの違いは何ですか?HOPOPTプロトコルとは何ですか?socket()はどのように機能しますか?

また、私はソケット()関数の最後の引数は、manページによると、0にする必要がありますなぜ得ることはありませんよ。

プロトコルは、ソケットで使用する特定のプロトコルを指定します。指定されたプロトコルファミリ内の特定のソケットタイプをサポートするために通常は1つのプロトコルしか存在しません。この場合、プロトコルは0として指定できます。しかし、多くのプロトコルが存在する可能性があります。方法。使用するプロトコル番号は、通信が行われる「通信ドメイン」に固有です。プロトコル(5)を参照してください。プロトコル名文字列をプロトコル番号にマップする方法については、getprotoent(3)を参照してください。

私の知る限りが0の最後の引数は、標準ライブラリを使用するが、その場合には1が0以外の番号を使用しているプロトコルを決定するようになる設定を理解して?

+0

"この場合、0以外の数字が使用されますか?" >> _しかし、多くのプロトコルが存在する可能性があります。この場合、特定のプロトコルをこのように指定する必要があります._ –

+0

@SouravGhosh、実際の例を見ていきたいと思います – Trey

答えて

0

HOPOPTは、Hop-by-Hop IPv6 extension headerの略語です。これは、IPv6パケットにさらに多くのオプションを追加できるヘッダーです。 IPv6パケットにはこのヘッダーが含まれているのが普通です。

socket()は、ネットワーク接続の内部表現である新しいソケットを作成するためにBSDなどが提供するシステムコールです(Linuxなど)。新しいソケットを作成する場合、IPv4、IPv6などを経由する可能性のあるTCP、UDPなどのプロトコルを指定する必要があります。

この段落では、それぞれに1つまたは複数のプロトコルソケットタイプ。

1つだけ存在する場合は、引数はゼロでなければなりません。例えば、SOCK_STREAMソケットはTCPだけで実装されています:

int sk = socket(AF_INET, SOCK_STREAM, 0); 

あなたが使用したい具体的にはどのプロトコルを指定する必要がありますより多く存在している場合。例えば、SOCK_SEQPACKETタイプは、SCTPプロトコルを実装することができます。

int sk = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP); 

ので、結論に:

  • あなたはソケットを作成したい場合は、どのようなプロトコルが使用することを選択し、インスタンスのTCPのためのオーバーIPv4。
  • IPv6パケットでHOPOPTは完全に正常です。トレースに表示されている場合は、(AF_INET6を使用して)IPv6ソケットを作成したため、問題ありません。
関連する問題