네트워크 프로그래밍
1. 네트워크 프로그래밍과 소켓의 이해
네트워크 프로그래밍이란
소켓이란?
- 네트워크 연결을 위한 도구
그렇다면 어떻게 연결??
데이터를 받는, 주는 소켓이 필요함
이 소켓을 구현하는 것엔 함수를 사용하면 됨
받는 소켓 구현 방법
- 소켓 생성 (socket 함수)
- 소켓에 주소정보(IP주소, PORT번호) 할당 (bind 함수)
- 소켓이 연결요청이 가능한 상태로 변경 (listen 함수)
- 연결 요청 수락 (accept 함수)
=> 받는 소켓 : 서버
서버란?
그렇다면 주는 소켓은??
=> 클라이언트 소켓
클라이언트 소켓 구현 방법
- 소켓 생성 (socket 함수)
- 서버로 연결 요청 (connect 함수)
클라이언트 서버 모델
- 클라이언트는 묻고 서버는 응답한다
- 보통 하나의 서버 - 다수의 클라이언트
- 서버는 클라이언트에 대해서 아무것도 알지 않아도 된다
- 클라이언트는 서버가 어디에있는지는 적어도 알아야함
클라이언트와 서버는 호스트에서 실행중인 프로세스다.
호스트가 같을수도 다를수도 있다
소켓은 IPC를 의미한다
Internet Connections(TCP/IP)
- 네트워크에서 기기의 주소? : IP 주소
- 프로세스의 주소? : port 번호
IP주소와 port 번호는 소켓 주소를 생성!!
IP/PORT 번호
- 네트워크 상에서 특정 PC를 나타내는 IP 주소
- 그 주소에 진입할 수 있는 정해진 통로, PORT(포트)
- Port(포트)란 IP 내에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호이다.
클라이언트
- 클라이언트 프로그램의 예시
- 웹 브라우저, FTP, telnet, SMTP(email)
- 클라이언트가 서버를 찾는 방법?
- 서버 소켓의 IP 주소가 호스트를 인식
- 서버 소켓의 포트가 서비스를 인식하고 서비스를 수행하는 서버 프로세스를 얻음
포트 번호로 IP 주소 얻기
- 몇몇 포트는 특별한 기능을 위해 보존된다
- 소켓은 네트워크에서 포트를 통해 데이터를 송수신하는 인터페이스를 제공한다.
서버
- 서버는 long-running 프로세스이다
- boot-time을 생성한다.
- 기기가 종료될때까지 돌아간다.
- 각 서버는 요청을 기다린다.
소켓
- 커널의 관점: 소켓은 통신의 종점
- 어플리케이션의 관점: 소켓은 네트워크에 대한 입출력 파일 디스크립터
클라이언트와 서버는 소켓 디스크립터를 통해 입 출력하며 통신한다.
일반 파일과 소켓의 입출력 차이는 소켓 디스크립터를 open하는 방법에 따라서 나뉜다
소켓 인터페이스
- 소켓은 파일과 같다
- 파일같이, 네트워크를 통해 입출력을 할 수 있다.
- 연결 중심 통신에서 사용될 때는(EX TCP)
- 서버는 listen과 accept를
- 클라이언트는 connect를
- 양쪽 모두 read,write,close를 할 수 있다!
- 연결 중심이 아닐때는 (EX UDP)
소켓 라이브러리
유닉스에선 소켓 함수는 시스템콜로 제공이 된다
- OS의 부분이다
- 커널의 top half에서 실행된다
- 유저가 함수를 요청하면, 프로세스의 권한이 os로 넘어가고, 유저는 시스템의 cpu 시간을 사용한다.
다른 OS 에선 소켓 함수는 OS의 부분이 아니다.
- 대신 라이브러리로 제공이 된다
=> 소켓 라이브러리라고 부른다
세월이 야소켓