1 / 16

µ IP TCP/IP Stack

µ IP TCP/IP Stack. 2003.11.1 이재홍 pyrasis 에 chol.com. uIP 0.9 ?. uIP 0.9 공식 홈페이지 http://www.dunkels.com/adam/uip/ 공개 TCP/IP 스택으로 Swedish Institute of Computer Science 의 Adam Dunkels 이라는 사람이 제작. 1. 목적. 공개 TCP/IP 스택을 실시간 운영체제 , 소형 임베디드 시스템에 활용하여 TCP/IP 통신의 구현

africa
Download Presentation

µ IP TCP/IP Stack

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. µIP TCP/IP Stack 2003.11.1 이재홍 pyrasis 에 chol.com

  2. uIP 0.9 ? • uIP 0.9 공식 홈페이지 http://www.dunkels.com/adam/uip/ • 공개 TCP/IP 스택으로 Swedish Institute of Computer Science 의 Adam Dunkels이라는 사람이 제작

  3. 1. 목적 • 공개 TCP/IP스택을 실시간 운영체제, 소형 임베디드 시스템에 활용하여 TCP/IP 통신의 구현 • uIP를 이해하기 위해서는 먼저 예제의 이해가 필수적이다. • 예제프로그램을 통한 uIP의 작동방식과 흐름을 이해한다.

  4. 2. uIP 0.9의 디렉토리 구성 uip-0.9 apps : uIP TCP/IP 스택을 사용한 응용프로그램들 httpd resolv smtp telnet telnetd webclient doc : uIP의 문서들 html uip : TCP/IP 스택 소스 unix : Unix, Linux에서 실행 가능한 예제 프로그램

  5. 3. uIP 0.9의 파일 uip/ uip_arp.h uip_arp.c : ARP 프로토콜 처리 부분 uip_arch.h : 아키텍쳐 의존적 부분 설정 헤더파일 uip.h uip.c : uip의 소스코드 slipdev.h slipdev.c : slip 드라이버 소스코드 unix/ main.c : 예제 프로그램 메인 tapdev.c : Tun/Tap 디바이스 드라이버 소스코드 tapdev.h uip_arch.c : 아키텍쳐 의존적인 부분 uipopt.h : 변수 타입, IP설정, 각종 설정 부분

  6. 4. 발표 내용 • 예제 프로그램 분석 : 예제의 동작을 보면서 uIP의 소스를 분석한다. • 리눅스에서 예제를 컴파일 해서 동작시켜본다.

  7. 5. 준비과정 • 예제를 동작시키기 위해서 커널 컴파일에서 아래의 옵션을 체크하고 커널을 다시 컴파일 한다. 리눅스 커널 옵션 Network device support ---> <M> Universal TUN/TAP device driver support • 다음 명령을 입력하여 장치를 생성한다. # mkdir /dev/net # mknod /dev/net/tun c 10 200

  8. 6. 예제 프로그램 컴파일 및 실행 uip/unix 디렉토리에서 make로 컴파일하고 실행. # make # ./uip 다른 터미널에서 ifconfig를 실행해서 tap0 장치가 만들어졌는지 확인 웹 브라우저로 http://192.168.0.2 로 접속 예제 웹 서버에 접속할 수 있다.

  9. 7. 로컬 네트워크 에서의 ARP 통신의 과정 MAC 01:02:03:04:05:06 IP 192.168.0.10 컴퓨터 1 IP 192.168.0.5 나의 MAC 주소는 0A:06:07:04:02:F6 ARP Reply IP 192.168.0.5의 MAC 주소는? ARP Request Broadcast 라우터 1 MAC 67:89:AB:CD:EF:00 IP 192.168.0.254 게이트웨이 컴퓨터 A 컴퓨터 1과 2의 통신 컴퓨터 2 라우터 2 MAC 0A:06:07:04:02:F6 IP 192.168.0.5 컴퓨터 B

  10. 8. 일반 네트워크 에서의 ARP 통신의 과정 MAC 01:02:03:04:05:06 IP 192.168.0.10 컴퓨터 1과 B의 통신 컴퓨터 1 게이트웨이 IP 192.168.0.254 나의 MAC 주소는 0A:06:07:04:02:F6 ARP Reply 서로 ARP통신을 주고 받아 MAC 주소를 알고 있다. 라우터 1 MAC 67:89:AB:CD:EF:00 IP 192.168.0.254 게이트웨이 MAC 4F:2C:F6:33:E2:04 IP 211.200.21.254 게이트웨이 컴퓨터 A 컴퓨터B IP 211.200.21.10은 로컬 네트워크가 아니네? 게이트웨이 IP 192.168.0.254의 MAC 주소는? ARP Request Broadcast 라우터 2 컴퓨터 B IP 211.200.21.43 나의 MAC 주소는 17:36:9F:32:90:43 ARP Reply IP 211.200.21.10의 MAC 주소는? ARP Request Broadcast 컴퓨터 B ARP 통신이 끝난 뒤에는 끝과 끝의 MAC주소를 알 수 있게 된다. 최초 발신지 MAC주소는 계속 가지고 간다. 라우터 등을 지날 때는 목적지 MAC주소가 변한다. MAC 17:36:9F:32:90:43 IP 211.200.21.10

  11. 9. ARP 통신 이후. • ARP통신 이후에는 각 컴퓨터와 라우터들의 ARP테이블에 MAC주소가 저장되게 된다. • 한번 ARP통신을 이루었으므로 ARP테이블에 지금까지 통신했던 모든 것들이 저장되어 있기 때문에. 다시 ARP통신을 하지 않고 바로 MAC주소를 바꿔서 보낼 수가 있는 것이다. • 이후. TCP, ICMP, UDP통신을 하면 라우터에 의해서 이더넷 헤더의 목적지 MAC주소가 바뀌게 된다. 최초 발신지 MAC주소는 계속 가지고 있다. • 우리가 외부에서 통신한 패킷들은 라우터에서 나온 패킷들이다. 패킷들을 조사해보면 모두 라우터(게이트웨이)와 통신한 것들이다.

  12. 10. 예제 프로그램 소스 분석, 초기화 main() tapdev_init() : 네트웍 드라이버 초기화 tap0 네트웍 장치에 192.168.0.1의 IP 설정 uip_init() : uip 초기화 uip_hostaddr에 192.168.0.2의 IP 설정 httpd_init() : http 서버 초기화 fs_init()으로 파일 시스템 초기화 uip_listen(HTONS(80));으로 80번 포트 listen 상태로 만듦

  13. 11. 예제 프로그램 소스 분석, 송신 while(1) { }로 무한 루프, 폴링 방식 송신 uip_len = tapdev_read(); 받은 패킷의 길이를 리턴 for(i = 0; i < UIP_UDP_CONNS; i++) { uip_periodic(i); 패킷의 길이가 0이면 TCP연결 처리 루틴을 10번 수행한다. uip_arp_out(); ARP패킷을 생성한다. tapdev_send(); 패킷을 보낸다. }

  14. 12. 예제 프로그램 소스 분석, 수신 수신 if(BUF->type == htons(UIP_ETHTYPE_IP)) { uip_arp_ipin(); uip_input(); 패킷의 타입이 IP이면 uip_arp_ipin()함수로 IP프로토콜을 ARP처리한다. uip_input()으로 패킷을 받는다. else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { uip_arp_arpin(); 패킷의 타입이 ARP이면 uip_arp_arpin()으로 ARP프로토콜을 ARP처리한다.

  15. 13. httpd 웹서버의 동작 과정 송수신 루틴 uip_arp_arpin(); uip_arp_ipin(); uip_arp_out(); uip_input(); tapdev_read(); tapdev_send(); 초기화 tapdev_init(); uip_init(); httpd_init(); #define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ uip_process(UIP_TIMER); } while (0) #define UIP_APPCALL httpd_appcall TCP/IP 처리 루틴 uip_periodic(); -> uip_process(); uip_process(); -> UIP_APPCALL(); UIP_APPCALL(); -> httpd_appcall(); httpd_appcall을 UIP_APPCALL로 정의했다. 이것은 httpd.h에 정의 되어 있다. httpd가 아닌 다른 어플리케이션을 연결 하고 싶다면 telnet_app등을 UIP_APPCALL로 정의한다. 범용적인 스택이 아니기 때문에 리눅스등의 스택과는 다르게 많이 축소된 모습을 볼 수가 있다. 이렇게 매우 축소 되어 있기 때문에 할 수 있는 일이 제한적이다.

  16. 14. uC/OS-II에 포팅 • 타겟 시스템 : PC+랜카드, 임베디드 개발 보드+이더넷 칩, 기타 시스템+이더넷 칩 1. uC/OS-II에 포팅하기 위해 필요한 것들. 2. 가장 먼저 해야 할 일. • 포팅 하려고 하는 시스템의 이더넷 카드 혹은 이더넷 칩의 드라이버 구현. 3. 주요 작업 • 사용 하고자 하는 Application을 정하고 거기에 맞추어 uIP를 수정하고 이더넷 드라이버 부분과 uIP부분을 결합. Application + uIP TCP/IP Stack + Ethernet Device Driver

More Related