계층별 주요 기능 요약

  • 물리 계층 (Physical Layer, L1)

    • 기계적, 전기적인 통신망 접면의 정의

    • 데이터를 전기적인 신호로 변환해서 주고받는 기능만 할 뿐

    • 대표 장비 : 통신 케이블, 리피터, 허브 등

  • 데이터링크 계층 (DataLink Layer 2, L2)

    • 데이타 링크의 제어 (프레임화, 데이터 투명성, 오류 제어 등)

    • 맥 주소를 가지고 통신한다.

    • 대표 장비 :브리지, 스위치 등

  • 네트워크 계층 (Network Layer 3, L3)

    • 경로 배정, 주소, 호 설정 및 해지 등

    • 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)

    • 주소부여(IP), 경로설정(Route)

  • 전송 계층 (Transport Layer 4, L4)

    • 종단 간의 신뢰성 있고 효율적인 메세지 전송(연결 관리,에러제어,데이타 분리,흐름제어 등)

    • 오류검출 및 복구와 흐름제어, 중복검사 등을 수행

    • TCP 프로토콜 / UDP 프로토콜

  • 세션 계층 (Session Layer 5, L5)

    • 응용 개체들간의 대화, 동기화 제어, 연결세션관리 등

    • 데이터가 통신하기 위한 논리적인 연결

    • 세션 설정, 유지, 종료, 전송 중단시 복구 등

    • 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)

    • TCP/IP 세션을 만들고 없애는 책임

  • 표현 계층 (Presentation Layer 6, L6)

    • 전송 형식 협상, 데이타의 표현 방식 변환 등

    • MIME 인코딩이나 암호화 등의 동작

    • 데이터 종류 구분(해당 데이터가 TEXT인지, 그림인지, GIF인지 JPG인지의 구분)

  • 응용 계층 (Application Layer 7, L7)

    • 화일 전송, 접근 및 관리 및 문서, 메세지 교환 등

    • 최종 목적지로서 HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜

    • 일반적인 응용 서비스를 수행


참고

[도커 컨테이너간 네트워크를 잘 몰라서 생긴 삽질]


- 도커를 사용해서 레드마인 서버를 구축하면서 겪은 상황입니다.


- 아래와 같이 docker-compose 를 이용해 레드마인과 mariadb 를 구축했습니다.


* DB 포트인 3306 과 웹포트인 80, 8080 은 이미 사용중이어서 다른 포트로 매핑했습니다.

  여기서... 오해의 시작이...



version: '3'

services:
redmine_db:
image: mariadb
container_name: redmine_db
restart: always
volumes:
- local_directory/db:/var/lib/mysql
ports:
- 9096:3306
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: redmine
MYSQL_USER: user
MYSQL_PASSWORD: user_password
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
networks:
- default
- redmine_network

redmine_web:
image: redmine
container_name: redmine_web
restart: always
volumes:
- local_directory/themes:/usr/src/redmine/public/themes
- local_directory/plugins:/usr/src/redmine/plugins
- local_directory/files:/usr/src/redmine/files
ports:
- 9090:3000
links:
- redmine_db:mysql
environment:
REDMINE_DB_PORT: 9096
REDMINE_DB_MYSQL: redmine_db
REDMINE_DB_USERNAME: user
REDMINE_DB_PASSWORD: user_password
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
- redmine_db
networks:
- redmine_network

networks:
redmine_network:


- 위와 같이 구성한 뒤 컨테이너를 올렸는데 redmine_web 에서 계속 connection 관련 오류가 납니다.


- 도대체 뭘 잘못한거지... 계정도 제대로 만들어졌고 Heidisql 을 이용해서 host:9096 으로 접속도 제대로 되는걸 확인했지만


  레드마인은 계속 오류로 인해 재시작만 반복하네요.



[결국 원인을 찾음]


* 문제는 바로 이부분..



environment:
REDMINE_DB_PORT: 9096 // DB 컨테이너 3306 포트와 매핑된 호스트 서버 포트 / 틀렸다.. 3306 이 정답.
REDMINE_DB_MYSQL: redmine_db // DB 컨테이너 서비스명


- YAML 파일에 작성되는 항목들은 서비스 이름으로 컨테이너들간 연결이 가능하기 때문에 redmine_web 컨테이너에서


  redmine_db 컨테이너로 접근할 시 외부 호스트 포트 인 9096 포트 으로 접근할게 아니라 기본 3306 포트로 접속해야 됩니다.


 9096 포트는 아예 호스트 서버 외부에서 redmine_db 에 직접 접근할 때 사용됩니다.


- 이전 포스트에서는 기본 포트인 3306, 80, 8080 을 사용해서 몰랐는데.. 이걸 몰라서 이번에 삽질을 좀....






+ Recent posts