OSI 7 Layer

Y39·2023년 3월 5일
0

toBeProgrammer

목록 보기
21/88

0. OSI 7 Layer

  1. Physical Layer
  2. Data-Link Layer
  3. Network Layer
  4. Transport Layer
  5. Session Layer
  6. Presentation Layer
  7. Application Layer

1. Physical Layer

  • 두 대의 컴퓨터의 통신
    • 0과 1만 주고 받을 수 있으면 된다.
    • 전선으로 0과 1로 주고 받으면 된다고 생각하지만...
      • 실제로는 잘 작동하지 않았음
      • 전선에 따라 모든 전자기파를 통과시키지 못함 -> 일부만 도착
    • 데이터(encoder) -> 아날로그화 -> 데이터(decoder)
    • 물리적으로 연결(전선)된 두 컴퓨터가 0과 1을 주고 받을 수 있게해주는 모듈
    • PHY 칩(하드웨어적으로 작동하고 있음)
  • 여러대의 컴퓨터 통신에 대하여
    • 물리 레이어는 한계가 생김(모든 컴퓨터끼리 전선 연결은 불가능)
    • 그래서 컴퓨터끼리 연결을 돕는 허브(더미 허브)를 설치
    • 하지만 전선이 하나면 연결된 모든 컴퓨터가 통신을 받게된다.
    • 그래서 허브를 똑똑하게 만들어 데이터를 원하는 사람에게 가도록 만듬 => 스위치
    • 다른 스위치와 통신할 수는 없나? -> 라우터
    • 라우터와 라우터를 끊임 없이 연결한 것이 인터넷
      • 계층적으로 연결된 통신
  • Data-Link Layer
    • 긴 데이터를 보낼 때는 끊어서 보내야한다.
      • 잘못 끊으면 메시지가 달라짐
      • 그래서 데이터의 앞뒤에 특정한 비트열을 붙임
    • 같은 네트워크(같은 스위치) 데이터를 주고 받기 위해서 필요한 모듈
    • Lan 카드(하드웨어적으로 구현)

3. Network Layer

  • 더 많은 컴퓨터들 사이의 통신
    • 데이터를 원하는 곳으로 보내기 위해 -> 데이터 앞에 주소를 붙임
      • 데이터 전송은 IP 주소를 알아야 가능
      • IP 주소는 DNS를 통해 알아낼 수 있음
    • (주소+data) => 패킷
    • 전송
      • 패킷을 자신이 속한 라우터에게 보냄
      • 라우터a는 IP주소를 확인하고 연결된 컴퓨터에 해당하는지 확인
      • 라우터a는 자신의 상위 라우터b에게 전송
      • 라우터b는 IP주소를 갖고 있는 라우터f에게 전송
  • network Layer의 일
    • routing: 수많은 네트워크 속에서 IP주소를 찾음
    • forwarding: 자신의 다음 라우터에게 데이터를 보냄
  • 운영체제에 포함되어있는 기능

4. Transport Layer

  • 3layer을 통해 전세계의 컴퓨터가 연결
  • 컴퓨터 내에서는 여러 프로그램들이 실행 중
  • 여러 프로그램 중에 어떤 데이터를 줘야할지 어떻게 알까?
    • 포트 번호를 통해서
      • 프로세스는 서로 겹치지 않게 각자의 포트가 있음
      • 포트번호에 알맞는 프로세스에 데이터를 전달
  • 도착지 컴퓨터의 최종 종착지 프로세스에 전달
  • 운영체제의 커널에 소프트웨어로 구현

OSI 모델 vs TCP/IP 모델

  • 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델
  • TCP/IP 모델 또한 네트워크 시스템 모델
  • TCP/IP가 OSI를 재치고 네트워크 시장을 점유함
  • 업데이트가 되고 TCP/IP 모델은 OSI모델과 매우 유사해짐
    [업데이트 전]

    [업데이트 후]

5. Application Layer

  • TCP/IP 소켓 프로그래밍 (네트워크 프로그래밍)
    • 운영체제 Transport layer에서 제공하는 API를 활용
      • 통신 가능한 프로그램을 만드는 것
      • 누구나 자신만의 Application Layer 프로토콜을 만들 수 있음
      • 대표 인코딩-디코딩: HTTP
  • HTTP
  • header, body, request, response, status code...
profile
System.out.print("Bold")

0개의 댓글