- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[TCP/IP] TCP/IP 프로트콜 구조 본문
TCP/IP 프로트콜 구조
- 종단 시스템(end-system)
: 최종 사용자를 위한 application을 수행하는 주체
인터넷에 연결된 PC, 워크스테이션, PDA,휴대폰 등이 이에 속함
- 라우터(router)
: 종단 시스템이 속한 네트워크와 다른 네트워크를 연결함으로써 서로 다른 네트워크에 속한
종단 시스템끼리 상호 데이터를 교환할 수 있도록 하는 장비다.
종단 시스템과 종단 시스템간 통신을 수행하기 위해서는 정재힌 절차와 방법이 필요하다. 이를 프로토콜(protocol)이라 한다.
가장 핵심적으로 사용되는 프로토콜로는 TCP와 IP가 있으며 이를 총칭하여 TCI/IP 프로토콜이라고 부른다.
일반적으로 프로토콜은 기능별로 나누어 계층적으로 구현하며, TCP/IP 프로토콜도 이와 같은 구조를 따른다.
각 계층별 기능을 요약하면 다음과 같다
애플리케이션 계층 |
전송 계층 |
인터넷 계층 |
네트워크 액세스 계층 |
애플리케이션 계층 => TELNET, FTP, HTTP, SMTP, MIME, SNMP 등..
전송 계층을 기반으로 한 다수의 프로토콜(TELNET, FTP, HTTP, SMTP, MIME, SNMP 등..)과
이 프로토콜을 이용하는 애플리케이션을 포괄한다.
전송 계층 => TCP, UDP
최종적인 통신 목적지를 지정하고, 오류없이 데이터를 전송하는 역할
통신의 최종 목적지는 컴퓨터가 아닌 해당 컴퓨터에서 실행되고 있는 프로그램(프로세스)이기 때문에
해당프로세스를 지정하는 일정의 주소, 즉 포트번호(port number)를 이용한다.
TCP/IP 프로토콜에서 전송 계층에 해당하는 프로토콜로
TCP(Transmission Control Protocol)와 UDP(User Datagram
Protocol)이 있다. 이 두 프로토콜의 특징은 다음과 같다.
TCP | UDP |
연결행(connection-oriented) 프로토콜 - 연결이 성공해야 통신 가능 |
비연결형(connectionless) 프로토콜 - 연결 없이 통신 가능 |
데이터 경계를 구분하지 않음 - 바이트 스트림(byte-system) 서비스 |
데이터 경계를 구분함 - 데이터그램(datafram) 서비스 |
신회성 있는 데이터 전송 - 데이터를 재전송함 |
비신뢰적인 데이터 전송 - 데이터를 재전송하지 않음 |
1 대 1 통신(unicast) |
1 대 1 통신(unicast) 1 대 다 통신(broadcast) 다 대 다 통신(multicast) |
인터넷 계층 => IP
네트워크 액세스 계층의 도움을 받아, 전송 계층이 내려 보낸 데이터를 종단 시스템까지 전달하는 역할
네트워크 액세스 계층과마찬가지로 여기서도 주소를 지정하는 지정하는 방법이 필요한데, 여기소는 소프트웨어적으로 정의된
논리 주소를 사용하고, 이를 IP 주소(Internet Protocol address)라고 부른다.
IP 주소는 네트워크 액세스 계층에서 사용하는 물리 주소와은 무관하게 정의하며, 전세계적인 유일성이 보장된다. 따라서 서로
다른 기술에 기반한 네트워크를 연결하여 인너-네트워크(inter-network)를 구성하는 데 핵심적인 역할을 한다.
네트워크 액세스 계층 => 디바이스 드라이버, 네트워크 하드웨어
물리적 네트워크를 통한 실제적인 데이터 전송을 담당
네트워크 액세스 계층에서는 하드웨어적으로 정의된 물리 주소(physical address)를 사용하여 통신을
수행하는데, 이러한 물리 주소는 네트워크 방식에 따라 서로 다르며, 일반적으로 상호 호환 된지 않는다.
흔히 사용하는 이더넷(Ethernet)에서는 48비트 물리 주소를 사용하는데,
윈도우에서 'ipconfig /all' 명령을 사용하여 활인할 수 있다.
위 사진은 제 컴퓨터에서 위 명령어를 쳤을때 나오는 현상이다. 위에서 빨간색으로 칠해진 부분이
물리 주소로써, 위 컴퓨터의 경우 무선네트워크와 유선네트워크해서 두개 설치 되어 있기 때문에
두개가 나타나고 있다.
패킷 전송 원리
애플리케이션에서 보내는 데이트를 목적지까지 전송하기 위해서는 각각의 프로토콜에서 정의한 제어정보(IP 주소, 포트 주소, 오류 체크 코드, ...)가 필요하다. 제어 정보는 위치에 따라, 앞쪽에 붙는 헤더(header)와 뒤쪽에 붙는 트레일러(trailer)로 나눌 수 있다. 이러한 제어 정보가 결합된 형태로 실제 데이터가 전송되는데 이를 패킷(packet)이라 부른다. 즉 패킷이란 제어 정보 + 데이터를 통칭하는 용어다.
이더넷에 연결된 두 종단 시스템이 TCP/IP를 이용하여 데이터를 교환하는 경우 패킷 전송 형태는 다음과 같다.
송신측에서 보낸 데이터는 TCP/IP/이더넷 계층을 지나면서 헤더 또는 트레일러 형태로 제어 정보가 덧붙여진 패킷이 생성된다. 이 패킷이 수신측에 도달하면 이더텟/IP/TCP 계층을 지나면서 차례대로 헤더 또는 트레일러가 제거되고, 최종적으로 송신측이 보낸 데이터를 애플리케이션이 받게 된다.
이와 같은 패킷 전송 형태를 각 계층의 관점에서 본다면 각 계층은 마치 동일한 위치의 상대편 계층과 통신을 하는 것으로 간주할 수 있다. 예를 들면, 송신측 애플리케이션이 보낸 데이터는 TCP/IP/이더넷을 거쳐 제어 정보가 덧붙여진 형태로 전송되지만, 궁극적으로 수신측 애플리케이션은 모든 제어 정보가 제거된 후 데이터만 받는다. 이로 인해 애플레케이션 프로그래머는 주고받을 데이터에만 집중하여 구현하면 되고, 나머지 부분은 운영체제가 제공하는 프로토콜이 처리하는 것이다.
IP 주소, 포트 번호
TCP/IP 프로토콜을 이용하여 통신할 때는 IP 주소와 포트 번호를 사용한다. IP 주소는 32비트 값으로, 일반적으로 8비트 단위로 구분하여 각각 10진수로 표기한다.
예) 147.46.223.51
폐쇄된 네트워크가 IP를 공유하는 경우가 아니라면 IP 주소는 전세계적으로 유일한 값을 가진다. 라우터가 라우팅 할 때는 IP 헤더에 포함된 수신자 IP 주소를 이용하며, 데이터를 받은 쪽에서 답장을 보내고자 할 때도 역시 IP 헤더레 포함된 송신자 IP 주소를 이용한다.
IP 조소는 인터넷에 존재하는 호스트(종단 시스템, 라우터)를 유일하게 구별할 수 있지만 통신의 최종 주체인 프로세스를 식별하지 못한다. 포트 번호는 각 프로세스를 구별하는 식별자다. 그러나 실제로는 한 프로세스가 두 개 이상의 포트 번호를 사용하는 경우가 종종 있으며, 한 포트 번호를 두 개 이상의 프로세스가 사용하는 것도 가능하다. 따라서 포트 번호는 프로세스를 구별하는 식별자라기보다는 통신의 종착지(하나 혹은 여러개의 프로세스)를 나타내는 식별자로 보는 것이 바람직하다.
TCP와 UDP는 포트 번호로 부호 없이 16비트 정수를 사용하므로 0~65535 범위가 가능하지만, 모든 범위를 자유롭게 쓸 수 있는 것은 아니다.
포트 번호 | 분류 |
0 ~ 1023 | Well-known ports |
1024 ~ 49151 | Registered ports |
49152 ~ 65535 | Dynamic and/or private ports |
위와 같이 포트 번호를 영역별로 나눌 수 있으며, 구체적인 내용은 포트 번호를 관리하는 공식 사이트인 http://www.iana.org/assignments/port-numbers를 참고하기 바란다. 주의할 점은 포트 번호 0~1023은 용도가 정해져 있으므로 함부로 사용해서는 안된다는 것이다. 일반적으로 서버를 작성할 때는 1024~49151 범위에서 하나 또는 일부를 선택하여 사용하는 것이 바람직하다.
IP 주소는 사람이 기억하고 사용하기에 불편한 점이 많으므로 www.naver.com 같은 도메인 이름(domain name)을 사용하는 경우가 많다. 도메인 이름은 IP 주소에 대한 별명에 불과하므로 실제 통신을 하기 위해서는 IP 주소로 변환해야 한다.
클라이언트/서버 모델
네트워크 프로그램은 일반적으로 클라이언트/서버 모델(client/server model)로 작성한다. 여기서 클라이언트/서버는 두 개의 애플리케이션이 상호 작용하는 방식을 나타내는 용어로, 클라이언트가 서버에 요청을 하면 서버는 이 요청을 받아 처리하게 된다. 하나의 컴퓨터에서 실행되는 두 프로그램 간에 클라이언트/서버 모델이 적용될 경우, 두 프로그램은 프로세스 간 통신(IPC, Inter-Process Communication) 기법을 사용하여 상호 정보를 교환한다. 반면, 네트워크로 연결된 두 컴퓨터에서 실행되는 두 프로그램 간에 클라이언트/서버 모델이 적용될 경우, 두 프로그램은 통신 프로토콜(예를 들면 TCP/IP)을 사용하여 상호 정보를 교환한다.
클라이언트/서버 모델의 동작 방식을 보기 위해 서로 다른 종단 시스템을 실행되는 두 개의 프로세스가 서로 접속하는 경우를 생각해보자. 접속이 성공하려면 반드시 상대 프로세스가 실행 중이어야 한다. 그러나 이와 같이 동시 접속 모델을 사용하게 되면, 타이밍 문제로 인해 접속이 실패할 확률이 높아지고, 결과적으로 통신할 수 없는 경우가 자주 발생한다.
클라이언트 서버 보델에서는 이와 같은 문제가 자연스럽게 해결되는데, 한 프로세스가 먼저 실행하여 대기하고, 다른 프로세스가 나중하도록 하면 된다. 이때 먼저 실행 되는 쪽은 서버가 되어야 하고, 나중에 실행 되는 쪽은 클라이언트가 되어야 한다.또한 클라이언트가 서버에 접속하기 위해서는 서버의 IP 주소와 포트 번호를 미리 알고 있어야 한다. 반면 서버는 아무것도 모른다. 클라이언트가 보낸 패킷에는 클라이언트 주소 정보가 모두 들어있기 때문에, 서버는 이 정보를 이용하여 언제든지 해당 클라이언트에 데이터를 보낼 수 있다.
'★─Programing > ☆─TCP IP' 카테고리의 다른 글
[TCP/IP] IPv4의 주소체계 (0) | 2008.04.17 |
---|---|
[TCP/IP] 리눅스 C - sleep 함수 (0) | 2008.03.25 |
[TCP/IP] sockaddr_in 구조체 (0) | 2008.03.18 |
[TCP/IP] TCP & UDP (0) | 2008.03.18 |
[TCP/IP] WSAGetLastError() (0) | 2008.03.17 |