[CS/네트워크] 데이터 전송의 '신뢰성' 수호자

선우·2025년 12월 8일

CS

목록 보기
3/20

[CS/네트워크] 03. 전송 계층: 데이터 전송의 '신뢰성' 수호자

⚡ 한 줄 요약: 데이터 유실이나 순서 뒤바뀜이 없는 '신뢰성'을 보장하고, 포트 번호를 통해 데이터를 정확한 응용 프로그램에 배달하는 전송 계층의 핵심 원리를 파악합니다.

1. 👋 들어가며: 전송 계층은 왜 존재할까요?

우리가 인터넷으로 대용량 데이터를 보낼 때,
데이터는 한 번에 덩어리째 이동하지 않고 아주 작은 패킷 단위로 쪼개져서 전송됩니다.

이 과정에서 일부 패킷이 사라지는 손실이 발생하거나, 도착하는 순서가 뒤섞이는 문제가 생길 수 있습니다.
전송 계층은 이러한 불안정한 네트워크 환경 위에서 '신뢰할 수 있는 통신'을 가능하게 만드는 품질 관리자 역할을 수행합니다.

  • 🧐 Why:
    • 물리적으로 떨어진 두 기기가 서로의 상태를 확인하고, 한 비트의 오차도 없이 데이터를 주고받기 위한 약속이 필요하기 때문입니다.
  • 🎯 Goal:
    • 전송 계층의 핵심 키워드인 '신뢰성'을 이해하고, TCP와 UDP의 차이점 및 연결 설정 과정을 마스터합니다.

📂 2. 전송 계층: 네트워크의 '신뢰성' 수호자

네트워크 계층이 목적지까지 가는 '길'을 찾는다면, 전송 계층은 그 길을 통해 가는 데이터가 '무사히' 도착하도록 책임집니다.

📌 2-1. 신뢰성

  • 정의: 전송 계층을 관통하는 가장 핵심적인 키워드는 바로 '신뢰성'입니다.
    이는 데이터를 정확하고 완전하게, 즉 손실 없이 순서대로 전달하는 것을 의미합니다.
  • 신뢰성이 중요한 이유:
    • 신뢰성이 보장되지 않으면 응용 프로그램의 사용자 경험이 크게 저하됩니다.
    • 대용량 데이터는 한 번에 가는 게 아니라 작은 패킷 단위로 쪼개져서 전송됩니다.
    • 이 과정에서 일부 패킷이 사라지거나(손실), 도착 순서가 뒤섞이는 문제가 빈번하게 발생하기 때문입니다.
  • 전송 계층의 역할:
    • 데이터가 손실 없이 정확히 전달되도록 다양한 매커니즘을 제공합니다.
    • 전송 계층은 데이터의 헤더에 다양한 정보(순서 번호, 오류 제어 등)를 추가하여,
      쪼개진 패킷들이 무사히 조립될 수 있도록 관리하는 역할을 담당합니다.
    • 즉, 데이터의 '품질'을 보장하는 최종 책임자입니다.

📂 3. TCP vs UDP: 목적에 따른 두 가지 전략

전송 계층에는 성격이 정반대인 두 가지 프로토콜이 있습니다.
이들의 차이점을 정확히 아는 것이 네트워크 공부의 핵심입니다.

📌 3-1. 두 프로토콜의 결정적 차이

  • TCP(Transmission Control Protocol)
    • 특징:
      • 신뢰성을 최우선으로 하는 연결 지향적 프로토콜입니다.
    • 핵심 원리:
      • 데이터를 주고받기 전, 3-way handshake 과정을 통해 클라이언트와 서버 간에 견고한 커넥션을 먼저 맺습니다.
    • 기능:
      • 데이터의 순서 보장, 흐름 제어, 오류 복구 기능을 모두 수행하며 20 ~ 60바이트의 복잡한 헤더를 가집니다.
  • UDP(User Datagram Protocol)
    • 특징:
      • 신뢰성보다는 속도와 효율성을 중시하는 비연결 지향적 프로토콜입니다.
    • 핵심 원리:
      • 연결 설정 과정 없이 데이터를 즉시 전송하며, 오류 제어나 순서 보장을 하지 않는 대신
        헤더가 8바이트로 매우 가볍습니다.

📌 3-2. 서비스 목적에 따른 사용 사례

  • 동영상 스트리밍과 UDP:
    • 스트리밍이나 온라인 게임에서는 속도가 생명입니다.
    • 화면에서 한두 프레임이 깨지거나 드랍되더라도 전체 영상이 끊기지 않고 실시간으로 재생되는 것이
      훨씬 중요하기 때문에, 확인 과정을 생략하는 UDP를 주로 사용합니다.
  • 신뢰성이 중요한 TCP:
    • 데이터가 단 1비트라도 틀리면 안 되는 웹 브라우징(HTTP), 파일 전송(FTP), 이메일 등은 반드시 TCP를 기반으로 동작합니다.

💡 비유로 이해하기

  • TCP는 '등기 우편':
    • 수령인의 사인을 받아야 하고(handshake), 배송 확인을 꼼꼼히 하며, 만약 분실되면 다시 보내줍니다.
    • 안정적이지만 확인 절차 때문에 조금 느립니다.
  • UDP는 '일반 전단지 배포':
    • 집집마다 빠르게 전단지를 뿌리는 것과 같습니다.
    • 누군가 전단지를 못 받았거나 바람에 날아가더라도 기사님은 멈추지 않고 계속 뿌립니다.
    • 꼼꼼함은 부족해도 속도는 압도적입니다.
  • 결론:
    • 전송 계층은 패킷 조각들이 흩어지지 않게 관리하는 품질 관리팀이며,
      꼼꼼하게 관리할지(TCP) 아니면 속도에 올인할지(UDP)를 결정한다고 이해하면 완벽합니다.

📂 4. 연결의 시작: 3-way Handshake

데이터를 주고받기 전, 송신자와 수신자가 서로의 존재를 확인하고 통신 준비를 마치는 신뢰의 프로세스입니다.

📌 4-1. 세번의 악수 과정

  • 이름의 유래:
    • 그림처럼 총 3번의 데이터 전송이 일어나기 때문에 '3-way Handshake'라고 부릅니다.
    • 이 과정을 통해 양측은 데이터를 주고받을 완벽한 준비를 마칩니다.
  • TCP 헤더의 역할:
    • SYN(Synchronization):
      • 연결 요청 신호입니다.
      • TCP 헤더에는 여러 플래그 비트(1비트 공간)가 있는데,
        이 중 SYN 비트를 1로 설정해서 보내는 것이 "나랑 연결할래?"라는 의미입니다.
    • 시퀀스 번호:
      • 처음 보낼 때 완전한 난수(랜덤 값)를 담습니다.
      • 만약 이 번호가 예측 가능하면 해킹의 위험이 크기 때문에 보안을 위해 난수를 생성합니다.
  • 서버의 응답과 확인:
    • 서버는 클라이언트의 요청을 승인하는 ACK, ACK 번호와 자신의 연결 요청인 SYN을 함께 보냅니다.
    • 이때 ACK 넘버는 클라이언트로부터 받은 랜덤 시퀀스 넘버에 1을 더한 값입니다.
    • 이 정보 역시 TCP 헤더에 포함됩니다.
  • 최종 연결 완료:
    • 클라이언트가 마지막 ACK를 보내고 서버가 이를 받으면, 양쪽에서 데이터를 담을 버퍼를 각각 생성합니다.
    • 이 모든 과정이 끝나면 비로소 송/수신자 사이에 '커넥션'이 생성된 것입니다.

📌 4-2. HTTP가 TCP를 선택한 이유

  • 리소스의 파편화:
    • 웹 페이지 하나를 열면 단순히 HTML 문서 하나만 받는 게 아닙니다.
    • CSS, JavaScript, 이미지, 광고 데이터 등 수많은 리소스를 함께 받아야 하며,
      이들은 여러 개의 패킷으로 나뉘어 전송됩니다.
  • 신뢰 전송:
    • 이 데이터들을 하나라도 누락 없이 안정적으로 받기 위해 HTTP는 전송 계층에서 TCP 프로토콜을 사용합니다.
  • HTTP 자체는 비연결적(Stateless)이지만,
    그 안에서 실제 데이터를 실어 나르는 과정은 연결 지향적인 TCP가 담당하며 안정성을 보장하고 있는 것입니다.

📂 5. 연결의 종료: 4-way Handshake

데이터 전송이 모두 끝났다면, 맺었던 커넥션을 안전하게 해제하고 네트워크 자원을 정리해야 합니다.

📌 5-1. 네 번의 작별 인사

  • FIN(Finish):
    • 연결 종료를 요청할 때 사용합니다.
    • SYN과 마찬가지로 TCP 헤더의 FIN 비트를 1로 설정해서 보냅니다.
  • 작동 원리:
    • 이름처럼 4번의 데이터 교환을 통해 커넥션을 완전히 해제합니다.

📌 5-2. 왜 시작(3단계)과 끝(4단계)의 횟수가 다를까?

가장 핵심이 되는 차이는 '응답과 요청을 동시에 할 수 있는가'에 있습니다.

  • 연결할 때(3-way):
    • 서버가 클라이언트의 요청에 답하면서(ACK), 동시에 "나도 너랑 연결하고 싶어"라는 요청(SYN)을 한 번에 묶어서 보낼 수 있습니다.
    • 서로 연결하겠다는 의사만 확인하면 되기 때문입니다.
  • 끊을 때(4-way):
    • 클라이언트가 "나 이제 끝낼래(FIN)라고 보내면, 서버는 일단 "응 확인했어(ACK)"라고 먼저 답합니다.
    • 하지만 서버는 아직 보내야 할 데이터가 남았거나 하던 일이 마무리되지 않았을 수 있습니다.
    • 그래서 본인의 일을 모두 마친 뒤에야 비로소 별도로 "나도 이제 끝낼 준비 됐어(FIN)"라고 보냅니다.
  • 결론:
    • 연결을 끝낼 준비가 서로 다를 수 있기 때문에, ACK와 FIN을 합치지 못하고 4단계로 나누어 진행하는 것입니다.

💡 비유로 이해하기

  • 3-way Handshake (소개팅 시작)
    1. 나: "안녕하세요, 우리 대화 좀 할까요?" (SYN)
    2. 상대: "네 좋아요! 저도 대화하고 싶어요!" (ACK + SYN)
    3. 나: "네, 그럼 대화 시작하죠! (ACK)" → 커넥션 생성
  • 4-way Handshake (소개팅 끝)
    1. 나: "이제 늦었으니 전 가볼게요." (FIN)
    2. 상대: "아, 가시는군요. 확인했어요." (ACK) → 잠시 대기(상대는 짐을 챙겨야 함)
    3. 상대: "(짐 다 챙긴 후) 저도 이제 준비 다 됐어요. 안녕히 가세요!" (FIN)
    4. 나: "네, 잘 가세요!" (ACK) → 커넥션 해제

📂 6. 전송 계층의 핵심, TCP 총정리

📌 6-1. TCP의 정의와 존재 이유

TCP는 데이터 전송의 신뢰성을 최우선으로 하는 프로토콜입니다.
단순히 데이터를 보내는 것에 그치지 않고, 다음의 기능을 완벽하게 수행합니다.

  • 신뢰성 있는 연결: 송신자와 수신자 사이의 논리적인 통로를 확보합니다.
  • 데이터 순서 보장: 쪼개진 패킷들이 순서대로 조립될 수 있게 합니다.
  • 흐름/오류 제어: 데이터가 깨지거나 수신자가 감당 못 할 만큼 빠르게 오는 것을 방지합니다.

📌 6-2. TCP 헤더 구조: "이것만은 꼭 기억하자"

핵심 필드역할 및 쓰임새
포트 번호어떤 애플리케이션(프로세스)으로 데이터를 전달할지 결정하는 주소입니다.
시퀀스 번호패킷의 전송 순서를 나타내며, 난수로 시작하여 해킹 위험을 방지합니다.
ACK 번호상대방으로부터 다음에 받기를 기대하는 데이터 번호를 나타냅니다.
컨트롤 비트SYN(연결 요청), ACK(확인 응답), FIN(종료 요청) 등 현재 패킷의 상태를 알립니다.
윈도우 사이즈수신자가 현재 한 번에 받을 수 있는 데이터의 양(버퍼 여유 공간)을 알려줍니다.
체크섬전송 도중 데이터에 오류가 생겼는지 확인하는 '몸무게 재기' 역할을 합니다.

📌 6-3. TCP가 신뢰성을 보장하는 3가지 매커니즘

  1. 연결 관리 (Handshake)

    • 생성(3-Way): SYN과 ACK를 주고받으며 송신자와 수신자 간의 커넥션을 맺습니다.
    • 해제(4-Way): FIN과 ACK를 사용하여 안전하게 연결을 종료하고 자원을 반납합니다.
  2. 오류 감지 및 재전송

    • 이론적 모델인 RDT 3.0을 실제로 구현하여 손실 없는 전송을 보장합니다.
    • 체크섬으로 에러를 찾고, ACK가 오지 않으면 타이머 기반 재전송이나 빠른 재전송을 통해 유실된 데이터를 보호합니다.
    • 시퀀스 번호를 사용하여 데이터가 뒤죽박죽 와도 원래 순서대로 조립합니다.
  3. 속도 및 트래픽 조절

    • 흐름 제어: 수신자의 처리 속도에 맞춰 윈도우 사이즈를 조절하며 전송량을 결정합니다.
    • 혼잡 제어: 네트워크 트래픽 과부하를 방지하기 위해 전체적인 데이터 전송 속도를 유연하게 조절합니다.

📂 7. 전송 계층의 교통정리: 멀티플렉싱과 디멀티플렉싱

컴퓨터 안에는 수많은 앱(프로세스)이 동시에 떠 있습니다.
이들이 엉키지 않고 하나의 네트워크 통로를 사이좋게 나누어 쓰는 원리를 알아봅니다.

📌 7-1. 데이터를 한데 모으기: 멀티플렉싱

  • 정의:
    • 여러 애플리케이션 프로세스에서 보내는 데이터를 하나의 전송 계층 프로토콜(TCP/UDP)을 통해 처리하는 과정입니다.
  • 핵심 역할:
    • 여러 프로세스가 네트워크를 동시에 사용할 수 있도록 하여 여러 데이터를 한 번에 전송하는 역할을 합니다.
  • 작동 과정:
    1. 애플리케이션이 데이터를 전송 계층으로 전달합니다.
    2. 전송 계층(TCP/UDP)이 각 데이터에 출발지 포트 번호목적지 포트 번호를 추가합니다.
    3. 완성된 패킷을 네트워크 계층으로 전달하여 목적지로 전송합니다.
  • 실전 예시:
    • 사용자가 웹 사이트(HTTP, 포트 80)와 이메일(SMTP, 포트 25)을 동시에 사용하면
      전송 계층은 각각의 포트 번호를 붙여 데이터를 한꺼번에 실어 나릅니다.

📌 7-2. 데이터를 알맞게 배달하기: 디멀티플렉싱

  • 정의:
    • 수신된 데이터 패킷을 각 애플리케이션 프로세스로 분배하는 과정입니다.
  • 핵심 역할:
    • 수신된 패킷의 포트 번호를 확인하여 올바른 애플리케이션에 전달하는 역할을 합니다.
  • 작동 과정:
    1. 수신된 데이터 패킷을 전송 계층에서 확인합니다.
    2. 패킷의 목적지 포트 번호를 확인하여 어떤 애플리케이션이 받아야 하는지 결정합니다.
    3. 해당 애플리케이션 프로세스에 데이터를 전달합니다.
  • 실전 예시:
    • 웹 서버는 포트 80에서 여러 클라이언트의 요청을 한꺼번에 받습니다.
    • 이때 전송 계층은 각 패킷에 적힌 출발지 포트 번호를 보고, 어떤 클라이언트와 연결된 것인지 구분하여 정확한 소켓에 데이터를 전달합니다.

💡 비유로 이해하기: 아파트 우편함 시스템

  1. 멀티플렉싱 (발신측):
    • 아파트 101동 사람들이 각자 편지를 씁니다.
    • 경비 아저씨(전송 계층)는 편지 봉투에 보내는 사람 호수(출발지 포트)받는 사람 호수(목적지 포트)를 적어 하나의 커다란 우편 자루에 담아 우체국으로 보냅니다.
  2. 디멀티플렉싱 (수신측):
    • 우편 자루를 받는 상대방 아파트 경비 아저씨는 자루를 풀어 편지 봉투에 적힌 호수(목적지 포트)를 하나씩 확인합니다.
    • 그리고 80호 편지는 80호 앱에, 25호 편지는 25호 앱에 정확히 넣어줍니다.
  • 핵심:
    • '포트 번호'라는 이름표 덕분에 수많은 앱이 하나의 네트워크망을 공유해도 대화가 섞이지 않는 것입니다.

🎁 8. 정리

🔑 요약

  • 전송 계층의 핵심 키워드는 신뢰성으로, 패킷 손실이나 순서 뒤바뀜 문제를 해결하여 데이터 품질을 보장합니다.

  • TCP는 3-way handshake를 사용하는 연결 지향적 프로토콜로 신뢰성이 높으며,
    UDP는 연결 설정 없이 속도를 우선시하여 스트리밍 등에 적합합니다.

  • 연결 설정은 3-way handshake로 진행되지만, 해제는 서버의 남은 작업 처리를 위해 4-way handshake로 단계를 나누어 신중하게 진행합니다.

  • 포트 번호는 멀티플렉싱과 디멀티플렉싱의 핵심 주소이며, 이를 통해 수많은 애플리케이션 데이터가 섞이지 않고 정확히 배달합니다.

  • TCP 헤더의 시퀀스 번호ACK 번호는 데이터의 순서를 맞추고 유실된 패킷을 재전송하게 만드는 신뢰성 보장의 핵심 장치입니다.

0개의 댓글