# TCP/IP 4계층 모델 & PDU

# OSI 7계층과 TCP/IP 4계층

계층모델
TCP/IP 계층 모델은 OSI 모델이 탄생하기 전에 미국 국방부가 개발한 프로토콜입니다. 4개의 레이어로 구성되어 있으며, 네트워킹을 위한 표준 프로토콜 모델로 간주됩니다.

OSI 표준 모델은 ISO(국제 표준기구)에서 도입되었습니다. 7개의 레이어로 구성되었고, 시스템 아키텍처를 이해하고 설계하는 데 사용되는 개념적 모델로 통신에는 실질적으로 사용되지 않습니다.

# PDU란?

네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 PDU(Protocol Data Unit)라고 합니다.
PDU는 제어 관련 정보들이 포함된 '헤더', 데이터를 의미하는 '페이로드'로 구성되어 있으며 계층마다 부르는 명칭이 다릅니다.

# TCP/IP 모델의 4가지 계층

  • 애플리케이션(application) 계층 (=응용 계층)

    • 프로토콜 : FTP, HTTP, SSH, SMTP, DNS 등
    • PDU : 메시지
    • 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 계층입니다.
  • 전송(transport) 계층

    • 프로토콜 : TCP, UDP 등
    • PDU : 세그먼트(TCP), 데이터그램(UDP)
    • 송신자와 수신자를 연결하는 통신 서비스를 제공합니다.
    • 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공하며, 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할을 합니다.

      TCP와 UDP의 차이

      TCP : 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 '가상회선 패킷 교환 방식'을 사용합니다.
      UDP : 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식'을 사용합니다.

      패킷 교환 방식

      가상회선 패킷 교환 방식 : 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식을 말합니다.
      데이터그램 패킷 교환 방식 : 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있는 방식을 뜻합니다.

      TCP 연결 성립 과정

      TCP는 신뢰성을 확보하기 위해, 연결을 할 때는 '3-웨이 핸드셰이크(3-way handshake)',
      연결을 해제할 때는 '4-웨이 핸드셰이크(4-way handshake)' 과정을 진행합니다.

  • 인터넷(internet) 계층

    • 프로토콜 : IP, ARP, ICMP 등
    • PDU : 패킷
    • 장치로부터 받은 네트워크 패킷을 IP주소로 지정된 목적지로 전송하기 위해 사용되는 계층입니다.
    • 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달합니다.
    • 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징을 가지고 있습니다.
  • 링크 계층 (=네트워크 접근 계층)

    • PDU : 프레임(데이터 링크 계층), 비트(물리 계층)
    • 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 규칙을 정하는 계층입니다.
    • 링크 계층을 물리 계층과 데이터 링크 계층으로 나누기도 합니다.
      • 물리 계층 : 무선 LAN과 유선 LAN 을 통해 0과 1로 이루어진 데이터를 보내는 계층
      • 데이터 링크 계층 : 이더넷 프레임을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층

# 계층 간 데이터 송수신 과정

데이터송수신
호스트 간에 통신을 할 때, 응용 계층에서부터 네트워크 인터페이스 계층까지 4개의 계층을 차례로 거치면서 데이터가 전송됩니다.
송신을 하기 위해 캡슐화 과정을 거치고, 수신쪽에서는 비캡슐화 과정을 통해 이를 확인합니다.

  • 캡슐화 과정
    캡슐화
    캡슐화 과정은 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정입니다.

  • 비캡슐화(역캡슐화) 과정
    비캡슐화
    비캡슐화 과정은 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정입니다.

전송되는데이터
TCP/IP에 의해 처리되고 전송되는 데이터의 모습을 요약하면 위의 그림과 같습니다.

# TCP 연결성립과정

앞서 TCP는 신뢰성을 확보하기 위해 '3-웨이 핸드셰이크(3-way handshake)'와 '4-웨이 핸드셰이크(4-way handshake)'를 진행한다고 했습니다. 이에 대해 좀 더 자세히 알아보겠습니다.

  • 3-way handshake
    정확한 전송을 보장하기 위해 데이터 전송 전 서버와 클라이언트간의 세션을 수립하는 과정입니다.
    3wayhandshake
    (1단계) SYN : 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냅니다. ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 장치마다 다를 수 있습니다.
    (2단계) SYN+ACK : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보냅니다.
    (3단계) ACK : 클라이언트는 서버의 ISN+1한 값인 승인번호를 담아 ACK를 서버에 보냅니다.

  • 4-way handshake
    서버와 클라이언트간의 세션을 안전하게 종료하기 위해 진행되는 과정입니다.
    4wayhandshake
    (1단계) FIN : 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냅니다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다립니다.
    (2단계) ACK : 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냅니다. 그리고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어갑니다.
    (3단계) FIN : 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냅니다.
    (4단계) ACK : 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됩니다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제됩니다.

TIME_WAIT이 필요한 이유

  1. 지연 패킷이 발생할 경우를 대비하기 위해서입니다. 만약 패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제가 발생하기 때문에 이를 예방하기 위해서 TIME_WAIT 상태가 존재합니다.
  2. 두 장치가 연결이 닫혔는 지 확인하기 위해서입니다. 만약 LAST_ACK상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 계속 LAST_ACK로 되어 있기 때문에 접속 오류가 나타나게 될것입니다.

# 참고자료