& compile Real-Time Packet Analysis Lab. Various Protocol Team. 작성자 : 조학봉 작성일 : 2002/1/17 목차 1 BOOTP(Bootstrap Protocol)... 2 1.1 Packet format...2 1.2 Operation...5 1.3 Relay Agent...5 2 DHCP(Dynamic Host Configuration Protocol)... 5 2.1 Leasing...6 2.2 DHCP Operation...7 2.3 Packet Format...8 3 udhcp strongarm board에서실행하기... 10
1 BOOTP(Bootstrap Protocol) BOOTP는 disk가없거나, 처음부팅되는컴퓨터를위해위에서언급한네가지정보를제공하기위해제안된 / protocol이다. 이미 RARP가 hardware address를통해 IP address를제공할수있다는것은알고있으나, 나머지정보에대해서는알수가없어유용하지는않다. 이러한이유로 RARP는거의사용되지않는다. 1.1 Packet format Operation code 이 8bit는 BOOTP packet의 type을나타낸다. Request:1, Reply:2 Hardware type 이필드는 physical network의 type을나타낸다. Ethernet:1 Hardware length Physical address의길이를나타낸다. Ethernet:6 Hop count Packet이지날수있는최대의 hop을결정한다. Transaction ID 이필드는 에의해 request packet에채워지고, reply packet에서자기가보낸 request에대한 reply인지를구별하는데사용된다. Server는당연히이필드에같은값을반환한다. Number of seconds 이필드는 가부팅시작한후에경과된시간을나타낸다. Various Protocol Team ( 조학봉 ) - 2-2002/1/17
Client IP address Client의 IP address가채워진다. Client는이정보가없을시모두 0로채운다. Your IP address 이필드는 request에의해 에서 reply에 IP address를채우는데에사용된다. Server IP address 이필드는 에의해 reply packet에포함되는 Server의 IP address이다. Gateway IP address Server에의해채워지는필드로 router의 IP address를나타낸다. Client hardware address 이 16bytes의필드는 의 physical field가채워진다. 물론서버는다른프레임에서이정보를얻을수있지만, 이렇게함으로써이정보에대한신뢰성을확보할수있다. Server name Optional 64bytes의필드로 에의해 reply packet에실린다. 이곳에는 의 domain name을포함한다. Various Protocol Team ( 조학봉 ) - 3-2002/1/17
Boot filename 이서버에의해 reply된 packet의 128byte는 boot file의 full pathname을포함한다. 이정보를이용해 는다른부팅정보를얻을수있다. (for TFTP) Options 이 64bytes의필드는두가지목적으로사용된다. 즉, 부가적은정보를실을수있으며, 특정 vendor의정보도실어나를수있다. 이필드는오직 reply에의해서만사용된다. Server는 magic cookie라는 99.130.83.99라는 IP address의포맷의숫자를사용한다. Client가 message reading을끝마치면, 이정보를찾고만약있다면다음 60bytes는 option임을나타낸다. Option은 3개의필드로구성된다. 1byte tag, 1byte length, variable-length value. Length 필드는 value field의길이를나타내며, 4byte를곱하면길이가나온다. Tag(0) Padding Tag Length Value(variable length Other operations Tag(255) End of list <Option format> Description Tag Length Value Padding 0 Subnet mask 1 4 Subnet mask Time offset 2 4 Time of the day Default routers 3 Variable IP address Time s 4 Variable IP address DNS s 6 Variable IP address Print s 9 Variable IP address Host name 12 Variable DNS name Boot file size 13 2 Integer Vendor specific 128-254 Variable Specific information End of list 255 Various Protocol Team ( 조학봉 ) - 4-2002/1/17
1.2 Operation 1) BOOTP 는 UDP port number 67을열어놓고 를기다린다. 2) Client는 BOOTP request message를 UDP port 68을통해 UDP datagram에 encapsulate해보낸다. Client는자신의 source IP address는모두 0로, destination IP address는모두 1(broadcast) 로채워보낸다. 3) Server는 UDP destination port 68로 broadcast 또는 unicast message를 에게보낸다. 하지만 Unicast로보낼때에는상대방의다른정보를아직모르는상태이므로 ARP를이용하지않는다. 단지들어온 packet의 physical address를그대로이용할뿐이다. 1.3 Relay Agent 각각의 LAN에대해여러 BOOTP 를두는대신여러망을관리하는상위의한 remote BOOTP 를둬야할때, 는 broadcast를하기때문에한 router를지날수없다. 그래서이문제를해결하기위해 relay agent라는 router를이용한다. 즉, relay agent는 의 request에대해대신 remote Server에게서 reply를받고 에게보내준다. 2 DHCP(Dynamic Host Configuration Protocol) BOOTP는동적설정 (dynamic configuration) protocol이아니다. 단지 request에대해미리설정되어있는 table에서 physical address에해당하는 IP address를알려줄뿐이다. 즉, 미리이러한정보를서버가갖고있어야하는데만약 가다른 physical network에연결되어있다면, 서버관리자는이사실을미리알고 table에그컴퓨터의정보를미리입력해야할것이다. 그래서 BOOTP를 DHCP에대응해 static configuration protocol이라부르기도한다. 하지만 DHCP는 BOOTP를개선해사용한다는점을유념해야한다. 결국 Packet의구조도 BOOTP를그대로사용하며, BOOTP 도 DHCP 로부터 IP를얻을수있다. DHCP 는두개의 database를가지고있다. 첫번째 database는 IP와 Physical address를묶어둔것이며, BOOTP 와같은 type이다. 두번째 database는유효한 ( 사용하지않는 ) IP address의집합이다. 이부분이 dynamic을만드는부분으로 가임시 IP address를요청할때, 협상기간동안임시로 assign 하는 IP가있다. 만약 가요청을하면, 서버는먼저 static database를살피고, 있다면영구 IP 를보내주게된다. 반면에 static database에없다면위의유효 IP pool에서하나를 Various Protocol Team ( 조학봉 ) - 5-2002/1/17
골라 에게보내주게되며, 그 IP 는 dynamic database 에 entry 를추가한다. 2.1 Leasing Pool로부터 assign된 address는임시적이다. DHCP 는특정기간동안임대를주고, 그기간이끝나면, 는 IP 사용을멈추거나갱신을요청해야한다. Server는갱신에대한동의권을갖고있으며, 동의를안한다면 는즉시그 address의사용을멈춰야한다. Various Protocol Team ( 조학봉 ) - 6-2002/1/17
2.2 DHCP Operation DHCPDISCOVER passive open UDP 68 UDP 67 DHCPOFFER DHCPREQUEST DHCPACK DHCPREQUEST Before 50 percent of lease time expires DHCPREQUEST If the does not respond, the request is repeated. DHCPNACK If the responds with an ACK, the must start all over again. DHCPACK If the responds with an ACK, the has a new lease. DHCPRELEASE 1) 는 destination port 67로 DHCPDISCOVER message를 broadcast한다. 2) Server들은이 message에대해 DHCPOFFER로서응답을한다. 이메시지에서 IP와 lease duration을제공한다. 기본값은 1시간이다. DHCPOFFER packet을보낸 들은제공한 IP를다른 가사용못하도록잠시 lock을걸어둔다. 만약 가 DHCPOFFER message를못받았다면 2초간격으로재시도를한다. 그리고이런시도도실패하면 는 5분간기다린 Various Protocol Team ( 조학봉 ) - 7-2002/1/17
후재시도를한다. 3) Client는 로부터받은여러 packet에서하나를골라선택된 에 DHCPREQUEST message를보낸다. 4) Server는 DHCPACK message로응답하고 의 IP와 physical address를 mapping시키고 dynamic database에추가한다. 이시점부터 는 lease가끝날때까지이 IP address를사용할수있다. 5) Lease period가 50% 가지날때, 는다른 DHCPREQUEST를보내고갱신을요구한다. 6) 만약 가 DHCPACK로응답하면, 갱신했으므로 lease timer를초기화한다. 그러나만약 DHCPNACK로응답하면, 는즉시 IP 사용을중지하고다른 을찾는다. 7) 만약 가응답을안한다면, lease time이 87.5% 에다다를때다시한번 DHCPREQUEST를보낸다. 만약 lease time이다할때까지도응답이없으면처음 (step 1) 부터다시시작한다. 물론이럴경우 는 DHCPRELEASE를보내고처음과정으로돌아간다. 2.3 Packet Format DHCP packet은 BOOTP packet과거의완벽히호환되며, 단지 BOOTP의 unused 부분앞 (first bit) 에 Flag 1bit만붙는다. 하지만 DHCP만의기능을위해 option field 에부가적인 option이추가됐다. Flag 이필드는 가 로부터 reply를 unicast 또는 broadcast로받 을지선택하는데에사용된다. 만약 unicast로 reply를받는다면, destination field에 의 IP address를채워보내고, 자기가선택한 IP외의 packet은폐기한다. 그러나만약 broadcast라면모든 host가받 고, 그 packet에대한처리를하는만큼 network load가생긴다. Options DHCP option은부가되는 tag field에 53의값이채워져있다. 이 field 는최대 312bytes이다. Tag Length Value 53 1 1 DHCPDISCOVER 2 DHCPOFFER 3 DHCPREQUEST 4 DHCPDECLINE 5 DHCPACK Various Protocol Team ( 조학봉 ) - 8-2002/1/17
6 DHCPNACK 7 DHCPRELEASE (revision 2002-1-10 Hakbong : 문서작성시작 ) Various Protocol Team ( 조학봉 ) - 9-2002/1/17
3 udhcp strongarm board 에서실행하기 1. http://udhcp.busybox.net/ 에서소스 (udhcp-0.9.6.tar.gz) 구해오기 2. 먼저 ramdisk를압축을풀어 /mnt/boot에마운트시킨다. $mkdir /mnt/boot $gzip -d r.gz $mount -o loop r /mnt/boot 3. 위소스압축을푼다. $tar -zxvf udhcp-0.9.6.tar.gz 4. 풀린위치로간다. $cd udhcp-0.9.6 5. Makefile을수정한다. $vi Makefile 아래부분을수정한다. - prefix=/usr ------> prefix=/mnt/boot/usr - SBINDIR=/sbin ----> SBINDIR=/mnt/boot/sbin - #CROSS_COMPILE=arm-uclibc- -> CROSS_COMPILE=arm-tlinux- ( 크로스컴파일주석을풀고설정된것으로바꿈 ) - install: all - - $(INSTALL) $(STRIP) $(DAEMONS) $(USRSBINDIR) - $(INSTALL) $(STRIP) $(COMMANDS) $(USRBINDIR) - ifdef COMBINED_BINARY - ln -sf $(USRSBINDIR)/$(DAEMONS) $(SBINDIR)/$(BOOT_PROGRAMS) - else - $(INSTALL) $(STRIP) $(BOOT_PROGRAMS) $(SBINDIR) 위에서 $(INSTALL) $(STRIP) 를 cp -f로바꾼다. 크로스컴파일러에는 install이라는명령이없다. 그러므로단지컴파일된화일을 copy하는것 Various Protocol Team ( 조학봉 ) - 10-2002/1/17
만으로도충분하다. 6. file type을검사한다. $file udhcpc - udhcpc: ELF 32-bit LSB executable, Advanced RISC Machines ARM, - version 1, dynamically linked (uses shared libs), not stripped 위와같은결과가나오면일단성공이다. 7. 위에서마운트한램디스크이미지를언마운트시킨다. $umount /mnt/boot 8. 램디스크를압축한다. $gzip r 9. minicom을실행하고보드전원을인가한다. $minicom 전원삽입 ~~ 아무키나누른다. 그러면부트로더상태로들어간다. - Welcome. - tbloader-1.0.0-beta3-p1 - Copyright (C) 2001 T&B Tronics. - tbloader comes with ABSOLUTELY NO WARRANTY; Read the GNU - This is free software, and you are welcome to redistribute it - under certain conditions; read the GNU GPL for details. 터 - Autoboot in progress, press any key to stop.. - Autoboot aborted - Type "help" to get a list of commands - tbloader> tbloader> tftp zimage kernel 위명령을실행하면먼저 IP를할당받기위해 bootp를실행해서버로부정보를받아오고, 설정된서버의 tftp 디렉터리에서해당화일 (zimage) 를받아온다. Various Protocol Team ( 조학봉 ) - 11-2002/1/17
- No IP. Bootp start... - Our Ethernet address is 00D0 CAF1 2621. - Sending bootp packet... -. - Bootp Packet received. - Host () Ethernet : 0050 BF2F 32B0 - Host () IP : 210.107.198.177 - Client (target) Ethernet : 00D0 CAF1 2621 - Client (target) IP : 210.107.198.173 - - TFTP Start... - Host () IP : 210.107.198.177 - Client (target) IP : 210.107.198.173 - Loading Filename : zimage - Save Address : 0xC0008000 - - Loading start... - 0x0008A3B0 (566192) bytes received. - tftp done. tbloader> tftp r.gz ramdisk 실행하면위와비슷한메시지가출력된다. tbloader> boot 실행하면방금램에올린이미지가실행이된다. 마지막에아래와같은문장을확인한다. - Starting system logger: syslogd - Bringing up interface lo - Starting portmapper: portmap - Starting INET services: inetd - udhcp (v0.9.6) started - Sending discover... - Sending select for 210.107.198.190... - Lease of 210.107.198.190 obtained, lease time 600 Various Protocol Team ( 조학봉 ) - 12-2002/1/17
- deleting routers - SIOCDELRT: No such process <---- route del default ~ 문제 - adding dns 202.30.0.11 $ 10. 이과정을거치면일단동작여부는확인할수있다. 부가적인설명 (1) 바로위같은문장은단지 udhcpc를실행하면얻어지는것이고부팅시에실행하길원한다면, /etc/rc.d/rc에위명령어를넣어두면된다. (2) dhcpc는 daemon으로돌고있고, 각패킷처리나설정들은 /usr/share/udhcpc의스크립트를통해이뤄진다. 예 ) dhcp request에대한 ack를받으면 default.bound 스크립트를실행해 ifconfig, route 명령들을이용 IP, route 등을설정한다. (3) 이외의 bootp 설정및커널컴파일등은다른곳에서다루겠다. (4) 만약이보드가할당된 IP를받고 daemon이죽었다면, 계속이 IP를사용할수있는가하는문제가생겼다. RFC2131(2.2 page12) 은서버는아이피할당전에 ICMP echo request(ping) 를, 클라이언트는 ARP 를먼저수행해위와같은걱정은없다고한다. (5) 현재는 dhcp 서버도함께컴파일하고있다. tiny version을위해이부분을제거해야할것이다. 이작업을위해서는소스분석이요구된다. 동작테스트 (1) lease time 50% 시점의 DHCPREQUEST 확인 (2) lease 제공서버 daemon 제거시, 87.5% 시점의 DHCPREQUEST 재전송확인 - RFC2131(4.4.5 page40) (3) 위상태에서 lease time expired : 초기상태에서처음 DHCPDISCOVER부터재시작확인. - RFC2131(4.4 page35) : state transition diagram for DHCP s Various Protocol Team ( 조학봉 ) - 13-2002/1/17
state-transition diagram state-transition for DHCP diagram for DHCP INIT/REBOOT INIT/REBOOT Send DHCPREQUEST(C) REBOOTING REBOOTING DHCPNAK(S) / Restart DHCPNAK(S) / Discard offer INIT INIT Send DHCPDISCOVER(C) SELECTING SELECTING receive DHCPOFFER(S) DHCPNAK(S)/ Halt network DHCPACK(S) / Send DHCPDECLINE(C) DHCPACK/ Record lease, set timers REQUESTING REQUESTING select DHCPOFFER(C) DHCPNAK, Lease expired / Halt network DHCPOFFER / Discard send DHCPREQUEST(C) REBINDING REBINDING DHCPOFFER, DHCPACK, DHCPNAK/ Discard DHCPACK(S) / Record lease, set Timers T1, T2 BOUND BOUND T1 expires/ Send DHCPREQUEST(S) to leasing DHCPACK(S) / Record lease, set Timers T1, T2 DHCPACK(S) / Record lease, set timers T1, T2 T2 expires/ Broadcast DHCPREQUEST (C) RENEWING RENEWING (revision 2002-1-14 Hakbong : 실제동작테스트추가 ) Various Protocol Team ( 조학봉 ) - 14-2002/1/17