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

Slides:



Advertisements
Similar presentations
을지대학교 무선 네트워크 사용 방법 2010 년 06 월 01 일. 을지대학교 무선 네트워크 사용 방법 1. PC 무선랜 카드 활성화 및 체크 1 단계 : 시작 -> 설정 -> 네트워크 설정 2 단계 : 무선 네트워크 설정 선택 -> 마우스 버튼 오른쪽 클릭 -> 사용.
Advertisements

Data Communication/Computer Network 관련 교과목의 내용
HTTPS Packet Capture Tutorial
컴퓨터와 인터넷.
컴퓨터 운영체제의 역사 손용범.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Network Lab. Young-Chul Hwang
Cross Compiler를이용한 커널 컴파일 및 포팅
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
PHP입문 Izayoi 김조흔.
제 7장 정적 라우팅 프로토콜.
웹 서버 동작 HTTP 클라이언트가 서버와 대화하는 방법과 데이터를 서버에서 클라이언트로 전송 하는 방법을 정의한 프로토콜
18장. 방화벽 컴퓨터를 만들자.
Ch. 1 LINUX SYSTEM.
TCP/IP Network Experimental Programming [패킷 모니터링 실험]
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
ARP의 실험 발표자 : 이직수
9장 데이터 링크층 개요 (Introduction To Data-Link Layer)
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
11 장 LAN 기본 개념과 Ethernet LAN
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Chapter 21 Network Layer: ARP, ICMP (IGMP).
Chapter 06. UDP 서버/클라이언트.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
Cross Compiler 설치.
4. LAN의 배선체계 (3장. LAN: Local Area Network)
Chapter 19 솔라리스 네트워크 관리 Solaris1 . TCP/IP 개요
Cross Compiler를이용한 커널 컴파일 및 포팅
WOL(Wake-On Lan) 컴퓨터공학과 4학년 박기웅.
Slice&link.
시스템 인터페이스 Lab3 Unix 사용법 실습.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
2015 운영체제 특강 수업 소개 Special Topics on Operating Systems
Device Driver 임베디드 시스템 I.
2장. 인터넷의 개념과 주소.
설치 환경 □ 운영체제 버전 : CentOS Linux 7.2 □ 리눅스 커널 버전 :
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
제 15 장 BOOTP와 DHCP BOOTP 15.2 동적 호스트 설정 프로토콜.
임베디드 시스템 개론 임베디드 타겟 보드 포팅 및 H/W 제어 3일차 강의 자료 Embedded System Lab.
Xscale Educational Kit
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
네트워크 프로토콜.
TCP/IP 인터네트워킹 INTERNETWORKING with TCP/IP <vol
Network 네트워크 이론 및 실습 TCP / IP 4장.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Packet sniffing 응용 레벨이 아닌 네트워크 디바이스 레벨에서의 데이타을 얻는 것 네트워크 상의 트래픽을 분석
Voice and Videoconferencing
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
Kernel, Ramdisk, JFFS2 Porting
웹(WWW).
IP-255S 설치 교육자료 101/102에 대한 설명을 시작 하겠습니다.
뇌를 자극하는 Solaris bible.
DK-128 개발환경 설정 아이티즌 기술연구소
LAN의 구성요소 학습내용 서버 클라이언트 NIC(Network Interface Card) 전송매체
라우터의 이해 (보충자료) TCP/IP구성 Ping명령어를 이용한 연결검사 비트와 바이트 10진수/2진수/16진수
Introduction to JSP & Servlet
Chapter 04. TCP 서버/클라이언트.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Part 05 TCP/IP 1. 네트워크 2. 포트번호.
Wake On Lan 발표자: 김 홍 기 김홍기 조성오
Network Lab. Young-Chul Hwang
CHAP 15. 데이터 스토리지.
JAVA 프로그래밍 16장 JNLP.
ARP.
Presentation transcript:

µ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 통신의 구현 uIP를 이해하기 위해서는 먼저 예제의 이해가 필수적이다. 예제프로그램을 통한 uIP의 작동방식과 흐름을 이해한다.

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에서 실행 가능한 예제 프로그램

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설정, 각종 설정 부분

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

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

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

7. 로컬 네트워크 에서의 ARP 통신의 과정 컴퓨터 1 라우터 1 컴퓨터 A 컴퓨터 2 라우터 2 컴퓨터 B 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

라우터 등을 지날 때는 목적지 MAC주소가 변한다. 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

9. ARP 통신 이후. ARP통신 이후에는 각 컴퓨터와 라우터들의 ARP테이블에 MAC주소가 저장되게 된다. 이후. TCP, ICMP, UDP통신을 하면 라우터에 의해서 이더넷 헤더의 목적지 MAC주소가 바뀌게 된다. 최초 발신지 MAC주소는 계속 가지고 있다. 우리가 외부에서 통신한 패킷들은 라우터에서 나온 패킷들이다. 패킷들을 조사해보면 모두 라우터(게이트웨이)와 통신한 것들이다.

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 상태로 만듦

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(); 패킷을 보낸다. }

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처리한다.

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로 정의한다. 범용적인 스택이 아니기 때문에 리눅스등의 스택과는 다르게 많이 축소된 모습을 볼 수가 있다. 이렇게 매우 축소 되어 있기 때문에 할 수 있는 일이 제한적이다.

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