일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- two pointer
- 이진탐색
- String
- Two Points
- 스토어드 프로시저
- Hash
- Stored Procedure
- Trie
- Dijkstra
- Brute Force
- MYSQL
- binary search
- 다익스트라
- union find
- SQL
- DP
- 그래프
Archives
- Today
- Total
codingfarm
3. 소켓 네트워크 프로그래밍에 대한 이해 본문
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은 명시적으로 할당된 포트번호이다.
- 대중적인 인터넷 서비스를 위해 할당됨
- '시스템 포트 번호' 라고도 함
- 1~1023은 명시적으로 할당된 포트번호이다.
클라이언트 포트 번호
- 클라이언트와 서버는 포트를 통해서 서버와 연결된다.
- 서로간에 데이터를 보낼는 포트를 알아야만 프로그램을 찾아갈 수 있다.
- 서버는 주로 포트가 고정되지만, 클라이언트는 1024보다 큰 임의의 변화 할당된다.
- 포트번호는 OS에서 관리한다.
- 프로그램이 특정 포트로의 연결을 요청하면 운영체제가 중복 여부를 확인해서 포트를 할당하는 방식이다.
- 그러면 OS는 1024보다 큰 포트 중에서 사용하지 않는 임의의 포트를 선택해서 클라이언트에 할당한다.
'TCP IP 소켓 프로그래밍' 카테고리의 다른 글
4. 소켓 네트워크 프로그램 개발 - 4. 수신 대기열 생성(listen 함수) (0) | 2021.05.10 |
---|---|
4. 소켓 네트워크 프로그램 개발 - 3. 소켓 설정(bind 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 2. 소켓의 생성(socket 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 1. 네트워크 프로그래밍 소개 (0) | 2021.05.09 |
1. 네트워크와 TCP/IP (2) | 2019.08.18 |
Comments