OSI 7계층

태풍이 오는데도 비대면 수업은 꿈도 못꾸는 내일..

OSI 7계층

image
OSI 7 Layer는 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층간 상호 작동하는 방식을 정해 놓은 것으로, 국제표준화기구 ISO에서 개발한 모델입니다. 개방형 시스템 상호 연결 모델의 표준이고, 실제 인터넷에서 사용되는 TCP/IP는 OSI 참조 모델을 기반으로 상업적이고 실무적으로 이용될 수 있도록 단순화한 것입니다.
인터넷 초기, 여러 정보 통신 업체 장비들은 자신의 업체 장비들끼리만 연결이 가능해 호환성이 없었습니다. 이 문제를 해결하기 위해 모든 시스템들의 상호 연결에 있어 문제가 없도록 표준을 정한 것이 OSI 7계층입니다.
컴퓨터 통신 구조의 모델과 앞으로 개발될 프로토콜의 표준적인 뼈대를 제공하기 위해 개발된 참조 모델이므로 OSI 7 계층 모델을 알면 네트워크의 구성을 예측하고 이해할 수 있고, 네트워크에서 트래픽의 흐름을 꿰뚫어 볼 수 있습니다.
각 계층은 독립적이고, 서로 인접한 계층 간에만 의존합니다.. 필요에 따라 7계층으로 이루어질수도 있고, 1개 또는 일부의 계층으로만 이루어질수도 있지만, 두 컴퓨터가 서로 네트워크를 형성하여 데이터를 주고 받기 위해서는 7계층이 다 구현되어 있어야 합니다.

특징: 데이터 캡슐화

  • 사용자 데이터가 각 계층을 지나면서 하위 계층은 상위 계층으로부터 온 정보를 데이터로 취급하며, 자신의 계층 특성을 담은 제어정보(주소, 에러 제어 등)를 헤더화시켜 붙이는 일련의 과정입니다.
  • 데이터를 보낼 때는 응용 계층->…->물리 계층으로 이동합니다. 이 과정에서 캡슐화를 진행하는데, 각 계층은 다른 계층과 통신할 때 데이터에 특정 정보가 들어 있는 header와 footer를 추가한 뒤 다른 계층으로 전달합니다. PDU(Protocol Data Unit)은 프로토콜 데이터 단위이며 OSI 모델의 정보 처리 단위로, 캡슐화 과정에서 만들어집니다.
  • 마지막 물리 계층에서 PDU는 최종적인 모습으로 변하며, 데이터를 보내는 접점이 됩니다.
  • 데이터를 받은 컴퓨터는 PDU로부터 프로토콜의 header와 footer를 분석하며 거꾸로 올라가 마지막 응용 계층에 도달하면 원본 데이터를 읽을 수 있습니다.

각 계층

  1. 물리 계층(Physical Layer)
    • 7계층 중 최하위 계층으로 주로 전기적, 기계적, 기능적인 특성을 이용해 데이터를 전송합니다.
    • 데이터는 0과 1의 비트열, 즉 On/Off의 전기적 신호 상태로 이루어져 단지 데이터를 전달하는 역할을 하며, 따라서 알고리즘 및 오류제어 기능은 없습니다.
    • 장비로는 케이블, 리피터, 허브 등이 있습니다.
  2. 데이터링크 계층(Data-Link Layer)
    • 물리적인 연결을 통하여 인접한 두 장치 간의 신뢰성있는 정보 전송을 담당합니다.(Point to Point 전송)
    • 안전한 정보의 전달을 위해 오류 검출이나 재전송하는 기능이 존재합니다.
    • MAC 주소를 통해서 통신하며, 데이터의 단위는 프레임(Frame)입니다.
    • MAC 헤더에는 출발지와 목적지의 MAC 주소가 있습니다. 네트워크 계층에서 받은 패킷에 MAC 헤더(이더넷 헤더)를 추가해 프레임으로 만듭니다.
    • 장비로는 브리지, 스위치 등이 있습니다.
  3. 네트워크 계층(Network Layer)
    • 중계 노드를 통하여 전송하는 경우 어떻게 중계할 것인가를 규정합니다.
    • 라우팅 기능을 담당하는 계층으로, 최적의 경로를 설정하여 목적지까지 가장 안전하고 빠르게 데이터를 보내는 기능이 있습니다.
    • 목적지의 주소(IP Address)를 가지고 있어서 통신이 가능하며, 데이터 단위는 패킷(Packet)입니다.
    • 전송 계층에서 받은 세그먼트에 ‘출발지, 목적지의 IP 주소’를 추가해 패킷으로 반듭니다.
    • 장비로는 라우터, L3 스위치 등이 있습니다.
  4. 전송 계층(Transport Layer)
    • 종단 간 신뢰성있고 정확한 데이터 전송을 담당합니다.
    • 송신자와 수신자 간의 신뢰성있고 효율적인 데이터를 전송하기 위하여 오류 검출 및 복구, 흐름 제어와 중복 검사 등을 수행합니다.
    • 데이터 전송을 위해서 Port 번호를 사용하며, 대표적인 프로토콜로 TCPUDP가 있습니다.
    • 데이터 단위는 세그먼트(Segment)입니다.
      • TCP 3-Way Handshake를 통해 TCP를 연결합니다. 데이터를 전부 주고 받은 후, 4-Way Handshake를 통해 연결을 종료합니다.
    • 응용 계층에서 받은 메시지에 TCP 헤더를 붙입니다.
      1. TCP 헤더에는 출발지, 목적지 포트 번호를 가지고 있고 그 외에 시퀀스 번호, ACK, FIN, SYN, Window size 등을 가지고 있습니다.
      2. 데이터를 한 번에 보내기에 크다면 세그먼트를 나눠서 보냅니다.(TCP 헤더가 각 세그먼트에 전부 포함되어서 보내진다.)
      3. ACK = 시퀀스 + 데이터 크기, 다음 시퀀스 = ACK + 1
        • 수신 측에서 시퀀스를 이용해 나눠서 온 데이터를 조립합니다.
  5. 세션 계층(Session Layer)
    • 통신 장치 간 상호작용 및 동기화를 제공합니다.
    • 연결 세션을 만들고 삭제하는 역할을 하며 에러 발생 시 복구를 담당합니다.
    • UUID: 컴퓨터 정보 중에 고유한 값을 부여하기 위해서 사용하는 128비트 ID
  6. 표현 계층(Presentation Layer)
    • 데이터를 어떻게 표현할 지 정하는 역할을 합니다.
    • 데이터 부호화, 압축 복호화 등을 담당합니다.
    • Base64 인코딩/디코딩을 통해 바이너리 데이터를 텍스트 문자열 형식으로 바꾸거나, 그 반대로 바꿉니다.
  7. 응용 계층(Application Layer)
    • 사용자와 가장 밀접한 계층으로 인터페이스 역할을 합니다.
    • 프로세스 간의 정보 교환을 담당합니다.
    • HTTP, DNS 등이 있습니다.

Base64

  • 바이너리 데이터를 텍스트 문자열 형식으로 바꾸는 가장 고전적인 방식입니다.
  • 여전히 메일이나 웹에서 사용하는 MIME 형식에서 Base64 방식을 사용합니다.
  • 통계적으로 33~36% 정도의 오버헤드가 발생할 수 있습니다. image

TCP와 UDP

  • TCP(Transmission Control Protocol)
    • 패킷의 추적 및 관리를 합니다.
    • 연결형 서비스로, 신뢰적인 전송을 보장하기에 Handshaking하고 데이터의 흐름 제어와 혼잡 제어를 수행합니다. 따라서 신뢰성이 필요한 서비스에 주로 사용됩니다.
    • 3-Way Handshaking 과정을 통해 연결을 설정하고 4-Way Handshaking 과정을 통해 연결을 해제합니다.
  • UDP(User Datagram Protocol)
    • 비연결형 프로토콜이라 할당되는 논리적인 경로가 없고 각각의 패킷이 다른 경로로 전송됩니다.
    • 각각의 패킷은 독립적인 관계를 지니며, 데이터를 서로 다른 경로로 독립 처리한다.
    • 연결을 설정하고 해제하는 과정이 없다.
    • 패킷에 순서를 부여하여 재조립하거나 흐름제어 및 혼잡제어를 수행하지 않아 속도가 빠르지만 데이터 전송의 신뢰성이 낮습니다.
    • 연속성이 중요한 실시간 서비스에 주로 사용됩니다.

TCP 3-Way Handshake

image

TCP는 연결 지향 프로토콜로, 프로토콜을 통해 연속적으로 패킷의 상태 정보를 확인하고 유지합니다. 이런 이유로 데이터를 주고 받기 위해서는 송/수신자간 연결을 맺어야 하는데, 이 연결을 맺는 과정을 3-way handshaking이라고 합니다.

  1. 연결을 희망하는 쪽은 상대편에게 연결을 하고 싶다는 의미인 SYN을 전송합니다.
  2. 수신자는 응답으로 허락한다는 의미인 SYN과 잘 받았다는 의미인 ACK를 같이 보내줍니다.
  3. 마지막으로 송신자는 수신자의 응답을 잘 들었다는 의미로 ACK를 보내게 됩니다.

TCP 4-Way Handshake

image

4-Way Handshakeing은 3-Way와는 달리 연결을 끝는 과정입니다.

  1. 송신자는 연결을 끊고 싶다는 의미인 FIN을 수신자에게 보냅니다.
  2. 수신자는 요청을 잘 받았다는 의미인 ACK를 보냅니다.
  3. 수신자는 연결을 끊겠다는 의미인 FIN을 보냅니다.
  4. 송신자는 응답을 잘 받았다는 의미인 ACK를 보냅니다.
    • 이때 FIN과 ACK를 동시에 보내지 않는 이유는 수신자 측에서 송신자가 요청한 정보들을 아직 보내고 있는 상황일 수 있기 때문에 보내던 것들을 마저 보내고, 다 보내면 연결을 끊겠다는 FIN을 보내는 것입니다.

참고