네트워크 프로그래밍01 네트워크 프로그래밍과 소켓의 이해

zh025700·2022년 3월 29일
0

네트워크 프로그래밍


1. 네트워크 프로그래밍과 소켓의 이해

네트워크 프로그래밍이란

  • 네트워크로 연결된 서로 다른 두 컴퓨터가 데이터를 주고 받게 하는 것

    어떻게 연결??

    소켓(Socket)을 이용!

소켓이란?

- 네트워크 연결을 위한 도구

그렇다면 어떻게 연결??


데이터를 받는, 주는 소켓이 필요함

이 소켓을 구현하는 것엔 함수를 사용하면 됨

받는 소켓 구현 방법

  1. 소켓 생성 (socket 함수)
  2. 소켓에 주소정보(IP주소, PORT번호) 할당 (bind 함수)
  3. 소켓이 연결요청이 가능한 상태로 변경 (listen 함수)
  4. 연결 요청 수락 (accept 함수)

=> 받는 소켓 : 서버

서버란?

  • 연결 요청을 수락하는 기능의 프로그램

그렇다면 주는 소켓은??

=> 클라이언트 소켓

클라이언트 소켓 구현 방법

  1. 소켓 생성 (socket 함수)
  2. 서버로 연결 요청 (connect 함수)

클라이언트 서버 모델

  • 클라이언트는 묻고 서버는 응답한다
  • 보통 하나의 서버 - 다수의 클라이언트
  • 서버는 클라이언트에 대해서 아무것도 알지 않아도 된다
  • 클라이언트는 서버가 어디에있는지는 적어도 알아야함

클라이언트와 서버는 호스트에서 실행중인 프로세스다.

호스트가 같을수도 다를수도 있다

소켓은 IPC를 의미한다

  • OS가 제공하는 인터페이스이다!!!

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)
    • sendto, recvfrom

소켓 라이브러리

유닉스에선 소켓 함수는 시스템콜로 제공이 된다

  • OS의 부분이다
  • 커널의 top half에서 실행된다
  • 유저가 함수를 요청하면, 프로세스의 권한이 os로 넘어가고, 유저는 시스템의 cpu 시간을 사용한다.

다른 OS 에선 소켓 함수는 OS의 부분이 아니다.

  • 대신 라이브러리로 제공이 된다
    => 소켓 라이브러리라고 부른다
profile
정리

1개의 댓글

comment-user-thumbnail
2022년 4월 9일

세월이 야소켓

답글 달기