nojimaです。

フォローありがとうございます。

kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:

> >  [Q1] パケットのソースアドレスは何になるかを容易に予測することは
> >       可能でしょうか?
> 
> system 依存なんじゃないかなぁ。もちろん。

なるほどです。以前猛烈に誤解をしていて、eth0に割り振られたアドレスかと
思い込んでました。やってみればわかるのですが、実際は違うようで...

> >  name.sin_family=AF_INET;
> >  name.sin_addr.s_addr=htonl(INADDR_ANY);
> >  connect(socketfd,(struct sockaddr *)&name,sizeof(name))
> >  [Q2] このソースアドレスを決めている部分はOSのソースではどこになるので
> >      しょうか?
> >       (linux-src/net/ipv4/route.cの
> >        ip_route_input_slow()内部かな?なんて勝手に思っている次第ですが
> >        あってますでしょうか?)
> 
> このあたり駆け足で読んだような気もするんだけど、覚えがないです〜

  自分なりの動作の予想:
  
   1) ifconfig eth0:x xxxx した時にIP アドレスを割り振ると同時に
      xxxxの所属するセグメントへのroute add がeth0:xに対して行なわれる。

   2) プログラムがパケットを出そうとすると、ipv4/route.c内部で、
      ソースIPアドレスがルーティングテーブルを元に決定される。

   3) 2)の時、同一セグメントに対する複数のルーティングテーブル
      が見つかる。で、ルーティングテーブルを保管しているハッシュ
      において一番最初に見つかったエントリから得られるインターフェースの
      アドレスがソースIPアドレスとして利用される。

というわけで、ハッシュのエントリの一番最初を予測しなければならないので、
ソースIPアドレスの予測は難しいという自分の結論なのですが、あってますで
しょうか?

 IP aliasの仕様ってどこかにあったりしますでしょうか?