Download presentation
Presentation is loading. Please wait.
1
µIP TCP/IP Stack 이재홍 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
8
6. 예제 프로그램 컴파일 및 실행 uip/unix 디렉토리에서 make로 컴파일하고 실행. # make # ./uip
다른 터미널에서 ifconfig를 실행해서 tap0 장치가 만들어졌는지 확인 웹 브라우저로 로 접속 예제 웹 서버에 접속할 수 있다.
9
7. 로컬 네트워크 에서의 ARP 통신의 과정 컴퓨터 1 라우터 1 컴퓨터 A 컴퓨터 2 라우터 2 컴퓨터 B
MAC 01:02:03:04:05:06 IP 컴퓨터 1 IP 나의 MAC 주소는 0A:06:07:04:02:F6 ARP Reply IP 의 MAC 주소는? ARP Request Broadcast 라우터 1 MAC 67:89:AB:CD:EF:00 IP 게이트웨이 컴퓨터 A 컴퓨터 1과 2의 통신 컴퓨터 2 라우터 2 MAC 0A:06:07:04:02:F6 IP 컴퓨터 B
10
라우터 등을 지날 때는 목적지 MAC주소가 변한다.
8. 일반 네트워크 에서의 ARP 통신의 과정 MAC 01:02:03:04:05:06 IP 컴퓨터 1과 B의 통신 컴퓨터 1 게이트웨이 IP 나의 MAC 주소는 0A:06:07:04:02:F6 ARP Reply 서로 ARP통신을 주고 받아 MAC 주소를 알고 있다. 라우터 1 MAC 67:89:AB:CD:EF:00 IP 게이트웨이 MAC 4F:2C:F6:33:E2:04 IP 게이트웨이 컴퓨터 A 컴퓨터B IP 은 로컬 네트워크가 아니네? 게이트웨이 IP 의 MAC 주소는? ARP Request Broadcast 라우터 2 컴퓨터 B IP 나의 MAC 주소는 17:36:9F:32:90:43 ARP Reply IP 의 MAC 주소는? ARP Request Broadcast 컴퓨터 B ARP 통신이 끝난 뒤에는 끝과 끝의 MAC주소를 알 수 있게 된다. 최초 발신지 MAC주소는 계속 가지고 간다. 라우터 등을 지날 때는 목적지 MAC주소가 변한다. MAC 17:36:9F:32:90:43 IP
11
9. ARP 통신 이후. ARP통신 이후에는 각 컴퓨터와 라우터들의 ARP테이블에 MAC주소가 저장되게 된다.
이후. TCP, ICMP, UDP통신을 하면 라우터에 의해서 이더넷 헤더의 목적지 MAC주소가 바뀌게 된다. 최초 발신지 MAC주소는 계속 가지고 있다. 우리가 외부에서 통신한 패킷들은 라우터에서 나온 패킷들이다. 패킷들을 조사해보면 모두 라우터(게이트웨이)와 통신한 것들이다.
12
10. 예제 프로그램 소스 분석, 초기화 main() tapdev_init() : 네트웍 드라이버 초기화 tap0 네트웍 장치에 의 IP 설정 uip_init() : uip 초기화 uip_hostaddr에 의 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(); tapdev_init();
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
1. uC/OS-II에 포팅하기 위해 필요한 것들.
타겟 시스템 : PC+랜카드, 임베디드 개발 보드+이더넷 칩, 기타 시스템+이더넷 칩 2. 가장 먼저 해야 할 일. 포팅 하려고 하는 시스템의 이더넷 카드 혹은 이더넷 칩의 드라이버 구현. 3. 주요 작업 사용 하고자 하는 Application을 정하고 거기에 맞추어 uIP를 수정하고 이더넷 드라이버 부분과 uIP부분을 결합. Application + uIP TCP/IP Stack + Ethernet Device Driver
Similar presentations