TCP/IP 프로토콜 개요

2015. 4. 27. 09:47프로그래밍/서버

728x90
728x90

1. TCP/IP 프로토콜 개요

TCP/IP 프로토콜 구조

기본 개념

호스트 

응용 프로그램을 수행하는 주체; 피시, 노트북, 휴대전화


라우터 

호스트에서 생성된 데이터를 전송, 교환할 수 있는 장비


프로토콜

호스트 - 라우터, 라우터 - 라우터, 호스트 - 호스트가 통신할 수 있는 절차와 방법


TCP/IP

인터넷에서 사용하는 핵심 프로토콜은 TCP와 IP로, 이를 비롯한 각종 프로토콜을

총칭하여 TCP/IP 프로토콜이라 부른다.


위 사진은 OSI 7게층과 TCP/IP 모델의 비교


네트워크 계층

물리적 네트워크를 통한 실제 데이터를 송수신을 처리하는 계층.

하드웨어적으로 정의된 물리 주소를 통해 통신한다.


인터넷 계층

소프트웨어적으로 정의된 논리 주소인 IP 주소(Internet Protocol Address)를 사용한다.

라우팅이란 데이터를 목적지까지 전달하는 일련의 작업


전송 계층

최종 통신 목적지를 지정하고 오류 없이 데이터를 전송하는 역할을 한다.

프로세스를 지정하는 일종의 주소를 사용하는데, 이를 포트 번호(Port Number)라고 부른다.


전송 계층에 해당하는 TCP/IP 프로토콜로는 TCP(Transmission Control Protocol)이 있고

UDP(User Datagram Protocol)가 있다.

응용 계층

전송계층을 기반으로 한 다수의 프로토콜과 이 프로토콜을 사용하는 응용프로그램들을 포괄하는 개념.


데이터 전송 원리

각 프로토콜에서 정의한 제어 정보(IP 주소, 포트 번호, 오류 코드)가 필요한데,

붙은 위치에 따라 앞쪽은 헤더, 뒤쪽은 트레일러라 부른다.

데이터와 이러한 제어 정보가 결합된 형태를 패킷이라 부른다.




IP 주소, 포트 번호

IP 주소는 IPv4와 IPv6 두 종류가 존재한다.각각 32비트와 128비트 값을 사용한다.

예)

IPv4 - 147.46.114.70(8비트 단위)

IPv6 - 2001:0230:abcd:ffab:0023:eb00:ffff:1111(16비트 단위)


IP 주소는 인터넷에 있는 호스트를 유일하게 구별할 수 있으나

통신의 최종 주체인 프로세스를 식별할 수 없다.


프로세스의 식별자로 포트 번호를 사용한다.

프로세스를 구별하는 식별자라기보다는 통신의 종착점(하나 혹은 여러 프로세스)을 나타내는 식별자로 보는 것이 바람직하다.


SC 모델

네트워크 프로그램은 일반적으로 클라이언트 - 서버로 작성한다.

클라이언트 - 서버는 두 프로그램이 상호 작용하는 방식을 나타내는 용어이다.

서비스를 요청하는 쪽을 클라이언트, 클라이언트가 요청하는 서비스를 처리하는 쪽을 서버라 부른다.



2. 소켓의 개념

소켓은 포트 번호와 IP 주소 등의 통신 관련 정보를 포괄하는 개념이다.


소켓 프로그래밍에서 소켓의 용어에 대한 3가지 관점

- 데이터 타입

- 통신 종단점

- 네트워크 프로그래밍 인터페이스


데이터 타입

파일 디스크립터나 핸들과 유 사한 개념으로 만들고 나면 함수를 손쉽게 호출하여 네트워크 통신을 할 수 있게 해준다.


통신을 하려면 다음과 같은 요소를 결정해야 한다.

- 사용할 프로토콜(TCP/IP, UIP/IP 등)

- IP 주소, 포트 번호


통신 종단점

통신의 출발점과 도착점으로 간주한다.


인터페이스

정해진 형태와 절차에 따라 데이터를 주고 받는 프로그래밍 인터페이스이다.


3. 윈속

소켓 - 버클리 유닉스에서 개발한 네트워크 프로그래밍 인터페이스

윈속 - 이를 윈도우 환경에서 사용할 수 있게 만든 것을 윈도우 소켓이라고 한다.


윈속의 특징

- 윈도우 소켓은 DLL을 통해 대부분의 기능이 제공되므로 DLL 초기화 종료 작업을 위한 함수가 필요하다.

- 윈도우 프로그램은 대개 GUI를 갖추고 메시지 구동 방식으로 동작하므로 이를 위한 확장 함수가 존재한다.

- 윈도우는 운영체제 차원에서 멀티스레드 지원하므로 멀티 스레드 환경에서 안정적으로 동작하는 구조와 이를 위한 함수가 필요하다.


윈속의 장점

- 유닉스 소켓과 소스 코드 수준에서 호환성이 높고 기존 코드를 이식하여 활용하기 쉽다.

- 가장 널리 사용하는 인터페이스

- 여러 프로토콜을 지원하므로 최소 코드 수정으로 응용 프로그램이 사용할 프로토콜을 변경할 수 있다.

- 비교적 저수준 프로그래밍 인터페이스로 세부 제어가 가능하다.(고성능 네트워크 프로그램을 개발할 수 있다.)


윈속의 단점

- 응용 프로그램 수준의 프로토콜을 프로그래머가 직접 설계해야 한다.

- 서로 다른 바이트 정렬 방식일 때 데이터 변환 처리를 해야 한다.


728x90
반응형

'프로그래밍 > 서버' 카테고리의 다른 글

동기화  (0) 2015.07.23
Thread  (0) 2015.07.23
Blocking vs Non-Blocking  (0) 2015.07.12
[서버] 데드 레커닝(Dead Reckoning)  (1) 2015.05.23
Overlapped I/O 모델  (0) 2015.05.17
IOCP 정리  (0) 2015.05.14
메모리 풀(Memory Pool)  (0) 2015.03.18