Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

codingfarm

3. 소켓 네트워크 프로그래밍에 대한 이해 본문

TCP IP 소켓 프로그래밍

3. 소켓 네트워크 프로그래밍에 대한 이해

scarecrow1992 2020. 10. 23. 23:25

0. 개요

  • 소켓을 이용하면 인터넷의 복잡한 하부구조에 대한 세부 지식 없이 손쉽게 네트워크 프로그램을 개발할 수 있다.

 

이번장에서 배울 내용

  • 소켓이란 무엇인가?
  • 네트워크와 네트워크 프로그램의 관계
  • 네트워크 프로그램을 작성하기 위해서 알아야 하는 네트워크의 특성
  • 네트워크 프로그램과 소켓과의 관계

 

 

1. 소켓 소개

  • 기존의 TCP/IP 4계층과 OSI 7계층은 세분화를 통해 전문화를 이끌어내도록 의도되었다.
  • 하지만 계층을 나누어 전문화하고, 다시 통합하여 단순화 했음에도 여전히 네트워크 프로그램 개발 과정은 복잡하다.
  • 이를 위해 '네트워크 프로그램 개발을 위한 새로운 계층'을 만들었으며 이것이 소켓이다.
  • 소켓의 계층구조는 TCP/IP 계층에서 응용계층 바로 밑에 위치한다.

  • 소켓계층은 개발자들이 응용계층에만 집중하게끔 해준다.
  • 인터넷계층까지 직접 제어하기 위한 로우 소켓도 있다.

 

버클리 소켓(berkely sockets) or BSD 소켓

  • UC 버클리 대학에서 1989년 만들어진 최초의 소켓
  • 오늘날 일반적으로 말하는 소켓, 이후 포스팅에서 언급하는 소켓은 모두 BSD 소켓을 말한다.
  • 특정 기업에 종속되지 않고 자유롭게 사용할 수 있다.
  • 라이브러리를 포함한 API를 제공한다.
  • 거의 모든 OS가 BSD 소켓을 사용하므로 한쪽에서 만들어진 네트워크 프로그램은 수정없이 다른 OS에서 사용가능하다.
    • 가령 유닉스에서 개발된 네트워크 프로그램은 동일 코드를 각각의 OS에 맞도록 컴파일 하는것만으로 사용 가능하다.

 

프로그램과 프로그램을 연결하는 소켓

  • 기존에 인터넷은 컴퓨터와 컴퓨터의 연결로 바라보았다.
  • 네트워크 프로그래머는 인터넷을 프로그램과 프로그램의 연결로 바라봐야한다.

  • 가령 웹서비스를 위해서는 서비스를 제공하는 '웹서버 프로그램'(아파치, IIS)과 서비스를 요청하는 '웹 클라이언트 프로그램'(파이어 폭스, 사파리, IE)이 필요하다.
  • 소켓은 이들 프로그램들이 연결되어서 통신할 수 있도록 통신선로를 만드는 역할을 한다.

 

irc

  • 인터넷에서 텍스트 정보를 교환하기 위한 채팅 서비스

 

 

2. 인터넷 서비스 모델

  • 인터넷 : 정보를 전달하고 공유하기 위한 기반 환경을 제공해주는 네트워크 구조물이다.
  • 인터넷 프로그램 : 정보를 전달하고 전달받은 정보를 가공해서 다시 전달하는 일에 특화된 프로그램. 즉, '인터넷 위에서 정보를 서비스'하는 특화된 프로그램
  • 네트워크 프로그램에는 다양한 서비스 모델이 있다.

 

서버 클라이언트 모델

  • 제일 보편적인 인터넷 서비스 모델이다.
  • 여러명의 클라이언트가 하나의 서버에게 정보를 요쳥한다.

 

P2P(Peer-to-Peer)

  • 동등한 위치에서 서로를 바라본다는 의미.
  • 예 : 냅스터, 토렌토, 당나귀, 인터넷 전화(VoIP) 같은 개인정보 공유 프로그램
  • 중앙 서버에 파일을 업로드하고 다운로드 하는 방식이 아닌, 인터넷에 연결된 다른 냅스터 사용자로부터 파일을 주고 받는다..
  • 모든 사용자들이 클라이언트와 서버의 역할을 동시에 담당한다.
  • 라이선스 문제 및 기업의 수익성 문제에 의해 활용되기 힘들다.
  • 기업에서는 컴퓨팅 파워나 네트워크 트래픽을 사용자에게 분산시키기 위해 사용한다.
  • 서버/클라이언트 모델보다 개발이 복잡하다.

 

에이전트/매니저(Agent/Manager) 모델

  • 하나의 에이전트가 다수의 매니저에게 정보를 요청한다.
  • 이는 여러개의 클라이언트가 하나의 서버에 정보를 요청하는 서버/클라이언트 구조와 큰차이가 있다.
  • 여러대의 노드로부터 정보를 수집하고 처리해야하는 일에 효과적이다.
  • 예 : SNMP(Simple Network Management Protocol)
  • 관리하고자 하는 각각의 컴퓨터에 매니저 프로그램을 설치하고, 에이전트 프로그램이 일정한 주기로 매니저 프로그램에 시스템 및 네트워크 정보를 요청하는 방식으로 작동한다.

 

 

3. 서비스 포트

  • 개발자에게 인터넷이란 프로그램과 프로그램의 연결이라는 점을 상기하라.
  • 멀티프로세스 기능을 통해 하나의 컴퓨터로 여러 네트워크 서비스를 이용할 수 있다.
    • 웹서핑을 하면서, 파일을 다운로드하고, 스트리밍 음악을 들을 수 있다.
  • 포트
    • 원하는 네트워크 프로그램을 찾게해주는 수단.
    • 서비스 종류별로 포트가 존재한다.
    • 포트를 이용하여 다양한 프로그램에 연결할 수 있다.

  • 각 서비스는 고유의 포트 번호를 가지고 있다.
    • 내가 만든 웹서버 프로그램으로 웹서비스를 하고싶다면, 80번 포트에 프로그램을 연결하면 된다.
  • 별개의 포트를 통해 하나의 컴퓨터로 여러 인터넷 서비스를 제공할 수 있다.
  • 자기가 원하는 서버와 클라이언트 프로그램을 사용할 수 있다.

 

 

명시된 포트 번호

  • 중복배제, 단일화 등을 위해 표준적인 인터넷 서비스들은 포트 번호가 고정되어있다.
  • 포트번호는 $1$에서 $65536(=2^{16})$의 범위를 가진다
    • 1~1023은 명시적으로 할당된 포트번호이다.
      • 대중적인 인터넷 서비스를 위해 할당됨
      • '시스템 포트 번호' 라고도 함

 

 

클라이언트 포트 번호

  • 클라이언트와 서버는 포트를 통해서 서버와 연결된다.
  • 서로간에 데이터를 보낼는 포트를 알아야만 프로그램을 찾아갈 수 있다.
  • 서버는 주로 포트가 고정되지만, 클라이언트는 1024보다 큰 임의의 변화 할당된다.
  • 포트번호는 OS에서 관리한다.
  • 프로그램이 특정 포트로의 연결을 요청하면 운영체제가 중복 여부를 확인해서 포트를 할당하는 방식이다.
  • 그러면 OS는 1024보다 큰 포트 중에서 사용하지 않는 임의의 포트를 선택해서 클라이언트에 할당한다.

 

Comments