TCP-IP 윈도우 소켓 프로그래밍

[TCP/IP] 1장. 네트워크와 소켓 프로그래밍

민돌v 2021. 4. 6. 19:09

 TCP/IP 프로토콜 개요

1. 인터넷 구성 요소

인터넷을 통해 통신을 수행하는 개체는 크게 호스트와 라우터로 나눌 수 있다.

1) 호스트(Host)

    : 최종 사용자의 응용프로그램을 수행하는 주체

 

2) 라우터 (router)

    : 호스트에서 생성된 데이터를 여러 네트워크를 거쳐 전송함으로써

     서로 다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있게 하는 장비

 

3) 통신 프로토콜

   : 호스트, 라우터/ 호스트-호스트 간에 통신을위한 정해진 절차와 방법

 

2. TCP/IP 프로토콜 구조

1) TCP/IP 프로토콜

  • 인터넷의 핵심 프로토콜인 TCP와 IP를 비롯한 각종 프로토콜
  • 운영체제의 일부로 구현되며, 응용 프로그램은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용해 통신한다
  • 응용프로그램은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용해 통신한다.(호스트가 아닌 응용프로그램이 주체)

2) 계측정 구조

  • 일반적으로 프로토콜은 기능별로 나누어 계층적으로 구현하는데, TCP/IP프로토콜도 이 구조를 따른다.

1. 네트워크 접근 계층

  • 역할 : 네트워크 접근 계층은 물리적 네트워크를 통한 실제 데이터 송수신을 담당한다.
  • 구성요소 : 네트워크 하드웨어 + 장치 드라이버
    • 네트워크 하드 웨어 : 물리적인 신호를 처리해 데이터를 송수신
    • 장치 드라이버 : 운영체제가 제공
  • 주소지정 방식 : 물리주소(하드웨어적으로 정의)
  • ex) 이더넷 : 48비트 물리주소

2. 인터넷 계층

  • 역할 : 네트워크 접근 계층의 도움을 받아 데이터를 목적지 호스트까지 전달
  • 구성요소 : IP주소 + 라우킹(or 라우터)
  • 주소지정 방식 : IP주소(소프트웨어적으로 정의된 논리주소)
    • 전 세계적인 유일성과 하드웨어 독립성을 가짐
  • 라우팅 : 데이터를 목적지까지 전달하는 일련의 작업, 절차
    • 라우터(라우팅을 담당하는 전용 장비)를 통해 서로 다른 네트워크에 연결된 호스트가 통신

3. 전송 계층

  • 역할 : 최종 통신 목적지(응용 프로그램)을 지정하고, 오류 없이 데이터를 전송
  • 주소지정 방식 : 포트번호
  • 대표 프로토콜 : TCP/ UDP
Port Number : 통신의 최종목적지는 호스트가 아니라 프로세스(응용 프로그램)이다. 따라서 전송 계층에서 프로세스를 지정하는 일련의 주소를 지정, 이를 포트번호라 한다.

4. 응용 계층

  • 역할 : 전송 계층을 기반으로 한 다수의 프로토콜과 이 프로토콜을 사용하는 응용 프로그램을 포괄
  • 대표 프로토콜 : Telnet, FTP, HTTP, SMTP, ...
소켓을 사용한 네트워크 프로그램이 여기에 속함

 

3. 데이터 전송 원리

1. 패킷이란

- 각 프로토콜에서 정의한 제어 정보(IP 주소, 포트 번호, 오류 체크 코드 등) + 데이터를 의미

- 제어 정보의 위치에 따라 앞쪽에 붙는 헤더와 뒤쪽에 붙는 트레일러로 구분

 

궁긍적으로 수신 측 응용 프로그램은 모든 제어 정보가 제거된 데이터만 받는다.

 

2. IP 주소와 도메인

IP주소

- IP주소는 전세계적으로 유일한 값을 가진다.

- IP주소는 인터넷에 있는 호스트를 유일하게 구별할 수 있지만 통신의 최종 주체인 프로세스는 식별하지 못한다.

- 프로세스 식별자로는 포트번호를 사용하는데, 포트번호는 유일하지 않다.

 

도메인

- IP주소에 대한(기억하기 쉬운) 별명

- 실제 통신할 때는 IP 주소로 변환해야 함

 

3. 클라이언트-서버(Client/Server) 모델

  • 두 프로그램이 상호 작용하는 방식을 나타내는 용어
  • 서비스를 요청하는 쪽은 클라이언트(Client), 클라이언트가 요청하는 서비스를 처리하는 쪽을 서버(Server)라 한다.

 

4. 소켓

소켓은 전화/ 인터넷은 전화망에 비유할 수 있다.

1. 세 가지 관점

- 데이터 타입

- 통신 종단점

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

 

2. 데이터 타입

  •  파일 디스크립터 혹은 핸들과 유사한 개념이다.
    • (일단 만들고 나면 함수를 호출하여 손쉽게 네트워크 통신 수행 가능)
  • 프로그래밍 관점에서 소켓은 생성과 설정 과정이 끝나면 운영체제의 통신 관련 정보를 참조해 다양한 작업울 편리하게 할 수 있는 데이터 타입

 

  •  

  • 응용 프로그램이 통신하려면 다음과 같은 요소가 결정되어야 한다.

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

- 송신, 수신 측 IP 주소

- 송신, 수신 측 포트 번호

 

3. 통신 종단점

- 소켓은 응용 프로그램 관점에서 통신종단점, 즉 통신의 출발점과 도착점이라고 간주할 수 있다.

- 크라이언트는 자신의 소켓이 서버 소켓과 연결된 것으로 생각하고 send()함수를 호출하여 데이터를 보낸다.

 

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

: TCP/IP 프로토콜의 관점에서 소켓은 네트워크 프로그래밍의 인터페이스에 불과하다.

 

- 따라서 응용프로그램을 통신하기 위해 양쪽 모두 소켓을 사용해야 하는 것은 아니다.

- 둘다 같은 프로토콜을 사용하고 정해진 형태와 절차에 따라 데이터를 주고받으면 된다.

 

5. 윈도우 소켓

윈도우 소켓(윈속)

  • 버클리 유닉스에서 개발한 네트워크 프로그래밍 인터페이 스를 윈도우 환경에서 사용할 수 있게 만든 것
  • 윈도우 95 버전부터 API에 정식으로 포함하여 제공

윈도우 소켓과 유닉스 소켓의 차이점 (크게 의미있는 차이는 아님)

  • 윈도우 소켓은 DLL을 통해 대부분의 기능이 제공되므로 DLL 초기화와 종료 작업을 위한 함수가 필요
  • 윈도우 프로그램은 대개 GUI를 갖추고 메시지 구동 방식 으로 동작하므로 이를 위한 확장 함수가 존재
  • 윈도우는 운영체제 차원에서 멀티스레드를 지원하므로 멀 티스레드 환경에서 안정적으로 동작하는 구조와 이를 위 한 함수가 필요

윈속에서 지원하는 통신 프로토콜

  • TCP/IP(윈도우 95 이상, 윈도우 CE 2.1 이상)
  • IPv6(윈도우 XP SP1 이상, 윈도우 CE .NET 4.1 이상)
  • IrDA(윈도우 98 이상, 모든 윈도우 CE 버전)
  • Bluetooth(윈도우 XP SP2 이상, 윈도우 CE .NET 4.0 이상)

윈속의 장점

  • 유닉스 소켓과 소스 코드 수준에서 호환성이 높으므로 기 존 코드를 이식하여 활용하기 쉬움
  • 가장 널리 사용하는 네트워크 프로그래밍 인터페이스이므 로 한번 배우면 여러 운영체제(윈도우, 리눅스 등)에서 사 용 가능
  • TCP/IP 외의 프로토콜도 지원하므로 최소 코드 수정으로 응용 프로그램이 사용할 프로토콜 변경 가능
  • 비교적 저수준 프로그래밍 인터페이스이므로 세부 제어가 가능하며 고성능 네트워크 프로그램 개발 가능 

윈속의 단점

  • 응용 프로그램 수준의 프로토콜을 프로그래머가 직접 설 계해야 함
    • -> 주고받는 데이터 형식이나 전송 절차 등을 고려해 프로그래 밍해야 하며, 설계 변경 시에는 코드 수정이 불가피함
  • 서로 다른 바이트 정렬 방식을 사용하거나 데이터 처리 단 위가 서로 다른 호스트끼리 통신할 경우, 응용 프로그램 수준에서 데이터 변환을 처리해야 함

원속(윈도우 소켓) 구조