[스터디] OSI 7계층 & TCP/IP 4계층

suhwani·2024년 8월 13일
0
post-thumbnail

OSI 7계층


1. OSI 7계층이란 무엇인가

OSI(Open System Interconnection) 7계층은 국제 표준화 기구인 ISO(International Standardization Organization)에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 개방형 시스템 상호 연결 모델이다.

1-1-1. OSI 7계층을 나눈 이유는?

계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악하기 위함.
흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽고, 7단계 중 특정한 곳에 이상이 생기면
다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있다.

ex) PC방에서 롤(게임)을 하는데 연결이 끊겼다. 어디에 문제가 있는지 확인해보자.
IF 모든 PC가 문제가 있다면?

  • 라우터의 문제(3계층 Network Layer) or 광랜을 제공하는 회사의 문제(1계층 Physical Layer)
    IF 특정 PC만 문제가 있다면?
  • 게임 소프트웨어의 문제(7계층 Application Layer) or 스위치의 문제(2계층 DataLink Layer)

결과적으로 문제를 파악하고, 다른 계층에 있는 장비나 소프트웨어를 건들이지 않을 수 있다.

1-1-2. OSI 7계층과 TCP/IP 4계층의 차이점

TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 설명하는 것이 다르며, 인터넷 계층을 네트 워크 계층으로 부른다는 점이 다릅니다.

1-2-1. 물리 계층 Physical Layer

물리계층은 전기적, 물리적 세부 사항들을 정의하는 계층이다.
통신 케이블로 데이터(형식: Bit)를 전송하여 통신을 수행한다.
데이터를 전달만 할 뿐, 전송(or 받는)하는 데이터의 내용, 에러 등은 전혀 신경쓰지 않는다.

장비: 허브(Hub), 리피터(Repeater)
프로토콜: RS-232

데이터 링크 계층은 링크의 설정과 유지, 종료를 담당하며 노드 간 오류제어, 흐름제어, 회선제어 등 안전한 정보의 전달을 수행하는 계층이다. 통신의 오류를 찾거나 재전송하는 기능이 있다.
네트워크 계층에 데이터(형식: 프레임)를 전달하고, 물리 계층에서 발생할 수 있는 오류를 탐지한다.
브릿지나 스위치를 통해 MAC address를 가지고 물리계층에서 받은 정보를 네트워크 계층으로 전달한다.

장비: L2 스위치(Switch), 브리지(Bridge)
프로토콜: HDLC, 프레임 릴레이

장비. L2 스위치

  • 역할: MAC 주소 테이블을 관리하여, 패킷 전송을 담당한다.
  • 특징
    • IP 주소 기반 라우팅은 불가능하며, 단순 MAC주소를 읽어 스위칭하는 역할

1-2-3. 네트워크 계층 Network Layer

네트워크 계층은 패킷을 네트워크들을 통해 전달하고, 전송계층(Transport Layer)까지 안전하고 빠르게 전달하는 계층이다. 라우팅, 패킷 포워딩, 인터 네트워킹 등을 수행한다.
경로를 선택하고, 주소를 정하고, 경로에 따라 패킷을 전달하는 역할을 하며, 이 때 IP 주소를 사용한다.

장비: 라우터(Router), L3 스위치
주요 역할: 주소부여(IP), 경로설정(Route)
프로토콜: IP, ARP, ICMP, 라우팅 프로토콜

비. 라우터

  • 역할: 여러 개의 네트워크를 연결, 분할, 구분 시켜주는 역할을 하며 다른 네트워크에 존재하는 장치끼리 최소 경로로 패킷을 포워딩하는 역할
  • 라우터는 소프트웨어 기반의 라우팅과 하드웨어 기반 라우팅을 하는 것으로 나눠지고,
    하드웨어 기반 라우팅을 담당하는 장치를 L3 스위치라고 한다.

장비. L3 스위치

  • 역할: L2 스위치 + 라우팅 기능

번외. IP 프로토콜

  • 역할: 지정한 IP 주소(IP address)에 데이터 전달 & 패킷(packet) 단위 데이터 전달
  • 한계
    • 비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. 보내고자하는 대상 서버가 패킷을 받을 수 있는 상태인지 없는 상태인지 보내는 입장에서 알 수 없으나, 보내는 쪽에서는 계속 패킷을 보냅니다.
    • 비신뢰성 - 패킷 전달 여부에 대해 보증하지 않는다. 중간에 패킷이 사라져도 IP 프로토콜에서는 확인하지 않는다. 또한 패킷 순서가 달라질 수 있다.
  • 이러한 한계를 극복한 프로토콜이 TCP 프로토콜이다.

번외. ARP 프로토콜 Address Resolution Protocol

  • 역할: IP주소는 변하기 때문에 신뢰성이 떨어져서 MAC주소를 사용하게 된다.
    이 때 해당 IP에 맞는 MAC주소를 가지고 오는 프로토콜이다.

    RARP(R: reverse) 프로토콜은 MAC주소에 맞는 IP값을 알아오는 프로토콜이다.
  • 동작
    • 같은 IP 내이더라도 MAC 주소를 활용해 특정 서버에 접근할 수 있다.
    • 같은 서브넷 내에서만 동작하며, Request 는 브로드캐스트(Broadcast, 1:N 전송) 방식
      Response 는 유니캐스트(Unicast, 1:1 전송) 방식

1-2-4. 전송 계층 Transport Layer

전송 계층은 양 끝단(End to end, 종단간) 사용자들에게 신뢰성 있는 데이터를 주고 받을 수 있도록 해주고, 상위계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 하는 계층이다.
만약 데이터가 왔다면, 전송 계층에서 해당 데이터를 하나로 합쳐서 세션 계층에 전달한다.
시퀀스 넘버 기반의 오류 제어 방식을 사용하고, 일부 프로토콜은 stateful & connection oriented 하다.
이는 전송 계층이 패킷들의 전송이 유효한지 확인하고, 전송 실패한 패킷들을 다시 전송한다는 의미이다.

장비: L4 스위치
주요 역할: 패킷 생성 및 전송
프로토콜: TCP, UDP

장비. L4 스위치

  • 역할: IP와 포트를 기반으로 트래픽을 분산한다.
  • 특징: 전송 계층을 처리하는 기기로, 스트리밍 서비스는 사용할 수 없으며 메세지 기반으로 인식하지 못함.
  • 활용: AWS NLB(Network Load Balancer)

번외. TCP 프로토콜

  • 역할: 전송 제어 프로토콜 Transmission Controll Protocol
  • 특징
    • 연결지향(Connection-oriented) & 신뢰성 보장 - TCP 3 way handshake
    • 데이터 전달 보증 & 순서 보장 - 가상회선 패킷 교환 방식
  • [TCP 연결 과정] TCP 3 way handshake
    • SYN 단계: 클라이언트에서 서버에게 클라이언트의 ISN을 담아 SYN을 보낸다.
      ** ISN: TCP 연결의 첫번째 패킷에 할당된 임의의 시퀀스 번호
    • SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며, 승인 번호로 클라이언트의 ISN + 1 을 보낸다.
    • ACK 단계: 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK를 서버에게 보낸다.
    • 이후 신뢰성이 구축되고, 데이터 전송을 시작한다. 위 과정 덕분에 신뢰성 있는 프로토콜이라고 한다.

  • [TCP 연결 해제 과정] TCP 4 way handshake
    • 1번: 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다.
      클라이언트는 FIN_WAIT_1 상태에 들어가고, 서버의 응답을 기다린다.
    • 2번: 서버는 클라이언트에게 ACK라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
    • 3번: 서버는 ACK를 보내고, 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
    • 4번: 클라이언트는 TIME_WAIT 상태가 된 후 서버에게 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 일정 시간 대기 후에 연결이 닫히고, 연결이 해제된다.
    • TIME_WAIT: 클라이언트가 연결을 바로 해제하지 않는 이유는
      1. 지연 패킷이 발생할 경우 대비함, 2. 두 장치가 연결이 닫혔는지 확인함.
      - 패킷이 뒤늦게 도달하고, 이를 처리하지 못한다면 데이터 무결성 문제가 발생한다.
      - 만약 LAST_ACK 상태로 연결이 끊겼다면, 다시 새로운 연결을 할 때 LAST_ACK 상태이기 때문에 접속 오류가 발생한다.

번외. UDP 프로토콜

  • 역할: 데이터를 데이터그램 단위로 처리하는 프로토콜
  • 특징
    • 비연결형
      • handshake 과정이 없다.
    • 신뢰성 낮음
      • CheckSum 필드를 통해 최소한의 오류만 검출한다.
      • 순서 보장 x, 전송 보장x, 패킷은 독립적인 관계를 지니고, 서로 다른경로로 독립적으로 처리
    • TCP보다 속도가 빠름
      • 신호절차나 다른 기능이 없기 때문에 속도가 빠르다. 신뢰성보다 연속성이 중요한 서비스에서 사용

1-2-5. 세션 계층 Session Layer

세션 계층은 프로그램 간 통신을 위한 논리적인 연결을 담당하는 계층이다. 연결이 끊어지지 않도록 유지시켜주고, TCP/IP 세션 연결의 설정과 해제 기능을 수행한다.

프로토콜: PRC, NetBIOS

1-2-6. 표현 계층 Presentation Layer

표현 계층은 애플리케이션이 다루는 정보를 알맞는 형태로 만들거나, 하위 계층에서 온 데이터를 사용자가 이해할 수 있는 형태로 만들어, 데이터의 형식상 차이를 다루는 부담을 덜어주는 계층이다.
MIME 인코딩, 데이터 형식(TEXT, JPG, PNG…) 구분 등을 수행한다.

프로토콜: JPEG, MPEG

1-2-7. 응용 계층 Application Layer

응용 계층은 최종 목적지로 프로세스와 직접 관계하여 서비스를 수행하는 역할을 담당하는 계층이다.
여러가지 프로토콜 개체에 대해서 사용자 인터페이스를 제공하고, 응용 프로세스 간의 정보 교환,
파일 전송 등의 서비스를 제공한다.

장비: L7 스위치
프로토콜: HTTP, FTP, SMTP, IMAP, SSH, DNS

장비. L7 스위치

  • 역할: 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기이다.
  • 특징
    • URL, 서버, 캐시, 쿠키를 기반으로 트래픽을 분산한다.
    • 헬스 체크(health check)를 이용하여 감시하면서 이루어진다.
  • 활용: AWS ALB(Application Load Balancer)

번외. HTTP 프로토콜

  • 역할: 웹 상에서 웹 서버 및 웹브라우저 상호 간의 데이터 전송을 위한 응용계층 프로토콜
  • 특징
    • 메세지 교환 형태의 프로토콜
    • 종단간 연결 없음 Coneectionless
    • 이전 상태를 유지하지 않음 Stateless
  • 전송계층 프로토콜: TCP, 80 port

번외. DNS

  • 역할: 도메인 이름 및 IP주소를 확인하는 기능 제공
    도메인 이름을 웹 브라우저에 입력할 때 최종 사용자를 어떤 서버에 연결할 것인지를 제어
  • URL: 웹페이지 상의 표시 주소. URI의 서브셋.
  • URI: URL을 포괄한 개념. 리소스를 식별하는 식별자.

1-3. 계층 간 데이터 송수신 과정

Request: 애플리케이션 계층부터 링크 계층으로 내려갈수록 캡슐화 과정을 거치게 되면서, 계속 헤더가 추가되는 과정을 거칩니다.

Response: 링크 계층을 통해 애플리케이션 계층까지 비캡슐화 과정을 통해 계층별 필요한 헤더를 제거하고, 데이터를 전달합니다.

번외. PDU Protocol Data Unit

  • 개념: 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때, 한 덩어리의 단위 Protocol Data Unit임.
    PDU는 제어 관련 정보들이 포함된 ‘헤더’, 데이터를 의미하는 ‘페이로드’로 구성
    계층별로 부르는 명칭이 다르다.
  • 특징
    • 아래 계층인 비트(Bit)로 송수신 하는 것이 가장 빠르고 효율적이다.
    • 애플리케이션 계층은 문자열 기반으로 송수신하는데, 이유는 헤더에 authorization 값 등 다른 값들을
      넣는 확장이 쉽기 때문이다. → 계층이 낮은 통신을 사용할수록 빠르고, 가볍다고 하는 이유

브라우저에 google.com을 입력하면 벌어지는 일


1. 브라우저 주소창에 maps.google.com을 입력한다.

2. maps.google.com의 IP 주소를 찾기 위해 캐시에서 DNS 기록을 확인한다.

  • DNS(Domain Name Server) 서버는 도메인 영역에 대한 정보를 가지고 있는 서버로, 도메인을 IP주소로 변환하는 역할을 한다.
  • DNS 기록을 찾기 전, 브라우저는 4개의 캐시를 확인한다.
    1. 브라우저 캐시를 확인한다. 브라우저는 이전 방문한 웹 사이트의 DNS 기록을 일정 기간 저장하고 있다.
    2. OS 캐시를 확인한다. 브라우저 캐시에 원하는 DNS 레코드가 없다면 브라우저가 컴퓨터 OS에 시스템 호출을 통해 DNS 기록을 가져온다. OS도 DNS 레코드 캐시를 저장하고 있다.
    3. 라우터 캐시를 확인한다. 라우터에서 DNS기록을 저장한 캐시를 확인한다.
    4. ISP 캐시를 확인한다. ISP(Internet Service Provider)는 DNS서버를 가지고 있는데, 해당 서버에서 DNS 기록 캐시를 검색할 수 있다.

3. 요청 URL(maps.google.com)이 캐시에 없다면, DNS쿼리로 IP 주소를 알아낸다.

  • DNS 쿼리는 웹사이트에 대한 올바른 IP주소를 찾을 때까지 인터넷에서 여러 DNS 서버를 검색하는 것이다.
    • 필요한 IP 주소를 찾거나, 찾을 수 없다는 오류 응답을 반환할 때까지 한 DNS서버에서 다른 DNS서버로 검색이 반복적으로 계속되는데 이를 재귀적 질의(Recursive Query)라고 한다.
    • 이 때 ISP의 DNS 서버를 DNS 리커서(DNS Recursor)라고 부르는데, DNS 리커서는 다른 DNS 서버에 답변을 요청하여 의도된 도메인 이름의 적절한 IP 주소를 찾는 일을 담당한다.
    • 다른 DNS 서버는 웹사이트 도메인 이름의 도메인 아키텍쳐를 기반으로 DNS 검색을 수행하므로, 네임 서버(Name Server)라고 한다.
  • DNS 아키텍쳐는 다음과 같이 나뉘어진다. 3차 도메인-2차도메인-최상위 도메인으로 나눠진다.
    • 아키텍쳐를 이용해 각 도메인별로 DNS 쿼리를 찾는 과정을 DNS 룩업(LookUp)이라고 한다.
    • DNS 룩업(LookUp)이란 DNS 서버에서 도메인 이름을 사용해 IP 주소를 알아내는 과정이다.

  • 한국도 아래와 같이 도메인이 나뉘어져있다.
    ex) kookmin.co.kr → 3차 도메인: kookmin & 2차 도메인: .co & 1차 도메인: .kr

  • 결과적으로 다음 과정으로 IP 주소를 찾게 된다.
    1. DNS 리커서 → 루트 네임 서버(Root Name Server) 접근
    2. 루트 네임 서버 → .com 도메인 네임 서버 리디렉션 → .google.com 도메인 네임 서버 리디렉션
    3. .google.com 네임 서버는 DNS 기록에서 maps.google.com 의 IP 주소를 찾아 DNS 리커서에게 반환하고, 이를 브라우저로 다시 보낸다.

4. 브라우저와 해당 서버의 TCP 연결을 시작한다.

  • IP(3계층, Network Layer) & TCP(4계층, Transport Layer) 프로토콜을 사용해 연결을 구축한다.
  • TCP를 사용하게 되면 3-way handshake 를 진행한다.
    • SYN → SYN + ACK → ACK
  • 3-way handshake가 완료되면, TCP 연결이 완료된다.

5. 브라우저가 웹서버에 HTTP 요청을 보낸다.

  • TCP 연결이 설정되면 데이터 전송이 시작된다.
  • 브라우저는 maps.google.com 웹 페이지에 HTTP(7계층, Application Layer) GET 요청을 보낸다.

6. 서버가 요청을 처리하고 응답(Response)을 보낸다.

  • 서버에는 웹 서버(Apache, Tomcat…)가 포함되어 있는데, 이는 브라우저로부터 요청을 수신하고, 해당 내용을 전달하여 응답을 읽고 생성하는 역할을 한다.
  • 응답(Response)은 JSON, XML, HTML 같은 특정 포맷으로 작성한다.

7. 서버가 응답을 보낸다.

  • 서버 응답에는 요청한 웹 페이지 + status code, Content-Encoding, Cache-Control 등이 포함된다.
  • Status Code에 따라서 HTTP 응답 결과를 확인할 수 있다.
    • [1xx] Information Response
      • 정보 메세지만을 나타낸다.
      • 서버가 요청을 받았으며, 클라이언트에게 계속 작업을 하라는 의미.
    • [2xx] Successful Response
      • 서버와의 요청이 성공함.
    • [3xx] Redirection Message
      • 요청 완료를 위해 추가 작업이 필요함.
      • ex) [301] Moved Permanently: 요청한 리소스의 URI가 변경되었음
    • [4xx] Client Error Response
      • 클라이언트의 Request에 에러가 있음.
    • [5xx] Server Error
      • 서버측의 오류로 request를 수행할 수 없음.

8. 브라우저가 HTML 컨텐츠를 보여준다.

  • HTML 골격을 렌더링하고, 웹페이지의 추가요소를 가져온다.
profile
Backend-Developer

0개의 댓글