Home 계층별 주요 프로토콜
Post
X

계층별 주요 프로토콜

계층별 주요 프로토콜에 대해 알아보자.


계층별 주요 프로토콜


Ethernet Protocol (OSI - 2 계층, TCP/IP - 1 계층)

이더넷 (Ethernet)은 사무실이나 가정에서 많이 사용하는 LAN에서 많이 활용되는 기술입니다.

네트워크에 연결된 각 기기들이 MAC 주소를 이용해 상호간에 데이터를 주고 받을 수 있도록 만들어졌습니다.

  • Ethernet Frame의 구성요소
    Ethernet

    • Preamble (7byte)
      첫 번째 필드로 0 과 1이 반복되는 7byte로 수신 시스템에게 프레임이 도착하는 것을 알려줍니다.
      물리계층에서 전송된 비트패턴으로 송신자와 수신자의 동기를 맞추는데 사용됩니다.
      7byte 크기이고, 항상 10101010… 으로 설정됩니다.

    • SFD(Start of Frame Delimeter) (1byte)
      물리계층이 끝나고 이제부터는 Ethernet 헤더라고 알려주는 신호 역할을 합니다.
      항상 1010101011이며 패킷 캡처 밖 영역입니다. 마지막 두 비트 11은 수신자에게 다음 필드가 목적지 주소라는 것을 알려준다.

    • Destination address (6byte)
      Frame을 수신하는 목적지의 MAC 주소입니다.

    • Source address (6byte)
      Frame을 송신하는 송신지의 MAC 주소입니다.

    • Ethernet Type (2byte)
      해당 프레임의 상위 계층 프로토콜 정보입니다.
      즉, 캡슐화 된 상위 프로토콜을 알려줍니다. (0x0800 = IPv4, 0x0806 = ARP)

    • Data
      상위 계층으로 부터 전달받은 데이터가 담겨있습니다.
      최소 46byte ~ 최대 1500byte 크기를 가진다.

    • Padding
      만약 Data Length가 46byte보다 작다면 46byte 크기를 임의로 채워주는 역할을 한다. (끝에 padding이 0으로 채워집니다.)

    • FCS(CRC) (4byte)
      Frame의 오류를 확인하는 필드입니다.
      Destination Addr + Source Addr + Length + Data 영역을 계산해서 에러를 판별합니다. 송신측의 데이터로부터 다항식에 의해 추출된 결과를 FCS에 붙여서 보내면 수신측에서는 동일한 방법으로 추출한 결과와 일치하는지 확인을 합니다.


ARP 프로토콜 (OSI - 3 계층, TCP/IP - 2 계층)

ARP 프로토콜은 같은 네트워크 대역에서 통신을 하기위해 필요한 MAC 주소를 IP 주소를 통해 알아오는 프로토콜입니다.

  • ARP 프로토콜의 구성 요소
    ARP-Protocol

    • Hardware type (4byte)
      하드웨어 주소(MAC) 유형을 나타내며, 가장 많이 사용되는 Ethernet의 경우 0x0001 으로 설정됩니다.

    • Protocol type (4byte)
      매핑 대상인 3계층에서 쓰일 프로토콜 주소의 유형을 나타내며, 가장 많이 사용되는 IPv4의 경우 0x0800 으로 설정됩니다.

    • Hardware Address Length (2byte)
      하드웨어 주소(MAC 주소)의 길이를 byte로 나타내며, Ethernet 상에서 6으로 설정됩니다.

    • Protocol Address Length (2byte)
      프로토콜 주소의 길이를 byte로 나타내며, IPv4의 경우 4로 설정됩니다.

    • Opcode
      ARP 패킷이 요청(Request) 또는 응답(Reply)에 따라 값이 바뀌게 되고 요청의 경우 1, 응답의 경우 2가 설정됩니다. (RARP의 요청은 3, RARP의 응답은 4가 설정됩니다.)

      RARP는 ARP 프로토콜의 반대 개념으로 MAC 주소를 통해 IP 주소를 알아오는 프로토콜입니다.

    • Source Hardware Address (6byte)
      출발지 MAC 주소를 나타내는 필드입니다.

    • Source Protocol Address (4byte)
      출발지 IP 주소를 나타내는 필드입니다.

    • Destination Hardware Address (6byte)
      목적지 MAC 주소를 나타내는 필드입니다.
      알아내는 것이 목표이기 때문에 요청인 경우 송신 측은 0으로 설정됩니다.

    • Destination Protocol Address (4byte)
      목적지 IP 주소를 나타내는 필드입니다.


IPv4 프로토콜 (OSI - 3 계층, TCP/IP - 2 계층)

패킷 교환 네트워크 상에서 데이터를 교환하기 위한 프로토콜입니다.
인터넷 프로토콜의 4번째 판이며, 전 세계적으로 사용된 첫 번째 인터넷 프로토콜입니다.

중복된 패킷을 전달하거나 패킷의 순서가 잘못 전달되는 등 데이터가 정확하게 전달되는 것을 보장하지는 않습니다. 이는 4 계층의 TCP 프로토콜에서 보장합니다.

  • IPv4 프로토콜의 구성 요소
    IPv4-Protocol

    • Version (4bit)
      IP 프로토콜 버전 필드입니다.
      IPv6은 구조 자체가 달라 IPv4를 의미하는 4bit(0100)가 고정적으로 사용됩니다.

    • IHL(Header Length) (4bit)
      실제 헤더 길이 필드로 Protocol의 총 길이 필드입니다.
      기본적으로 20byte에 option당 4byte가 추가 되며, 1byte이므로 최종 값을 4로 나눈 2진수 값이 들어갑니다.

    • TOS(Type of Service) (1byte)
      서비스의 형식을 나타내는 필드로 데이터의 중요도를 나타내는 파트로 예전엔 사용했지만 현재는 사용되지 않고 0으로 고정됩니다.

    • Total Length (2byte)
      Header에 데이터(Payload)까지 합쳐진 총 길이 필드입니다.

    • Identification + IP Flags + Fragment Offset (4byte) 하나의 세트로 데이터를 분할해서 전송할 때 사용합니다.

      • Identification (2byte) 원래 하나였던 데이터에게는 같은 값을 부여해 구분합니다.

      • IP FLags (3bit)

        • x (1bit) : 예약 필드, 사용하지 않음
        • D (1bit) : 패킷을 조각화하지 않으면 1
          (1로 설정 시 최대 길이를 넘어가는 패킷을 전송하지 않습니다.)
        • M (1bit) : 패킷을 조각화할 시 1
          (분할된 패킷을 보낼 때 뒤에 다른 패킷이 더 있다는걸 알려주는 필드입니다.)
      • Fragment Offset (13bit)
        분할된 패킷을 합치는 순서를 의미합니다.
        (데이터의 시작 부분으로부터 얼마나 떨어져 있는지 byte를 8로 나눈 값이 들어갑니다.)

    • TTL(Time to Live) (1byte)
      생명 주기로 무한 루프와 같은 패킷 전송 시 발생할 수 있는 오류를 대비합니다.

      최대 전달 횟수를 입력해 라우터 등의 장비를 거칠 때마다 1씩 줄어드어 0이되면 소멸합니다.

    • Protocol (1byte)
      상위 프로토콜이 무엇인 지 알려주는 필드입니다.
      (ICMP : 01, TCP : 06, UDP : 11 등)

    • Header CheckSum (2byte)
      현재 헤더에 오류가 있는 지 확인합니다.

    • Source Address (4byte)
      출발지의 IP 주소 필드입니다.

    • Destination Address (4byte)
      도착지의 IP 주소 필드입니다.

    • Option (개당 4byte)
      추가적으로 붙을 수도, 붙지 않을 수도 있는 옵션 필드입니다.
      개당 4byte로 최대 10개까지 추가 가능합니다.
      (Variable length, not common 등)

  • IPv4 조각화
    큰 IP 패킷이 적은 MTU (Maximum Transmission Unit)을 갖는 링크를 통해 전송될 때, 여러 개의 작은 패킷으로 조각화되어 전송됩니다.

    MTU : 최대 정송 단위

    • 패킷이 전달되는 과정에서 라우터마다 적합한 Frame으로 변환 필요
    • 재조립은 대부분 최종 목적지에서만 가능
    • IPv4에서는 중간 라우터에서도 조각화가 가능, IPv6는 불가능
    • 마지막 패킷에만 ICMP 프로토콜 Encapsulation
    • MTU 통과 후 Ethernet 프로토콜 Encapsulation

    fragmentation fragmentation


ICMP 프로토콜 (OSI - 3 계층, TCP/IP - 2 계층)

네트워크 컴퓨터 위의 운영체제에게 오류 메세지를 전송받는데 주로 사용됩니다.

  • ICMP 프로토콜의 구성 요소
    ICMP-Protocol

    • Type (1byte)
      메세지 타입 선택 필드로 0 ~ 30번 까지 다양하게 사용됩니다.
      (0 : 정상 응답, 8 : 요청, 3 : 경로 문제로 도착 불가능, 11 : 요청 시간 만료, 5 : 리 다이렉트 등)

    • Code (1byte)
      추가적인 메세지 정보 필드입니다.

    • CheckSum (2byte)
      헤더의 오류 확인


UDP 프로토콜 (OSI - 4 계층, TCP/IP - 3 계층)

비 연결형 서비스를 지원하는 프로토콜입니다.
인터넷 상에서 서로 정보를 주고 받을 때 신호 절차를 거치지 않고, 보내는 쪽에서 일방적으로 데이터를 전달합니다.

  • 단순하지만 속도가 빠르다.
  • 서비스의 신뢰성이 낮다.
  • Datagram의 도착 순서 변경, 중복, 누락의 문제가 발생할 수 있습니다.
  • 대표적으로 DNS 서버가 사용합니다.

  • UDP 프로토콜의 구성 요소 UDP-Protocol

    • Source Port (2byte)
      출발지의 Port 번호입니다.

    • Destination Port (2byte)
      도착지의 Port 번호입니다.

    • Length (2byte)
      UDP 헤더와 Data를 포함한 총 길이 (byte 단위)

    • CheckSum (2byte)
      Data 손상 확인


TCP 프로토콜 (OSI - 4 계층, TCP/IP - 3 계층)

연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용합니다.
인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함꼐 사용합니다.

  • 신뢰성 있는 데이터 전송
  • 데이터의 전송 순서 보장
  • 느린 속도
  • 패킷 추적 및 관리

  • TCP 프로토콜의 구성 요소 TCP-Protocol

    • Source Port (2byte)
      출발지의 Port 번호입니다.

    • Destination Port (2byte)
      도착지의 Port 번호입니다.
    • Seq (Sequence Number, 4byte)
      처음엔 랜덤한 값을 부여합니다. 동기화 후엔 처음 값 + 1이 부여됩니다. (신뢰성(*3Way Handshake) 및 흐름제어(sliding Window) 기능을 제공)

    • Ack (Acknowledgment Number, 4byte)
      수신하기를 기대하는 다음 byte 번호

    • Offset (4bit)
      헤더의 길이 필드입니다. 전체 길이를 4로 나눈 후 2진수로 표기합니다.

    • Reserved (4bit)
      예약 필드입니다. 현재는 사용하지 않습니다.

    • TCP Flags (1byte) 현재 패킷의 종류를 구분합니다.

      • U (URG) : 긴급 비트, 우선순위가 높은 데이터를 포함한 패킷
      • A (ACK) : 승인 비트, 응답을 해줄 때 사용하는 패킷
      • P (Push) : 밀어넣기 비트, TCP 버퍼가 쌓이기 전에 데이터를 전송하는 패킷
      • R (RST) : 초기화 비트, 데이터 교환에 문제 발생으로 연결을 초기화하는 패킷
      • S (SYN) : 동기화 비트, Seq 번호를 동기화하고 연결 수립을 요청하는 패킷
      • F (FIN) : 종료 비트, 서버와 클라이언트의 연결을 종료하겠다는 패킷
    • Window (2byte)
      남은 버퍼의 크기를 알려줍니다. 즉, “얼마만큼 더 보내”를 의미합니다.

    • CheckSum (2byte)
      에러 검사 필드입니다.

    • Urgent Pointer (2byte) 어디서부터 긴급 값인지 알려주는 플래그입니다. (TCP Flags의 U와 세트)
  • TCP의 통신 과정

    1. 연결 수립 과정
      TCP를 이용한 데이터 통신 시 가장 먼저 수행됩니다.

      • 순서
        1. Client가 Server에 요청 패킷을 보냅니다. (SYN)
        2. Server가 Client의 요청 받아들이는 패킷과 요청 패킷을 보냅니다. (ACK, SYN)
        3. Client가 이를 최종 수락하는 패킷을 보냅니다. (ACK) => 3 Way HandShake
    2. 데이터 송 수신 과정
      연결이 수립된 후 이어지는 과정으로 Seq와 Ack를 이어갑니다.

    • 페이로드를 포함한 데이터 송 수신 시 지켜야할 규칙
      1. 송신 측에서는 다시 보낼 때 Seq와 Ack는 동일합니다.
      2. 수신 측의 Seq는 송신 측에서 보낸 Ack로 바뀝니다.
      3. 수신 측의 Ack는 송신 측에서 보낸 Seq + 데이터의 크기로 바뀝니다.
    1. 연결 해제 과정
    • 순서
      1. Client는 응답을 주고 연결을 끊기 위해 종료 패킷을 보냅니다. (FIN)
      2. Server는 Client의 요청을 받아들이는 패킷을 보냅니다. (ACK)
      3. Server는 사용한 소켓을 정리하며 통신을 끝내는 종료 패킷을 보냅니다. (FIN)
      4. Client는 서버 패킷에 대한 응답으로 요청을 받아들이는 패킷을 보냅니다. (ACK) => 4 Way HandShake

    TCP-connect


HTTP 프로토콜 (OSI - 7 계층, TCP/IP - 4 계층)

HTTP (Hypertext Transfer Protocol) 프로토콜이란 Web 표준 데이터 (HTML, CSS, JS)를 서버에 요청하고 받아오는 프로토콜입니다.

인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이며, 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동합니다.

HTTPS는 HTTP에 SSL(Secure Socket Layer)를 추가해 보안을 강화한 것입니다.

  • WWW(월드 와이드 웹)에서 사용하는 핵심 프로토콜
  • 여러 종류의 데이터를 MIME로 정의하여 전송 가능
  • 요청/ 응답 동작 기반

MIME ( Multipurpose Internet Mail Extensions)
전자메일 시스템에서 버이너리 데이터(이미지, 동영상, 엑셀 등)을 보내기 위해 만들어졌습니다.
바이너리 데이터를 ASCII 코드로 변환하는 규칙으로 현재는 웹을 통해 여러 파일을 전달하는데 사용합니다.

  • HTTP 버전

    • HTTP 1.0
      ‘연결 수립, 동작, 연결 해제’가 반복하며 통신합니다.
      즉, 한 번 동작하면 연결이 해제되 다시 3 Way HandShake 해야 했습니다.

      • 네트워크 부하 문제 발생
    • HTTP 1.1
      연결하고 한 번 동작 후 해제하지 않고 여러 요청에 응답을 제공한 후 연결 해제합니다.

      • Multiple Request 처리 가능
      • Pipeline 방식의 Request / Response 진행
      • 빠른 속도
      • 캐시 사용
      • Server의 하나의 IP에 다수의 Web site 연결 가능


HTTP-Req-Res-Protocol

  • HTTP Reaquest

    • Request Line
      ” HTTP Method + 공백 + Web Page(URL) + 공백 + HTTP 버전 “으로 구성

      • HTTP Method (HTTP Verbs)

        1. GET : 존재하는 자원에 대한 요청
        2. POST : 새로운 자원을 생성

          POST 메서드로 PUT, DELETE의 동작도 수행 가능합니다.

        3. PUT : 존재하는 자원에 대한 변경
        4. DELETE : 존재하는 자원에 대한 삭제
      • URL
        URL 인터넷 상에서 특정 자원을 나타내는 유일한 주소입니다.
        schema://host[:port][/path][?query] 의 형태입니다.
        ex) http://ip주소:Port번호/폴더이름/파일이름

        포트는 http : 80, https : 443 은 생략 가능합니다.

      • HTTP 버전
        사용할 HTTP 프로토콜의 버전을 표시합니다.

    • Request Header
      서버에 대한 추가 정보로 선택적 헤더입니다.

      • Content-Length : message body의 길이
      • Content-Type : message body의 종류 (예시 : text/html)
      • Host : 요청된 URL에 나타난 호스트명 표시 (HTTP 1.1에서는 필수로 적습니다.)
      • Cookie : Client Local에 저장되는 key-value 쌍의 데이터 파일
      • User-Agent : Client Program에 대한 식별 가능 정보 제공
      • 그 외
    • Request Message

  • HTTP Response

    • Status Line
      ” HTTP 버전 + 공백 + 상태 코드 + 공백 + 상태 메세지 “으로 구성

      • 상태 코드

        • 100 ~ 199 : 단순 정보
        • 200 ~ 299 : 정상 성공 코드, Client 요청 성공
        • 300 ~ 399 : Client 요청이 수행되지 않아 다른 URL로 재지정
        • 400 ~ 499 : Client 요청이 불완전, Client측 오류
        • 500 ~ 599 : Client 요청 수행 불가, Server측 오류
      • 주요 상태 코드

        • 200 : OK , Client 요청 성공
        • 401 : Unauthorized, Client가 권한 없음
        • 403 : Forbidden, 요청 거부
        • 404 : Not Found, Client가 서버에 없는 자원 요청
        • 500 : Internal ServerError, 서버 멈춤이나 설정 오류
        • 503 : Service Unavailable, Session 수 초과
    • Response Header

      • Content-Type : 메세지 바디 데이터 타입
      • Set-Cookie : 쿠키를 생성하고 브라우저에 보낼 때 사용
      • Server : 사용하고 있는 웹 서버의 소프트웨어 정보
    • Response message Content-Type에 따른 바디 (예시: JSON 데이터)


TCP/IP 동작 순서

TCP/IP-Total

  • 송신 측 브라우저에서 주소창에 특정 주소를 입력합니다.
  • 보낼 패킷의 HTTP 헤더가 HTTP Request를 통해 채워집니다.
  • 보낼 패킷의 IP 헤더를 채우기 위해 DNS 서버에서 도메인의 IP 주소를 응답 받습니다.
  • 보낸 패킷의 IP 헤더가 채워지고 TCP 헤더를 채우기 위해, 클라이언트가 웹 서버와 TCP 연결합니다. (3 Way HandShake)
  • 마지막으로 MAC 주소(모를시 ARP 헤더를 추가해 알아냅니다.)와 Ethernet 헤더를 추가해 패킷을 전송합니다.
  • 수신측 서버는 데이터를 받아들여 헤더를 열어보며 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달합니다.
  • 수신측 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP 리퀘스트를 수신할 수 있습니다.
  • 클라이언트는 응답 받은 HTML을 브라우저에 띄웁니다.
  • 클라이언트와 웹 서버간 TCP 연결을 종료합니다. (4 Way HandShake)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.