UDP 로 송신할 때, source IP 가 bind 되지 않은 다른 ip 로 바뀌어서 나갑니다.
글쓴이: trymp / 작성시간: 화, 2009/12/08 - 4:41오후
현재 저는 리눅스 머신에서 UDP 송신 프로그램을 짜고 있고요.
환경을 말씀드리자면,
eth0 1.1.1.1
eth1(ppp0) 2.2.2.2
eth2(dhcp) 3.3.3.3
ip ro 로 보았을 때, default routing 은 3개 잡혔있습니다.
위와 같다고 가정하였을 때, UDP 소켓을 eth0 에 bind 해서 5.5.5.5 로 쏜다고 가정하였을 때,
패킷이 eth0, eth1, eth2 에서 모두 잡힙니다. load balancing 되면서 송신이 되고요.
제 생각에 eth0 에 bind 하였으니 eth0 를 타고 나가야 한다고 생각했는데,
실제로는 그렇지 않았습니다.
더 황당한 것은 tcpdump 로 보니 2.2.2.2 -> 5.5.5.5 로 패킷이 나가는 것입니다.
eth0 에 bind 한 소켓을 통해 sendto() 를 하면 bind 된 소켓의 IP 주소를 src IP 로 해서
패킷이 나가는 것 아닌가요?
위의 현상대로라면 UDP packet의 src IP 가 application 에서 지정한 bind 에 따라 결정되는 것이 아니고
라우팅이나 다른 요소에 의해 결정되는 것 같은데...
실제로 udp packet을 생성할 때, source IP 는 언제 결정이 되는지 궁금합니다.
고수님들의 조언 부탁드립니다.
Forums:
댓글 달기