본문 바로가기

리눅스 소켓 프로그래밍 TCPIP

리눅스 - 네트워크와 소켓 프로그래밍

01. TCP/IP 프로토콜 구조

  • 호스트 최종 사용자의 응용 프로그램을 수행하는 주체로
    인터넷에 연결 된 PC,노트북,스마트폰,테블릿 등이 있다.
  • 라우터  : 호스트에서 생성된 데이터를 여러 네트워크를 거쳐 전송함으로써
    다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있도록 하는 장비

  • 호스트와 라우터, 라우터와 라우터, 호스트와 호스트가 동신을 하려면
    정해진 절차와 방법을 따라야하는데 이를 통신프로토콜 이라고한다.

  • 인터넷에서 사용하는 핵심 프로토콜은 TCP/IP 프로토콜이라고 부른다.

  • 응용 프로그램은 TCP/IP 프로토콜의 서비스를 사용하여 통신한다.

 

 

그림에서 통신을 수행하는 주체이자 통신의 최종 목적지는 호스트 자체가 아닌
호스트에서 수행하는 응용 프로그램이다.

 

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

 

 

네트워크 접근 계층

  • 물리적 네트워크를 통한 실제 데이터 송수신을 담당한다.
  • 물리적 신호를 처리하며 데이터를 송수신 하는 네트워크 하드웨어와 운영체제가 제공하는 장치 드라이버
  • 이 계층에서는 하드웨워적 정의된 물리적주소를 사용하여 통신한다.

인터넷 계층

  • 네트워크 접근 게층의 도움을 받아 데이터를 목적지 호스트까지 전달하는 역할을 한다.
  • 소프트웨어적 정의된 논리적 주소인 IP주소 사용한다.
  • 실제 통신을 하기위해 라우팅이 필요하다

라우팅 ?

-> 라우팅은 데이터를 목적지 까지 전달하는 일련의 작업을 가리키는 용어

 

전송 계층

  • 최종 통신 목적지를 저장하고 오류없이 데이터를 전송하는 역할을 한다.
  • 통신의 최종 목적지는 해당 호스트에서 실행되는 프로세스이다.
  • 프로세스를 지정하는 16비트 주소를 포트번호라고 한다.
  • 데이터 손실, 손상을 검출하여 잘못된 데이터를 목적지에 전달되지 않도록한다.

 

TCP를 사용한다고 데이터 전송이 반드시 성공하는 것은 아니다.

랜선에 문제가 생기는 등 물리적은 문제는 소프트웨어가 막을 수 없다.

 

응용 계층

  • 전송계층을 기반으로 하는 다수의 프로토콜과 이 프로토콜을 사용하는 프로그램을 포괄한다.

 

데이터 전송원리

  • 송신하는 호스트의 프로그램을 수신쪽으로 보내기 위해 각 프로토콜에서 정의한 제어정보가 필요하다.
  • 제어정보는 위치에따라 앞 : 헤더 뒤 : 트레일러로 나뉜다.
  • 데이터는 제어정보가 결합한 형태로 전송되며 이를 패킷이라 부른다 -> 제어정보 + 데이터 = 패킷

 

IP주소, 포트번호

  • TCP/IP 프로토콜을 사용하여 통신할 때는 IP주소를 사용한다.
  • 라우터가 라우팅 할 때는 IP헤더에 포함된 고유 수신가 IP주소를 사용한다.

IP주소는 최종목적지인 프로세스를 식별할 수 없다.

  • 프로세스 식별자로는 포트번호를 사용한다.

클라이언트 - 서버 모델

  • 네트워크로 연결된 컴퓨터에서 각각 실행되는 두 프로그램일 경우
    반드시 통신 프로토콜을 사용해야만 데이터 통신이 가능하다.
  • 클라이언트는 서버주소를 알아야하지만 서버는 패킷에 정보가 담겨온다.


    02. 소켓의 개념

소켓

  • 리눅스에선 파일 디스크립터와 동등한 자격을 지닌다.
  • recv(), send(), read(), write() 로 네트워크 통신할 수 있다.
  • 응용 프로그램이 통신하려면 다음 요소들이 결정 되어야한다.
    1. 사용할 프로토콜 (TCP/IP, UDP, IP등)
    2. 송신 측 IP주소
    3. 송신 측 포트번호
    4. 수신 측 IP주소
    5. 수신 측 포트번호

 

 

통신 종단점

소켓은 프로그램 관점에서 종단점, 출발과 도착점이라고 할 수 있다.

 

 

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

  • 소켓은 TCP/IP 프로토콜 구조의 응용계층과 전송계층 사이에 존재하는 인터페이스로 간주한다.
  • 소켓 인터페이스를 이용하여 TCP나 UDP 프로토콜에 접근할 수 있다.

 

 

 

'리눅스 소켓 프로그래밍 TCPIP' 카테고리의 다른 글

UDP 서버 - 클라이언트  (0) 2024.12.16
멀티 스레드 : 리눅스  (3) 2024.12.16
TCP 서버 - 클라이언트  (1) 2024.12.13
소켓 주소 구조체 다루기  (3) 2024.12.13
소켓 시작하기  (0) 2024.12.12