2016-06-16 2 views
-1

このsendmsg()機能を使用して、カーネルがどのようにipヘッダを埋めているか知りたいです。内部でsendmsg()関数は何をしていますか?

sendmsg()ソケットを介して接続していないメッセージを接続するには、 機能を使用します。この関数に3つの引数を渡します。それらは、ファイル記述子、 msghdr構造体、フラグです。

msghdr構造では、パケットを送信する宛先IPを与えます。ここでは、すべてのパケットについて がイーサネットカード経由で送信されているので、私たちは確実にOSIレイヤーに基づいて ヘッダーを埋めます。だからsendmsg()関数を使用して、どのようにカーネルはmsghdr構造で指定されたipをとってip をipヘッダに書き込んで宛先システムにデータを送りますか?

誰でもこの質問を明確に説明できますか?

+2

お使いのオペレーティングシステムのカーネルを少なくとも* *指定してください... – unwind

+3

「ip to ip header」とは何を意味するのでしょうか?カーネルがどのインターフェースを介してパケットを送信すべきかを把握する方法を意味しますか?実際の[IPヘッダ](https://en.wikipedia.org/wiki/IP_header)の作成方法は?他に何か?詳しく教えてください。 –

+0

_send via ethernet card_:宛先アドレスに依存します – LPs

答えて

0

あなたが言うように、すでにdest IPを指定しています。ソースIPは、パケットが送信されるインターフェイスからLinuxカーネルによって選択されます。アプリケーションが特定のインタフェースで「バインド」を呼び出したかどうかに基づいて変更できます。

関連する問題