PracticalSocketC_2nd_1장과 9장

Download Report

Transcript PracticalSocketC_2nd_1장과 9장

얇지만 얇지 않은
TCP/IP 소켓 프로그래밍 C 2판
(TCP/IP Sockets in C 2/e, Morgan Kaufmann)
마이클 도나후(Michael J. Donahoo)
케네스 칼버트(Kenneth L. Calvert)
Chapter 01 Introduction
제 1장 서론
•
•
•
•
•
1.1
1.2
1.3
1.4
1.5
네트워크, 패킷 그리고 프로토콜
주소에 대하여
(도메인)네임 주소에 대하여
클라이언트와 서버
소켓이란 무엇인가?
2
컴퓨터 통신
• 컴퓨터들은 어떻게 서로 통신하는가?
– 어떻게
• 논리적 : 상호 프로토콜을 이용하여 통신한다
– 프로토콜은 계층적으로 구성
– 각 계층은 독립된 기능을 담당
• 물리적 : 직접 혹은 간접(라우터를 통한 릴레이)로 통신
– 무엇을
• 패킷을 주고 받으며 통신
• 컴퓨터들을 상호 연결하는 프로토콜은?
– Internet Protocol (IP)
– 송신자, 수신자, 라우터가 이해하며 원하는 목적지로 패킷을 전
달
3
인터넷 프로토콜(Internet Protocol: IP)
• 특징
– 데이터 그램 (패킷) 프로토콜
• 조각난 작은 단위(패킷) 통신
– 최선 전달(Best-effort) service로 안정적이지 못함
•
•
•
•
•
전달
손실
패킷
복제
지연
유무 및 성능을 보장하지 않음
가능
순서 유지 하지 않음
가능
가능
• 호스트 – 호스트 전송
– 응용 프로그램 간의 전송이 아님
– 응용 프로그램이 구분하기 위해서는 또 다른 프로토콜이 필요
• ex) TCP or UDP
4
인터넷 프로토콜(Internet Protocol : IP)의 종류
• IPv4
– 인터넷 생성 시점부터 지금까지 사용
– 32bit의 주소길이를 가짐
• 232개의 주소를 가짐(가용한 주소는 2009년 말 현재 10%)
– 현 인터넷 전달 프로토콜로 프로토콜의 특성상 많은 제약을 가짐
• 이동성, 보안, 라우팅 효율성 등
• IPv6
– 포화된 IPv4주소와 라우팅 효율을 높이기 위해 1990년대 초반
표준화
– 128bit의 주소길이로 2128의 주소를 가짐
– 현재 적은 사용자를 가지지만 근장기적으로 IPv4를 대체할 유일
한 프로토콜
– 주소공간 및 할당, 이동성, 보안, 라우팅 효율 등 기능 강화
5
IPv4 주소
• 인터넷에 연결하기 위한 32-bit 주소 공간
• 표기법
– Dotted-quad (192.118.56.25)
• 편의상 도메인 네임과 결합하여 사용
– www.mkp.com -> 167.208.101.28
• IP는 호스트의 네트워크 인터페이스를 구분하지 호스트를
구분하지 않는다
– 하나의 호스트는 여러 개의 IP를 가질 수 있음!
192.18.22.13
209.134.16.123
6
IPv6 주소
• 인터넷에 연결하기 위한 128-bit 주소 공간
• 표기법
– 16진수 표기법(2000:fdb8:0000:0000:0001:00ab:835c:39a1)
– 축약 가능(2000:fdb8::1:00ab:853c:39a1)
• 편의상 도메인 네임과 결합하여 사용
– www.mkp.com -> 2000:fdb8::1:00ab:853c:39a1
• 듀얼 스택(Dual Stack) 시스템
– 현재 인터넷의 대부분 시스템은 IPv4를 지원하기 때문에 IPv6시
스템은 IPv4 프로토콜도 동시에 탑재하고 있음
7
특수한 IP 주소들
• 루프백(loopback) 주소
– 실제 네트워크 인터페이스가 아닌 가상 루프백 인터페이스로 패
킷을 전달 할 수 있는 주소
– localhost 네임이 매핑되어 있으며 인터넷으로 전달되지 않고 시
스템 내부에서 패킷이 루프(loop)된다
– 127.0.0.1(IPv4), 0:0:0:0:0:0:0:1(IPv6)
• 사설(Private) 주소
– 인터넷 연결이 아닌 사설 네트워크에서만 사용하는 주소
• 주소 부족의 경우, 인터넷 연결을 위해 NAT를 사용할 수 있다
– 192.168.XX(IPv4), IPv6는 사설 주소가 없음
• 멀티캐스트 주소
– 불특정 다수에게 전송
– 224~239.X.X.X(IPv4), FF~:(IPv6)
8
전송 프로토콜(Transport Protocols)
• 최선전달 프로토콜의 단점들
– 손실, 패킷 순서 비유지, 복제, 지연 문제들
– IP 위에 최선전달 기능을 보상하는 프로토콜을 탑재하는 방식으
로 운영
• TCP vs UDP
– User Datagram Protocol(UDP)
• 최선 전달 기능, 체크섬(Data checksum)의 단순한 기능만 제공
– Transmission Control Protocol(TCP)
• 체크섬 기능
• 안정된 바이트 스트림 전송
• 흐름제어 및 혼잡 제어기능
9
전송 프로토콜의 주소 : Port
• Port는 최종 목적지를 구분
– IP는 호스트를 구분
– 호스트는 하나 이상의 응용 프로그램이 탑재 가능 따라서 IP로
응용 프로그램의 구분이 불가능
– TCP혹은 UDP의 포트는 개별 응용 프로그램을 구분(종단간)
– IP가 대표 번호라면 Port는 내선번호와 유사
• 결국 인터넷 종단간 응용 프로그램을 구분하기 위해서는
– IP와 Port의 쌍(Pair)정보가 필요
Application
Port
80
WWW
25
E-mail
23
Telnet
192.18.22.13
10
얇지만 얇지 않은
TCP/IP 소켓 프로그래밍 C 2판
(TCP/IP Sockets in C 2/e, Morgan Kaufmann)
마이클 도나후(Michael J. Donahoo)
케네스 칼버트(Kenneth L. Calvert)
Chapter 09 Appendix
제 9장 부록: 개발환경 구축
• 9.1 유닉스 개발환경
• 9.2 윈도우 개발환경
12
Unix 기반 개발 환경 설정
• 유닉스 기반
– $ gcc <컴파일 옵션> -o <실행파일> <소스파일들> - lsocket - lnsl
• 리눅스 기반
– $ gcc <컴파일 옵션> -o <실행파일> <소스파일들>
13
Windows 기반 개발 환경 설정 #1
•
•
www.cygwin.com에 접속
하단의 [Install or update now]를 클릭하여 인스톨 프로그램을 다운로드
14
Windows 기반 개발 환경 설정 #2
•
인스톨 파일을 실행
15
Windows 기반 개발 환경 설정 #3
•
cygwin 인스톨 경로 및 다운로드 경로 설정
16
Windows 기반 개발 환경 설정 #4
•
다운로드 방법 및 Source 설정
17
Windows 기반 개발 환경 설정 #5
•
개발 패키지 설정
18
Windows 기반 개발 환경 설정 #6
•
다운로드 및 설치 진행
19
Windows 기반 개발 환경 설정 #7
•
IPv6 Extension 설치
–
–
Cygwin은 현재(2009년 8월) 공식적으로 IPv6를 미지원
http://win6.jp/Cygwin/index.html에 접속하여 cygwin-1.5.25-15-ipv6-0.23.zip을 다운로
드하여 IPv6 Extesion 설치
20
Windows 기반 개발 환경 설정 #8
•
IPv6 extension 라이브러리 복사
1.
2.
cygwin-1.5.25-15-ipv6-0.23.zip를 풀면 나오는 bin, lib, usr 디렉터리를 cygwin의 ‘/’ 디
렉터리(c:\cygwin)에 덮어씌움
c:\cygwin\bin\cygwin1.dll을 삭제하고 c:\cygwin\bin\new-cygwin1.dll을
cygwin1.dll로 이름을 바꿈
21
Windows 기반 개발 환경 설정 #9
•
바탕화면의 cygwin바로가기를 클릭하여 cygwin 콘솔로 로그인
–
로그인시 windows로그인 계정과 동일한 계정으로 cygwin에 로그인됨
• windwos에 user로 로그인시 cygwin도 user로 로그인
• cygwin내부의 user의 홈 디렉토리는 /home/user이며 이는 windows파일 시스템의
cygwin설치 디렉토리\home\user와 동일함
22
Windows 기반 개발 환경 설정 #10
•
컴파일 및 실행 테스트
–
–
홈페이지(http://www.bjpublic.co.kr/)에서 첫 예제 샘플코드를 다운로드하여 홈 디렉토리
에 풀음
cygwin콘솔에서 ‘ls’하여 파일 존재 확인
23
Windows 기반 개발 환경 설정 #10
•
•
리눅스와 동일한 방법으로 컴파일
실행파일 생성 확인
24