ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348)
      • C++ (167)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 알고리즘
  • 파이썬
  • 티스토리챌린지
  • 유니티
  • 문자열
  • Unity
  • C
  • 클래스
  • 포인터
  • 프로그래머스
  • string
  • 함수
  • 백준
  • 오블완
  • 배열
  • 언리얼
  • 그래픽스
  • C++
  • SQL
  • c#

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

CS/네트워크

네트워크 모델 - OSI 참조 모델

2024. 9. 30. 16:43

 

  • 두 개의 호스트가 각각 7계층으로 구성된 모듈을 수행
  • 송신 호스트의 응용 계층에서 하위계층으로 순차적으로 전달되어 물리계층으로 도달
  • 물리계층을 통해 수신 호스트로 데이터가 이동하고, 순차적으로 상위 계층으로 전달되어 응용계층까지 도달
  • 송신 측에서 하위 계층으로 이동할 때 각 계층 프로토콜에서 정의한 헤더 추가
  • 수신 측에서 상위 계층으로 이동할 때 순차적으로 헤더 정보를 처리하고 제거

용어 정의

  • 계층 n 프로토콜
    • 계층 n 모듈끼리 사용하는 통신 규칙
    • 프로토콜의 역할
    • 프로토콜에서 정의된 기능을 수행하면서 필요한 정보를 서로 교환 (예 - 주소의 표현, 오류 제어, 흐름 제어 등)
  • 동료 프로세스
    • 동일 계층에 위치한 통신 양단 프로세스
    • 송신 호스트의 응용 계층과 수신 호스트의 응용 계층이 ‘동료(peer)’ 관계
  • 인터페이스
    • 상하위 계층 사이의 접속 방법
  • 서비스
    • 상위 계층이 하위 계층을 사용하는 방법

중계 기능

  • 중계 노드
    • 주소를 기반으로 다음에 어떤 노드에 넘겨줄 것인가 판단해 전달하는 역할 (=라우팅)
    • 여러 개 존재할 수 있음
    • 7계층 중 네트워크 계층까지의 기능만 수행
    • 라우팅
    • 경로 배정 기능
    • 헤더 정보를 해석하여 적절한 경로로 전달
    • 다음 라우터로 보내기 전에 헤더 정보를 적절히 수정하여 전송

계층별 기능

  • 물리 계층
    • 전송 매체의 물리적(기계적, 전기적) 인터페이스에 관한 사항 기술
    • 하드웨어로 구현
    • 데이터의 전송 속도, 클럭(clock) 동기화, 물리적 연결 형태 등
  • 데이터 링크 계층
    • 물리계층을 통해 전송하는 데이터의 물리적 전송 오류를 해결하고 흐름 제어 제공
    • 두 개의 노드가 1:1로 직접 연결된 환경에서 데이터 전송 기능 지원
    • 프레임
    • 계층마다 데이터를 지칭하는 용어가 다른데, 데이터 링크 계층에서는 데이터를 프레임이라 칭함
    • 헤더에 포함되는 정보
      • 헤더에 포함되는 정보
      • MAC 주소
      • 오류 제어에 관련된 추가 정보(데이터에 이상은 없는지, 데이터가 사라지지는 않았는지 등을 제어)
      • 흐름 제어에 관련된 추가 정보(처리할 수 있는 속도로 송신하도록 제어)
      • 효율적인 처리를 위해 트레일러를 이용하기도 함. 왜? 헤더에 붙이면 데이터를 끼워넣고 다시 정렬해야 하는 상황이 올 수도 있기 때문
  • 네트워크 계층
    • 네트워크 주소를 기반으로 (어디어디를 거쳐 갈 것인지) 호스트 간 데이터의 전송 경로를 결정하는 라우팅 문제 처리
    • 전달 경로 설정
      • 정적: 사전에 미리 정해진 경로 이용(예 - 옛날 내비)
      • 동적: 네트워크 상황 등을 고려하여 판단(예 - 요즘 내비)
    • 패킷(packet)
      • 네트워크 계층에서의 전송 데이터 명칭
    • 혼잡 제어
      • 네트워크를 이용하여 전송하는 데이터가 과도하게 많은 경우 전송속도가 떨어지는데, 이를 조절
      • 네트워크 계층에서 혼잡 제어를 하지 않는 경우 전송 계층에서 수행하기도 함 (예 - 인터넷에서 IP는 혼잡 제어를 하지 않고 상위 계층인 TCP에서 제어)
  • 전송 계층
    • IP 주소를 가지고 찾아오는 것이 네트워크 계층의 역할 (예 - IP 주소를 가지고 찾아오는 것)
    • 송신 프로세스와 수신 프로세스를 연결하는 단대단(end-to-end) 통신 기능 제공
    • 프로세스를 구별할 수 있는 주소 개념 필요
      • 포트 번호: 호스트 안 많은 프로세스 중 내가 통신하길 원하는 프로세스를 표현할 수 있는 방법
      • 예 - 친구 집에 전화 걸었을 때 다른 사람이 받는다면 원하는 사람을 이야기헤 실제 연결하고자 하는 사람과 통화할 수 있음
  • 세션 계층
    • 상위적(논리적) 연결 개념인 세션 기능 제공
    • 대화 제어
    • 토큰 제어 (예 - 발언권)
    • 동기화
    • 목적을 다 달성하지 못하고 연결이 끊겼을 경우 끊긴 부분(동기점)부터 다시 시작
  • 표현 계층
    • 일종의 번역 서비스
    • 통신 양단에서 서로 이해할 수 있는 표준 방식으로 코딩
  • 응용 계층
    • 나머지 6개층 외 모든 것
    • 사용자에게 유용한 다양한 서비스
    • http
    • ftp
    • telnet
      • 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때에 지원되는 인터넷 표준 프로토콜
      • 23번 포트 사용
    • email

 

https://naon.me/posts/til79

저작자표시 (새창열림)

'CS > 네트워크' 카테고리의 다른 글

라우팅 Routing  (0) 2024.10.02
라우팅 알고리즘 - 벨만포드 (Bellman-Ford), 다익스트라 (Dijkstra)  (2) 2024.10.02
네트워크의 기초 - 네트워크 주소의 표현  (0) 2024.09.30
소켓 시스템 - 네트워크 프로그래밍  (0) 2024.09.30
데이터 링크 계층 (1) - 프로토콜의 기초  (0) 2024.09.30
    'CS/네트워크' 카테고리의 다른 글
    • 라우팅 Routing
    • 라우팅 알고리즘 - 벨만포드 (Bellman-Ford), 다익스트라 (Dijkstra)
    • 네트워크의 기초 - 네트워크 주소의 표현
    • 소켓 시스템 - 네트워크 프로그래밍
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바