본문 바로가기
C++ 200제/코딩 IT 정보

RARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기

by vicddory 2017. 11. 27.

RARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기


RARP Examples


우리의 네트워크에서 우리는 호스트 sun을 자신의 로컬 디스크 대신 네트워크로부터 bootstrap 하도록 할 수 있다. 호스트 bsdi에서 RARP 서버와 tcpdump를 실행시키면, 아래 그림과 같은 결과를 얻을 수 있다.


tcpdump가 하드웨어 어드레스를 출력하게 하려고 0e flag를 사용하였다.


RARP request and replyRARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기


라인 1에 있는 RARP request는 브로드캐스트되고 라인 2에 있는 RARP reply는 unicast된다.


라인 2에 있는 sun으로부터의 출력은 호스트 sun(140.252.13.33)에 대한 IP 어드레스를 담고 있는 RARP reply를 의미한다.


라인 3에서는 일단 sun이 자신의 IP 어드레스를 수신하면 8CFC0D21.SUN4C 파일에 대한 TFTP read-request를 알린다는 것을 볼 수 있다. (TFTP는 Trivial File Transfer Protocol임) 

2222222

파일 이름에 있는 여덟 개의 16진수 값은 호스트 sun에 대한 IP 어드레스의 16진수 표현이다. 이것은 RARP reply에서 리턴된 IP 어드레스이다. 파일 이름의 나머지 부분인 SUN4C는 bootstrap 중에 있는 시스템의 타입을 의미한다.


tcpdump에서 라인 3은 UDP 데이터그램이 아니고 길이 65를 갖는 IP 데이터그램임을 보여주고 있다. 왜냐하면, hardware-level의 어드레스를 보기 위해 -e flag로 tcpdump를 실행시켰기 때문이다.


위의 그림에서 주목해야 할 또 다른 내용은 라인 2에 있는 이더넷 프레임의 길이 최소값(60바이트) 보다 더 작은 값을 갖는다는 점이다. 그 이유는 이 이더넷 프레임을 보내는 시스템(bsdi)에서 tcpdump를 실행시켰기 때문이다.


rarpd application은 BSD Packet Filter device driver에 42바이트(14바이트의 이더넷 헤더와 28바이트의 RARP reply)를 write 하였고, 이것은 tcpdump가 수신한 것의 복사본이다.


RARP 브로드캐스트RARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기


그러나 Ethernet device driver는 전송을 위한 minimum size(60)로 이 짧은 프레임을 패드 하게 된다. 만일 다른 시스템에서 tcpdump를 실행시켰더라면, 길이는 60으로 출력되었을 것이다.


이 예제에서 우리는 디스크가 없는 시스템이 RARP reply에 있는 자신의 IP 어드레스를 수신하면, bootstrap image를 읽도록 TFTp request를 알린다는 것을 보았다.


RARP ExamplesRARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기


아래 그림은 네트워크에 RARP 서버가 없는 경우의 resulting packet을 보여주고 있다. 각 패킷의 목적지 어드레스는 이더넷 broadcast 어드레스이다. who-is 뒤에 있는 이더넷 어드레스는 target의 하드웨어 어드레스이고, tell 뒤에 있는 이더넷 어드레스는 sender의 하드웨어 어드레스이다.


RARP requests with no RARP server on the networkRARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기


재전송 주기에 주목하라.


첫 번째 재전송은 6.55초 후에 일어났고, 42.80초까지 증가하였다. 그러고 나서 5.34초로 떨어진 후 6.55초 후에 다시 재전송되고 42.79초까지 앞의 동작을 반복하였다. 이것은 무한하게 계속된다.


각각의 타임아웃 간격의 차이를 계산해보면 doubling effect가 있음을 알 수 있을 것이다. 5.34부터 6.55까지는 1.21초이고, 6.55부터 8.97까지는 2.42이고, 8.97부터 13.80까지는 4.83초이고 등등.


타임아웃 간격이 일정한 한도에 다다르면 (42.80초보다 크게 되면) 5.34초로 리셋된다. 타임아웃값이 이처럼 증가하는 것은 각각의 시간에 같은 값을 사용하는 것보다 더 나은 방법이다.


RARP 예제, 재전송 주기란? tcpdump와 broadcast 어드레스 살펴보기

댓글