Presentation is loading. Please wait.

Presentation is loading. Please wait.

윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

Similar presentations


Presentation on theme: "윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판"— Presentation transcript:

1 윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Chapter 03. 주소체계와 데이터 정렬

2 Chapter 03-1. 소켓에 할당되는 IP주소와 PORT번호
윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

3 인터넷 주소(Internet Address)
인터넷 주소란? 인터넷상에서 컴퓨터를 구분하는 목적으로 사용되는 주소. 4바이트 주소체계인 IPv4와 16바이트 주소체계인 IPv6가 존재한다. 소켓을 생성할 때 기본적인 프로토콜을 지정해야 한다. 네트워크 주소와 호스트 주소로 나뉜다. 네트워크 주소를 이용해서 네트워크를 찾고, 호스트 주 소를 이용해서 호스트를 구분한다. 인터넷 주소의 역할 IPv4 인터넷 주소의 체계

4 클래스 별 네트워크 주소와 호스트 주소의 경계 달리 말하면...
때문에 첫 번째 바이트 정보만 참조해도 IP주소의 클래스 구분이 가능하며, 이로 인해서 네트워크 주소와 호스트 주소의 경계 구분이 가능하다.

5 소켓의 구분에 활용되는 PORT번호 PORT번호 PORT번호에 의한 소켓의 구분과정
IP는 컴퓨터를 구분하는 용도로 사용되며, PORT번호는 소켓을 구분하는 용도로 사용된다. 하나의 프로그램 내에서는 둘 이상의 소켓이 존재할 수 있으므로, 둘 이상의 PORT가 하나 의 프로그램에 의해 할당될 수 있다. PORT번호는 16비트로 표현, 따라서 그 값은 0 이상 이하 0~1023은 잘 알려진 PORT(Well-known PORT)라 해서 이미 용도가 결정되어 있다. PORT번호에 의한 소켓의 구분과정

6 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Chapter 주소정보의 표현 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

7 IP주소와 PORT번호는 구조체 sockaddr_in의
IPv4 기반의 주소표현을 위한 구조체 IP주소와 PORT번호는 구조체 sockaddr_in의 변수에 담아서 표현한다. 주소체계 PORT번호 32비트 IP주소 사용되지 않음 32비트 IPv4 인터넷 주소

8 구조체 sockaddr_in의 멤버에 대한 분석
멤버 sin_family 주소체계 정보 저장 멤버 sin_port 16비트 PORT번호 저장 네트워크 바이트 순서로 저장 멤버 sin_addr 32비트 IP주소정보 저장 멤버 sin_addr의 구조체 자료형 in_addr 사실상 32비트 정수자료형 멤버 sin_zero 특별한 의미를 지니지 않는 멤버 반드시 0으로 채워야 한다. 0으로 채워야 하는 멤버 sin_zero의 존재 이유를 이해할 필요가 있다!

9 구조체 sockaddr_in의 활용의 예 구조체 변수 sockaddr_in은 bind 함수의 인자로 전달되는데, 매개변수 형이 sockaddr이므로 형 변환을 해야만 한다. 구조체 sockaddr은 다양한 주소체계의 주소정보를 담을 수 있도록 정의되었다. 그래서 IPv4의 주소정보를 담기가 불편하다. 이에 동일한 바이트 열을 구성하는 구조체 sockaddr_in이 정의되었으며, 이를 이용해서 쉽게 IPv4의 주소정보를 담을 수 있다.

10 Chapter 03-3. 네트워크 바이트 순서와 인터넷 주소 변환
윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

11 CPU에 따라 달라지는 정수의 표현 정수 1을 저장하는 두 가지 방법 : CPU가 적용하는....

12 바이트 순서(Order)와 네트워크 바이트 순서
데이터 송수신 과정에서의 문제 빅 엔디안(Big Endian) 상위 바이트의 값을 작은 번지수에 저장 리틀 엔디안(Little Endian) 상위 바이트의 값을 큰 번지수에 저장 호스트 바이트 순서 CPU별 데이터 저장방식을 의미함 네트워크 바이트 순서 통일된 데이터 송수신 기준을 의미함 빅 엔디안이 기준이다! 빅 엔디안 모델 리틀 엔디안 모델

13 바이트 순서의 변환 바이트 변환함수 htons에서 h는 호스트(host) 바이트 순서를 의미
n은 네트워크(network) 바이트 순서를 의미 s는 자료형 short를 의미  htonl에서 l은 자료형 long을 의미 이 기준을 적용하면 위 함수가 의미하는 바를 이해할 수 있다.

14 바이트 변환의 예 실행결과

15 Chapter 03-4. 인터넷 주소의 초기화와 할당
윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

16 문자열 정보를 네트워크 바이트 순서의 정수로 변환
“ ”와 같이 점이찍힌 10진수로 표현된 문자열을 전달하면, 해당 문자열 정보를 참조해서 IP주소정보를 32비트 정수형으로 반환! 실행결과

17 inet_aton 기능상으로 inet_addr 함수와 동일하다. 다만 in_addr형 구조체 변수에 변환의 결과가 저장된다는 점에서 차이를 보인다. 실행결과

18 inet_ntoa inet_aton 함수의 반대기능 제공! 네트워크 바이트 순서로 정렬된 정수형 IP주소정보를 우리가 눈으로 쉽게 인식할 수 있는 문자열의 형태로 변환. 실행결과

19 인터넷 주소의 초기화 “IP 211.217.168.13, PORT 9190으로 들어오는 데이터는 내게로 다 보내라!”
일반적인 인터넷 주소의 초기화 과정 서버에서 주소정보를 설정하는 이유! “IP , PORT 9190으로 들어오는 데이터는 내게로 다 보내라!” 클라이언트에서 주소정보를 설정하는 이유! “IP , PORT 9190으로 연결을 해라!”

20 INADDR_ANY 현재 실행중인 컴퓨터의 IP를 소켓에 부여할때 사용되는 것이 INADDR_ANY이다. 이는 서버 프로그램의 구현에 주로 사용된다.

21 Chapter 01의 예제 실행방식의 고찰 ./hserver 9190 ./hclient 127.0.0.1 9190
서버의 실행방식, 서버의 리스닝 소켓 주소는 INADDR_ANY로 지정을 하니, 소켓의 PORT번호만 인자를 통해 전달하면 된다. ./hserver 9190 ./hclient 클라이언트의 실행방식, 연결할 서버의 IP와 PORT번호를 인자로 전달한다. 은 루프백 주소라 하며, 이는 클라이언트를 실행하는 컴퓨터의 IP주소를 의미한다. 루프백 주소를 전달한 이유는, 서버와 클라이언트를 한 대의 컴퓨터에서 실행시켰기 때문이다.

22 소켓에 인터넷 주소 할당하기 서버프로그램에서의 일반적인 주소할당의 과정!

23 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
Chapter 윈도우 기반으로 구현하기 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판

24 함수 htons, htonl의 윈도우 기반 사용 예
실행결과

25 함수 inet_addr, inet_ntoa의 윈도우 기반 사용 예
실행결과

26 윈도우에서의 소켓 주소할당 리눅스에서의 소켓 주소할당과 차이가 없다.

27 WSAStringToAddress 주소정보를 나타내는 문자열을 가지고, 주소정보 구조체 변수를 적절히 채워 넣을 때 호출하는 함수 IPv6 기반에서도 사용이 가능! 단, 이 함수를 사용하면, 윈도우에 의존적인 코드가 구성 됨

28 WSAAddressToString WSAStringToAddress 함수와 반대의 기능을 제공

29 WSAStringToAddress & WSAAddressToString 의 사용 예
실행결과

30 Chapter 03이 끝났습니다. 질문 있으신지요?


Download ppt "윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판"

Similar presentations


Ads by Google