전송 계층

  • PDU(Protocol Data Unit/계층의 전송 단위)
    프로토콜에 따라 (TCP)Segment 또는 (UDP)Packet(Datagram)

  • 네트워크에서 송신지와 수신지 간의 응용 프로그램 간 통신 서비스(논리적 통신)를 제공

    그럼 네트워크 계층과 다른게 뭐에요?
    네트워크 계층은 기기(호스트) 간 연결 이라면,
    전송 계층은 기기 내의 프로그램 작업(프로세스) 간의 연결 입니다
    (집을 찾는 것과 집 주인을 찾는 게 다른 느낌인 거죠)

  • 포트/포트 번호를 사용하여 여러 네트워크 서비스를 동시에 지원할 수 있음
    ( IP Address + Port Number = Socket Address = 연결될 응용 프로그램을 식별 )

image

  • 주요 전송 계층 프로토콜로는 TCPUDP가 있음
    (프로토콜 경화(=신뢰성이나 효율을 높이기 위해 기존 절차대로 설계)로 인해 가장 널리 사용됨)

  • TCP는 가상 회로와 종단 간(End-To-End) 신뢰성 있는 통신을 지원함

  • UDP는 실시간 멀티미디어 통신에서 높은 처리량과 짧은 대기 시간을 제공함

핵심 기능

연결 지향(Connection-Oriented) 통신 지원

  • 연결 지향 통신이란 데이터가 상위 통신 계층에 올바른 순서로 전달되도록 보장해주는 통신

image

  • 회로 교환(Circuit switching) 통신

    • 두 네트워크 노드가 통신하기 전에, 네트워크를 통해 전용 통신 채널을 설정하여 통신 네트워크를 구현하는 방법

    • 주로 아날로그(물리적) 통화 방식에서 사용하였음 (e.g. 전화망)

    • 통신 동안 전체 대역폭을 보장하고 연속적인 통신 경로를 제공(실시간)하지만,
      전체 대역폭을 보장하기에 사용하지 않는 채널의 용량을 낭비하여 상대적으로 비효율적

  • 가상 회로 교환(Virtual circuit switching) 통신

    • 네트워크 대역폭을 더 효율적으로 활용가능한 패킷 교환 방식을 이용해 회로 교환 방식을 구현한 통신
      (연결 지향형 패킷 교환이라 칭하기도 함)

    • TCP가 가상 회로 교환 방식의 일종임

    image

신뢰성(오류 감지)

  • 패킷은 네트워크 혼잡 및 오류로 인해 전송 중 손실될 수 있음

  • 이러한 손실을 감지하는 Checksum 과 같은 오류 감지코드를 통해 데이터의 신뢰성을 보장함

  • 수신자는 송신자에게 ACK(잘왔어요) 또는 NACK(안왔어요) 메시지를 보내어 올바른 수신을 확인할 수 있음

  • 자동 반복 요청 체계를 사용하여 손실되거나 손상된 데이터를 다시 전송할 수 있음

  1. Checksum

    • 데이터가 전송 중에 손상되지 않았는지 확인하기 위한 계산값

    • 송신자는 체크섬을 계산해 전송하고, 수신자는 받은 데이터와 계산된 값이 일치하는지 확인

  2. CRC (Cyclic Redundancy Check)

    • CRC는 더 강력한 오류 검사 방식

    • 데이터에 대한 다항식 나눗셈을 통해 오류를 탐지

  3. ARQ (Automatic Repeat reQuest)

    • 오류가 발생했을 때 송신자가 데이터를 재전송하는 오류 수정 기법

    • 수신자가 오류를 탐지하면 송신자에게 재전송을 요청하고, 송신자는 해당 데이터를 다시 보냄

    • e.g. Stop-and-Wait, Go-Back-N ARQ, Selective Repeat

  4. ACK 와 NACK

    • ACK는 수신자가 송신자에게 데이터가 정상적으로 도착했음을, NACK는 오류가 발생했음을 알리는 메시지

    • 송신자는 ACK를 받은 후에 다음 데이터를 전송가능

    • 송신자는 NACK을 받은 후, 오류가 발생한 데이터를 재전송

    • 수신자는 오류 발생 시 송신자에게 직접적인 피드백을 제공

  5. Sequence Number

    • 송신자가 보낸 데이터 패킷에 부여하는 번호로, 데이터의 순서를 추적하는 데 사용

    • 수신자는 패킷의 순서를 확인하고 오류가 발생했을 때 재전송을 요청

    • 패킷이 중복되었을 경우 이를 감지하여 순차적인 데이터 흐름을 유지함

흐름 제어(Flow control)

  • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위해
    수신 측의 Socket buffer가 수용 가능한 데이터 양을 기반으로 하여 송신 측에서 전송량을 조절하도록 하는 프로세스
    (Socket buffer : 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역 )
  1. Stop-and-wait

    • 가장 간단한 흐름 제어 형태로 직관적인게 장점

      1. 메시지를 여러 프레임으로 나눠 송신자는 수신자에게 한 번에 하나의 프레임을 전송함

      2. 송신자는 타임아웃(모든 프레임 후에 지정된 시간) 동안 수신 확인(ACK)을 기다림

      3. 프레임을 받은 수신자는 ACK를 보내 송신자에게 데이터 프레임이 올바르게 수신되었음을 알림

      4. ACK를 받거나 시간 초과 발생 시 1로 돌아감

    • 한 번에 하나의 프레임만 전송하기에 송신자가 ACK를 받기 전까지 다른 프레임을 보내지 못해 비효율적임

    image

  2. Sliding window

    • 수신기가 송신기의 윈도우가 가득 찰 때까지 데이터 전송 권한을 부여하는 흐름 제어 방법
      ( 송신기의 윈도우 라는 용어는 수신기가 아직 확인하지 않은 총 패킷 수의 논리적 경계를 뜻함 )

    • 고정 크기 시퀀스 번호를 사용하여 무제한의 패킷을 통신할 수 있도록 함

    • 수신기는 각 확인 패킷에서 송신기에 현재 최대 수신기 버퍼 크기(윈도우 경계)를 알림

    • 수신 실패 시 작동 유형에 따라 간단한 Stop-and-wait을 제외하고도 아래와 같은 추가 유형이 있음

    1. Go back N

      • 수신기는 시퀀스의 다음 패킷 외에는 어떤 패킷도 수락하지 않음

      • 패킷이 전송 중에 손실되면 손실된 패킷이 재전송될 때까지 다음 패킷은 무시

      • 송신기는 손실된 패킷과 같은 윈도우 내 패킷들을 전부 다시 보내게 됨

      image

    2. Selective repeat

      • 송신기와 수신기가 모두 시퀀스 번호 윈도우를 갖는 연결 지향 프로토콜로,
        이 프로토콜에는 확인 없이 보낼 수 있는 최대 메시지 수가 있음

      • 이 창이 가득 차면 가장 빠른 미처리 메시지에 대한 확인을 받을 때까지 프로토콜이 차단

      • 송신기는 손실된 패킷만 수신기에게 재전송하게됨

      • Go back N 보다 효율적이지만 수신기가 할 일이 생겨 수신기 쪽에 부하가 좀 더 생김

      • 대부분의 Sliding window의 경우 이 방법을 사용

      image

  • Fast retransmit

    • 송신기가 지정된 시간 내에 특정 Segment에 대한 확인이 수신되지 않으면 바로 Segment를 재전송 해주는 흐름 제어기술

혼잡 회피(Congestion avoidance)

  • 네트워크 혼잡은 네트워크 노드 또는 링크가 처리할 수 있는 것보다 많은 데이터를 전송할 때 발생하는 서비스 품질 저하 현상으로,
    패킷 손실, 지연, 새로운 연결 차단 등의 문제를 야기하며 네트워크 처리량에 부정적인 영향을 미침

  • 네트워크 혼잡 붕괴는 혼잡으로 인한 패킷 손실을 보상하기 위해 공격적으로 재전송을 사용하는 네트워크 프로토콜로 인해
    초기 부하가 일반적으로 네트워크 혼잡을 유발하지 않는 수준으로 감소한 후에도
    혼잡을 증가시킬 수 있는 상태가 되어 네트워크 성능이 급격히 저하되는 현상을 뜻함

  • 혼잡 회피란 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하여 네트워크 혼잡 붕괴를 방지하기 위한 방식
    ( 네트워크가 아닌 각 라우터 의 기능 )

  • 아래와 같은 과정들을 통해 혼잡 회피를 구현하게 됨

    • 라우터는 혼잡 발생을 사전에 감지하고 패킷을 선택적으로 삭제하여 네트워크 성능을 개선해주는 랜덤 조기 감지(RED) 알고리즘
      혼잡이 발생할 경우 네트워크 패킷을 재정렬하거나 선택적으로 삭제하여 활성화된 대기열을 관리해주는 Network scheduler 기능,
      패킷 손실 없이 혼잡을 직접 신호로 알리는 명시적 혼잡 알림(ECN) 방식과 같은 혼잡 제어를 통해 네트워크 혼잡을 조절해줌

    image

    • TCP 혼잡 제어 방식인 혼잡 제어 알고리즘들을 통해 네트워크의 혼잡도를 조절해줌
      (자세한 설명은 아래 TCP 구역에서)

다중화(Multiplexing)

  • 전송 매체를 공유하는 것이 주요 목적

  • 다중화(Multiplexing)란 아날로그 또는 디지털 신호를 공유 매체를 통해 하나의 신호로 결합하는 방법으로
    통신 채널의 용량여러 논리적 채널로 분할해주는 역할을 함

  • 역다중화(Demultiplexing)란 다중화로 결합된 하나의 신호여러 신호로 재분배 시켜주는 방법을 뜻함
    (다중화와 역다중화를 합쳐서 다중화)

image

  1. 각 목적지가 다른 세 사람들이 택시(전송 매체)를 이용하려 함

  2. 하지만 목적지로 가기 위해선 세 사람 모두 공통적인 인천 공항을 지나야함

  3. 돈을 아끼기 위해 세 사람은 같이 택시를 타서(다중화) 인천공항까지 도착함

  4. 인천 공항에 도착한 세 사람은 각각 목적지에 알맞는 비행기를 탐(역다중화)

  • 다중화/역다중화 과정을 통해 포트는 단일 노드에서 여러 연결 종단점(Endpoint)을 제공할 수 있음
    (포트 : 연결 종단점(Endpoint)을 고유하게 식별하고 데이터를 특정 서비스로 전송하기 위해 할당된 번호 )

  • 알려진 포트(0 ~ 1023), 등록된 포트(1024 ~ 49151), 동적 포트(49152 ~ 65535) 등의 포트 종류가 있음

  • 포트를 이용해 하나의 공인 IP를 여러 사설 IP와 연결해주는 기술을 NAPT(Network Address Port Translation)라 함
    (추가로 사설 IP와 공인 IP를 대응해주는 기능 자체는 NAT 라 불림)

TCP(Transmission Control Protocol)

  • 네트워크 계층의 IP(Internet Protocol)을 보완한 초기 네트워크 구현에서 유래함
    ( 따라서 TCP/IP를 인터넷 프로토콜 모음 이라 부르기도 함 )

  • TCP는 인터넷에서 신뢰할 수 있는 바이트 스트림 전송을 제공하는 연결 지향적 프로토콜
    (바이트 스트림: 데이터를 바이트 단위로 연속적으로 전송하는 흐름)

  • 높은 신뢰성을 보장함

  • 양방향 통신(Full-Duplex) 방식으로 두 통신기기는 동시에 데이터를 주고 받을 수 있으며, 일방적으로 데이터를 보낼 수 있음

  • 점대점(Point to Point) 방식으로 연결이 정확히 2개의 종단점(Endpoint)을 가지고 있음

  • TCP는 HOL 차단(Head-of-line Blocking) 문제로 인해 실시간 애플리케이션에서는 UDP가 선호
    (HOL 차단 : 패킷 대기열이 대기열의 첫 번째 패킷에 의해 보류될 때 발생하는 성능 제한 현상)

TCP Segment

  • TCP는 전송 단위로 TCP 세그먼트를 사용함

  • 데이터 스트림에서 데이터를 수신하고 이를 덩어리(청크)로 분할하고 TCP 헤더를 추가하여 TCP 세그먼트를 생성함

image

Field Bit Description
Source Port 16 통신을 시작한 호스트의 포트 번호
Destination Port 16 통신을 수신하는 호스트의 포트 번호
Sequence Number 32 전송되는 데이터의 순서를 식별하기 위한 번호
Acknowledgment Number 32 수신된 데이터에 대한 확인 응답을 표시하는 공간
Data Offset 4 TCP 헤더의 크기를 나타냄
Reserved 3 TCP 프로토콜의 향후 확장을 위해 예약된 비트
Control Bits 9 SYN, ACK, FIN 등과 같은 제어 플래그를 포함
Window Size 16 흐름 제어를 위한 수신 가능한 바이트 수를 나타냄 (Sliding window)
Checksum 16 데이터의 무결성을 검사하기 위한 필드
Urgent Pointer 16 긴급 데이터의 마지막 위치를 지정해줌
( URG 플래그가 설정된 경우에만 의미가 있으며,
우선적으로 처리할 긴급 데이터가 포함된 세그먼트를 식별하는 데 사용)
Options Variable 추가적인 제어 정보를 포함할 수 있는 곳
  • Control Bits 추가 설명

    1. NS (Nonce Sum)

      • TCP의 ECN(Explicit Congestion Notification) 기능과 관련있으며 혼잡 제어를 위한 추가적인 정보를 제공하는 역할
    2. CWR (Congestion Window Reduced)

      • 송신측이 혼잡 창(cwnd) 감소를 적용했음을 알리기 위해 사용

      • 수신측의 ECE 신호에 반응하여 혼잡 창을 줄인 후 설정

    3. ECE (ECN-Echo)

      • ECN(Explicit Congestion Notification) 지원 여부를 표시하고, 혼잡 상태를 알리기 위해 사용

      • 수신측이 네트워크 혼잡을 감지했음을 송신자에게 알려 혼잡 제어를 도움

    4. URG (Urgent)

      • 긴급 데이터의 끝 위치를 지정하여 우선 처리되도록 함

      • URG 플래그가 설정되면, 긴급 포인터 필드(Urgent Pointer)를 참조하여 긴급 데이터의 위치를 식별

    5. ACK (Acknowledgment)

      • 수신된 데이터에 대한 확인 응답을 표시

      • 데이터가 성공적으로 전달되었음을 송신자에게 알리기 위해 사용

      • 모든 패킷(연결 설정 및 종료 패킷 포함)에 설정됨

    6. PSH (Push)

      • 수신 측 응용 프로그램에게 버퍼링된 데이터(전송하는 동안 보관된 데이터)를 즉시 전달하도록 요청함

      • 데이터를 즉시 처리해야 할 필요가 있을 때 설정되며, 예를 들어 실시간 응용 프로그램에서 유용함

    7. RST (Reset)

      • 비정상적인 상황에서 연결을 즉시 재설정하기 위해 사용

      • 잘못된 패킷 수신, 예기치 않은 오류 발생 시 연결을 강제로 종료해줌

    8. SYN (Synchronize)

      • 연결 설정 초기 단계에서 사용, 클라이언트와 서버가 서로의 시퀀스 번호를 동기화하기 위해 설정됨

      • 연결을 시작할 때 클라이언트가 서버에 보내는 초기 요청 패킷에 설정되며, 서버의 응답 패킷에도 설정됨

    9. FIN (Finish)

      • 데이터 전송이 완료되었음을 표시하고 연결을 종료하기 위해 사용

      • 한쪽 방향의 데이터 전송이 끝났음을 나타내며, 양쪽에서 FIN을 주고받아야 완전히 연결이 종료됨

연결(3-way-handshake)

TCP로 통신하기 전, 이를 위해 상호 연결을 만드는 과정으로, 이를 통해 연결 지향성을 지니게됨

3WH

Server는 열려있는 포트로 LISTEN 상태이고 Client에서는 Closed 상태!

  1. Client에서 Server에 연결 요청을 하기위해 SYN(요청) 패킷을 보내며 SYN_SENT 상태가 됨

  2. Server는 SYN(요청) 패킷을 받고 SYN_RCV(Received)로 상태 변경!

    => 그리고 요청을 정상적으로 받아 승인(ACK)과 Client도 포트를 열어달라는 SYN(요청) 을 같이 보냄

  3. Client에서는 SYN+ACK 를 받고 ESTABLISHED(확립)로 상태를 변경하고 Server에 요청을 잘 받았다는 ACK 를 전송!

    => ACK를 받은 Server도 상태가 ESTABLISHED(확립)로 변경되며 연결이 정상적으로 이어지게 된다

연결 해제(4-way-handshake)

통신을 마치고 서버와 클라이언트의 연결을 해제하기 위한 과정

image

  1. Client에서 server한테 연결을 끊자는 FIN을 보내며 FIN WAIT 상태가 됨

  2. Server는 FIN(연결 해제 요청) 패킷을 받고 CLOSE_WAIT로 상태 변경!

    => 그리고 요청을 정상적으로 받아 승인(ACK)을 보내며 연결 종료를 준비함

  3. 연결 종료 준비가 된 Server는 Client한테 FIN을 보내며 LAST_ACK 상태가 됨

  4. Client에서는 FIN을 받아 TIME_WAIT으로 상태가 변경되며 Server에 요청을 잘 받았다는 ACK 를 전송!

    => TIME_WAIT 상태는 서버에서 받지못한 데이터를 기다리거나, 오류로 인해 연결이 데드락 되는걸 방지함

Server는 ACK를 받은 이후 소켓을 닫음 (Closed)

TIME_WAIT 시간이 끝나면 Client도 닫음 (Closed)

혼잡 제어

  • TCP는 여러 혼잡 제어 알고리즘(Slow start, Fast retransmit 등)을 통해 네트워크 혼잡을 방지

  • CNWD(Congestion window)

    • 송신자가 ACK를 받기 전에 전송할 수 있는 데이터 패킷의 양을 논리적 경계로 나타낸 것
      ( Sliding Window의 Window와 개념적으로 같음 )

    • 단위는 MSS를 사용함
      (MMS(Maximum Segment Size) : 해당 연결에서 허용되는 최대 세그먼트 크기 )

  • Slow start

    • TCP session이 처음 생성되었을 때나 RTO(Retransmission timeout)이 발생했을 때 작동

    • 네트워크의 상태를 모르는 상태이기에 CWND의 크기를 작게 설정하였다 점차 키워주는 역할

    • 전송된 패킷의 ACK를 받으면 CWND를 RTT마다 두 배씩 증가시킴
      (RTT(Round Trip Time) : 네트워크 요청을 시작한 후 응답을 받는 데 걸리는 시간(=Segment 왕복 시간) )

  • Congestion Avoidance - AIMD(Additive increase/Multiplicative decrease)

    • 송신측의 전송 속도(CNWD size)를 조절하는 방식 중 하나

    • Additive increase : 송신 측의 Window size를 손실을 감지할때까지 매 RTT 마다 1 MSS씩 증가시킴

    • Multiplicative decrease : 손실을 감지했다면 송신측의 Window size를 절반으로 감소시킴

  • 혼잡 제어 정책(TCP Reno) 흐름 그래프

image

RTT(Round Trip Time) : 네트워크 요청을 시작한 후 응답을 받는 데 걸리는 시간(왕복 시간)
cwnd [MSS] : 전송될 수 있는 최대 데이터의 양을 나타냄 t [RTT] : 송신지 <> 수신지 간의 왕복 횟수를 뜻함
cwnd(new) : Time out이 일어난 이후 cwnd는 초기값으로 설정됨 ssthresh(slow start threshold) : 느린 시작의 사용을 멈추는 임계점( 이후부턴 AIMD를 사용)

UDP(User Datagram Protocol)

  • 연결 없이 패킷을 빠르고 간단하게 전송하는 경량 전송 계층 프로토콜임

  • 패킷 손실에 대한 높은 허용도낮은 대기 시간이 특징
    (=신뢰성이 낮음)

  • 1:1 & 1:N & N:N 통신이 가능

  • 패킷 손실, 순서 없음, 중복 전송 등의 문제가 있어 오류 검사 및 수정이 필요하지 않거나 애플리케이션에서 수행되는 용도에 적합함

UDP Datagram

image

Field Bit Description
Source Port 16 발신자의 포트를 식별
Destination Port 16 수신기의 포트를 식별
Length 16 데이터그램(헤더 필드 및 데이터 필드)의 길이
Checksum 16 헤더 및 데이터의 오류 검사에 사용
IPv4에서는 선택 사항이며 IPv6에서는 대부분의 경우 필수
Data Variable 패킷의 정보 부분(Payload)

Reference

Britannica
Find Todays Notes
witestlab.poly.edu
uzun.dev
Darrel Root Youtube