본문 바로가기
내일배움캠프_게임서버(202410)/분반 수업 스텐다드

전송계층 - TIL1223

by GREEN나무 2024. 12. 23.
728x90

 

 

 

Transport Layer 전송계층

전송층은 응용층과 네트워크 계층 사이에 위치하는 계층으로, network layer로부터 서비스를 제공받아 application layer에 서비스를 제공한다.

전송층은 두 종단 시스템으로부터 전체 메시지를 신뢰성있게 전달하는 역할을 한다.

+ ip의 한계 보완, applycation 식별

 

IP의 특성

비신뢰성 : 데이터의 전달성공여부를 모름.(Best-effort delivery)

비연결성 : 송수신자 사이의 사전 연결이 없음.

(UDP와 비슷하나 IP는 느림)

 

TCP/IP와 UDP/IP 비교

사용하는 유형을 알아두기

TCP/IP

특성

신뢰성, 속도 느립

오류제어 / 흐름제어 / 혼잡제어

 

UDP/IP

특성

비신뢰성, 속도 빠름

흐름제어, 오류검사 없음

 

PORT

역할 : 프로세스 식별

16 비트, 0~65535

 

 

ICANN (Internet Corporation for Assigned Names and Numbers)

인터넷 할당 번호 관리 기관에서는 다음처럼 port number에 대해 세 구간으로 나눈다.

  • well-known (알려진 서비스) : 0 ~ 1023 (ex. HTTP 80, HTTPS 443)
  • registered (기업 / 서비스) : 1024 ~ 49151
    인터넷에 등록된 주소( mySQL, 
  • dynamic or private (클라이언트) : 49152 ~ 65535 (temporary)
    임시로 사용되는 주소

NAT과 PORT

 

 

NAT (Network Address Translation)
NAT는 여러 컴퓨터가 하나의 공유 IP 주소를 사용할 수 있도록 해주는 네트워크 기술.

  • 포트 번호를 활용하여 하나의 공유 IP에 여러 사설 IP를 매핑할 수 있습니다.
  • 여러 개의 내부 IP 주소를 하나의 공인 IP 주소로 변환하며, 이 과정에서 포트 번호도 함께 변환되어 여러 장치가 동시에 인터넷에 접속할 수 있습니다.

APT (Application Port Translation)
APT는 특정 포트로 들어오는 요청을 다른 포트로 리다이렉트하여 서비스 접근성을 조절하는 기술.

  • 주로 포트 기반 라우팅이나 리소스 제어를 위해 사용됩니다.

 

전송층의 역할

1) Process-to-Process Delivery 프로세스 간의 전달

2) Flow Control  흐름제어

3) Error Control  오류제어

 

1) Process-to-Process Delivery

 

network-layer : 컴퓨터 레벨에서, 즉 source-to-destination으로의 호스트 간 통신을 책임져 개별 패킷의 전달을 담당한다.

transoport-layer : network-layer 에서 전달한 패킷들을 재조립하여 메시지를 신뢰성 있게 대상 프로세스에 전달하는 역할을 한다.

 

 

사용 방법

- IP address와 Port number 두 식별자를 이용한다. 수송지에 대한 정확성을 높임.

- 이 두 식별자의 조합을 Socket Address라고 한다.
- IP address : 호스트 서버를 지정

- Port number : 프로세스를 지정

 

 

cf. ICANN (Internet Corporation for Assigned Names and Numbers)
인터넷 할당 번호 관리 기관에서는 다음처럼 port number에 대해 세 구간으로 나눈다.

  • well-known (유명한) : 0 ~ 1023 (ex. HTTP 80, HTTPS 443)
  • registered (등록된) : 1024 ~ 49151
    인터넷에 등록된 주소
  • dynamic or private (역동적이거나 사적인) : 49152 ~ 65535 (temporary)
    임시로 사용되는 주소

 

 

2) Flow Control 흐름(전송속도) 제어

송신자와 수신자 간의 데이터 전송 속도에 대한 제어.
송신<<수신 : 안정적이나 대역폭이 낭비되며 비효율적인 전송 => 성능저하

송신>>수신 : 수신 측에서 buffer overflow로 인해 패킷 손실이 일어나는 등 과부화가 걸릴 수 있다.

 

정보 배달 방법: Pushing vs Pulling

  • Pushing: 송신자가 계속하여 메시지를 보내는(pushing) 방식으로 과도한 수신으로 인한 loss 방지를 위해 flow control이 필요하다.
  • Pulling: 수신 측의 요청에 대해서만 메시지를 보내는(pulling) 방식으로(재전송) 구조적으로 flow control이 필요하지 않다.

sender측 process, transport layer와 receiver측 process, transport layer 

4개의 프로세스에서, 정보 전달 방향에 따라 consumer (송신측), producer(수신측) 역할을 맡으며 pushing과 pulling을 사용하기에 해당 pushing 부분에 대해 flow control이 필요하다.

 

Flow Control 매커니즘

  1. 버퍼 관리 : buffer가 full일 때 메시지 경유 정지, buffer에 공간이 생기면 메시지 경유/전송 허용.

  2. Sliding Window :
    중요. 컴퓨터공학에서 여러가지로 사용됨.
    한 번에 전송할 수 있는 패킷의 수를 제한하여 데이터 흐름을 조절.
     window 크기 내에 전송한 패킷에 대해 ACK를 받으면, 윈도우를 이동시켜 다음 패킷을 전송한다.
    ※ ACK( Acknowledgement ) : 확인 응답 
      window : 보낼 수 있는 데이터의 크기

  3. Congestion control  : 혼잡제어
    패킷 손실, 지연율 증가를 야기할 수 있는 네트워크 혼잡을 감지하고, 이를 완화하여 데이터 전송의 효율성을 유지하는 메커니즘이다.
       ● Slow Start :  작은 크기의 window 크기로 시작하여 ACK를 받을 때마다 점진적으로 window 사이즈 증가.
        패킷 손실 : 패킷 손실이 발생하면 혼잡 윈도우 크기를 줄인 후 데이터를 재전송.

cf. TCP Tahoe, TCP Reno



3) Error Control - 어떻게 하는지 알아두기

데이터 전송 중 발생하는 오류에 대한 detection(탐지)과 correction(정정)

 

 

Error Control 매커니즘

  1. Checksum : 데이터가 전송 중에 손상되지 않았는지 확인하기 위한 계산값이다. 송신자는 체크섬을 계산해 전송하고, 수신자는 받은 데이터와 계산된 값이 일치하는지 확인한다.(일치하면 손상없음)

  2. CRC (Cyclic Redundancy Check) : 데이터에 대한 다항식 나눗셈을 통해 오류를 탐지한다.
    더 강력한 오류 검사 방식. 

  3. ARQ (Automatic Repeat reQuest):  오류가 발생했을 때 송신자가 데이터를 재전송하는 오류 수정 기법이다. 수신자가 오류를 탐지하면 송신자에게 재전송을 요청하고, 송신자는 해당 데이터를 다시 보낸다.

    cf.
    Stop-and-Wait
    Go-Back-N ARQ
    Selective Repeat

  4.  ACK 와 NACK
    송신자는 ACK를 받은 후에 다음 데이터를 전송할 수 있습니다. 오류가 발생하지 않았다면 ACK가 전송되고, 오류가 발생했으면 ARQ를 통해 재전송을 요청합니다.
    송신자는 NACK을 받은 후, 오류가 발생한 데이터를 재전송하고, 오류 발생 시 송신자에게 직접적인 피드백을 제공한다.
    ACK : 수신자가 송신자에게 데이터가 정상적으로 도착했음을 알리는 메시지
    NACK : 오류가 발생했음을 알리는 메시지
    ARQ : Automatic Repeat Request의 약자로, 자동 재전송을 의미

  5. Sequence Number : Sequence Number는 송신자가 보낸 데이터 패킷에 부여하는 번호로, 데이터의 순서를 추적하는 데 사용한다. 수신자는 패킷의 순서를 확인하고 오류가 발생했을 때 재전송을 요청하며, 패킷이 중복되었을 경우 이를 감지하여 순차적인 데이터 흐름을 유지한다.


Transport Layer Protocol

말로 설명할 수 있어야함

RDT(Reliable Data Transfer)

RDT란, 전송된 데이터가 소실되거나 손상되지 않도록 reliable하게 신뢰성을 보장하는 데이터 전송이다.

 

Simple Protocol (rdt 1.0)

간단한  프로토콜

 

채널이 완벽히 믿을 수 있는 환경이라는 가정에서의 단순 비연결형 프로토콜이다.

송신자가 패킷에 담아 보내면 흐름제어도 에러처리도 없이 그냥 수신자가 처리하는 구조이다.

 

Stop-and-Wait Protocol (rdt 2.0)

정지대기방식 프로토콜

 

flow control과 error control을 모두 사용하는 연결 지향형 정지-대기 프로토콜이다.
sliding window 만큼의 패킷을 전송하여 ack(확인응답)가 돌아오기 전까지는 대기한다.

  • checksum: 패킷 훼손 여부를 위해 패킷에 추가한다. 만약 checksum이 틀리면, 패킷 훼손으로 간주하여 알림없이 버린다(silently discarded).
  • sequence number: 패킷에 대한 중복 수신을 막기 위해 sequnece number  acknowledge number를 사용한다.

ex. 흐름 시나리오:

  1. 패킷 오류 없이 도착 > 수신측 ack 전송 > 송신측 ack 정상확인 > 다음 넘버의 패킷 전송
  2. 패킷 훼손 오류 > 수신측 ack 보내지못하며 timeout > 송신측 재전송
  3. 패킷 오류 없이 도착 > 수신측 ack 전송 > 송신측이 ack 훼손 확인 > 송신측 재전송 >
    (수신측은 다음번 패킷 받는 것을 기대했으나 seq num을 통해 재전송된 중복 패킷임을 확인)

애크넘 대기는 비효

이러한 Stop-and-Wait 의 경우, ack 확인 전까지의 대기한다라는 구조적인 이유로 전송 효율에 한계가 존재한다. 따라서 전송 효율을 높이기 위해 pipelining을 위해 다음 두 가지로 구현 >> Go-Back-N Selective Repeat

 

대안

송신측은 ack에 대한 대기 없이 window 크기만큼 연속적으로 전송을 한다.

 

Go-Back-N Protocol

어긋난 것 이후 일괄 패기, 재전송 요청 < -비효율

 

ack number: cumulative ACK 누적값으로 수신을 기대하는 다음 패킷 순서 번호로 할당된다.

Why GO-BACK N?

ex. 윈도우 사이즈 4 => 패킷 0, 1, 2, 3을 전송하여 이후엔 4 패킷을 받기를 기대

=> 패킷 1의 로스 발생 => 패킷 2, 3은 정상적으로 수신되었으나 패킷1의 수신을 기대할 때에 어긋난 순서로 들어와 모두 폐기 => 송신은 패킷 1, 2, 3을 재전송

말 그대로, N위치만큼 후퇴하여 재전송


Go-Back-N Protocol

 

송신측은 ack에 대한 대기 없이 window 크기만큼 연속적으로 전송을 한다.

  • ack number: cumulative ACK 누적값으로 수신을 기대하는 다음 패킷 순서 번호로 할당된다.

ex. 윈도우 사이즈 4 => 패킷 0, 1, 2, 3을 전송하여 이후엔 4 패킷을 받기를 기대
=> 패킷 1의 로스 발생 => 패킷 2, 3은 정상적으로 수신되었으나 패킷1의 수신을 기대할 때에 어긋난 순서로 들어와 모두 폐기 => 송신은 패킷 1, 2, 3을 재전송
말 그대로, N위치만큼 후퇴하여 재전송

 

Selective Repeat Protocol

앞선 Go-Back N의 경우, 수신측 프로세스를 간단히 구현하여, 오류 발생한 패킷 이후의 모든 패킷을 폐기하여 재전송하는 방식이기 때문에 bandwidth 낭비가 심한 비효율성을 보인다.

SR에서는 수신 측이 올바르게 수신된 패킷에 대해 개별적으로 ACK를 전송하는 것을 통해, 오류가 발생한 패킷에 대해서만 선택적인 재전송하게 된다.

 

Piggybacking

앞선 프로토콜들은 송수신 측을 나눈 단방향 프로토콜인 반면, piggybacking은 양방향 통신의 효율을 향상시키기 위해 사용된다. 패킷에 데이터를 담아 전송할 때에 ack와 같은 확인 응답 피드백을 같이 전달한다.




TCP/IP Protocol Group

이미지★


현재의 인터넷에서 사용하는 프로토콜 그룹으로 각 모듈 계층은 하위 계층의 기능을 이용하고 상위 계층에 기능을 제공한다.

기존 TCP/IP 프로토콜은 하드웨어에 설치된 4가지 소프트웨어 계층으로 정의되지만 현재는 5계층으로 분류함

cf. 이전 4계층의 TCP/IP model

1. Application Layer : 응용 프로그램 간 데이터의 송수신
    ex. FTP, SMTP, TELNET, etc.

2. Transport Layer 호스트들 간의 신뢰성있는 통신의 제공
    ex. UDP, TCP

3. Internet Layer : 데이터 전송을 위한 주소와 경로 설정

ex. IP, ICMP, ARP, etc.

ex. Ethernet, IEEE 802



UDP (User Datagram Protocol)

connectionless, unreliable

application level단에서의 error control을 제공받아,
최소화된 오버헤드를 통해 빠른 전송 속도를 우선하는 프로토콜이다.

source port #, destination port #, user datagram length, checksum

 

전송단위: datagram

  • 고정된 크기의 datagram 단위로 분할하여 전송. 자신의 헤더에 데이터를 첨가하여 ip에게 전달하여 전송.
  • 메시지 지향적
  • datagram의 독립적인 처리로 순서를 보장하지 않고 손실/순서 뒤바뀜이 있더라도 재전송 이뤄지지 않음.

메서드 : process-to-process communication

ip address와 port number의 결합인 socket address 이용하여 제공.

  • 매우 단순한 프로토콜로 flow control과 error control 매커니즘이 없다. ( checksum은 존재 )

 

응용

error control, flow control없이 경량화된 형식이기에,

대용량 데이터를 전송해야하거나 신뢰성이 중요한 전송이 아니라,

TFTP (Trivial File Transfer Protocol)과 같이 내부적으로 flow control, error control을 포함한 프로세스에 적합하다.(내부적으로 에러처리 가능한 프로세스에서 사용)

 

적은 오버헤드로 bandwidth 절약과 빠른 전송이 가능하므로 multicast에 적합하다.

 

 

cf. RUDP (Reliable User Datagram Protocol)

UDP 기반으로 신뢰성을 높인 프로토콜

  • 연결 설정: 비연결형, TCP처럼 연결을 설정하지 않음.
  • 신뢰성 추가 기능:
       데이터 전송 확인 (ACK)
       오류 검출 및 재전송
       순서 보장
  • 오버헤드: 낮음, UDP의 단순성 유지.
  • 사용 사례: 실시간 응용 프로그램, 멀티미디어 스트리밍 등.

 

TCP (Transmission Control Protocol)

connection-oriented, reliable

reliability(신뢰성) 제공을 위해, GBN과 SR 프로토콜의 결합으로 사용.

=> checksum, 재전송, ack, timeout

 

전송단위: segment

  • segment 단위로 데이터 분할하여 연속된 byte stream 으로 전송, 수신측은 sequence number를 통해 순서 확인
  • reliability를 위해 error control과 retransmission

 

Handshake 매커니즘

UDP의 시그먼트 ( segment )와 TCP의 데이터그램( datagram ) 형태를 알아두기

TCP는 장치 간 논리적 접속을 만들기 위해 handshake를 사용한다.

(1) connection establishment

3-Way Handshake

클라이언트 to 서버: 연결 요청

     SYN패킷을 보냄. 초기 시퀀스 번호를 포함함.

    ex) SYN  : 8000


서버 to 클라이언트: 확인하고 응답

    SYN-ACK패킷을 응답으로 보냄. 클라이언트의 SYN에 +1한 값과 서버의 ISN(시퀀스번호) 포함
    ex) SYN  : 15000, ack : 8001


클라이언트 to 서버: 응답에 대한 확인(SYN)

   서버의 ISN에 +1한 값을 ACK 값으로 보냅니다.

    ex) SYN  : 8001, ack : 15001

 

 

 

(2) data transfer

 

(3) connection termination

 

(4) 4-Way-handshake( 연결 종료 )

 Half-close (절반 폐쇄) 

 

  • 데이터 수신 중이더라도 한쪽에서 전송을 중단할 수 있는 방식.
  • 한쪽 끝(클라이언트)을 미리 종료함으로써 자원 관리 최적화에 기여.

 

  1. 클라이언트 → 서버: 연결 종료 요청(FIN)
    • 클라이언트는 더 이상 데이터를 전송하지 않음을 알림.
  2. 서버 → 클라이언트: 확인 응답(ACK)
    • 서버는 요청을 확인하며, Close-Wait 상태로 진입.
    • 서버는 아직 남아 있는 데이터를 전송할 수 있음.
  3. 서버 → 클라이언트: 연결 종료 요청(FIN)
    • 서버가 모든 데이터 전송을 마치면 FIN 패킷을 전송.
    • Last-ACK 상태로 진입.
  4. 클라이언트 → 서버: 확인 응답(ACK)
    • 클라이언트는 FIN에 대한 확인(ACK) 패킷을 서버로 전송.
    • Time-Wait 상태로 진입하며 일정 시간이 지난 후 연결 종료.
    • 서버는 ACK를 수신하고 Closed 상태로 전환.

 

Time-Wait의 역할

  1. 지연 패킷으로 인한 문제를 방지.
  2. 마지막 ACK 재전송을 대비한 시간 확보.
  3. 동일 포트 재사용으로 인한 충돌 방지.


응용

신뢰성 있는 데이터 전송이 중요한 파일 전송, 웹 브라우징, 이메일 전송 등에 사용된다.

 

cf. SCTP (Stream Control Transmission Protocol)

  TCP와 UDP의 장점을 결합한 프로토콜.
● 신뢰성, 순서 보장, 다중 스트림 등의 기능 제공
  주요 용도: 실시간 음성/비디오 통신, 금융 거래

 

 

 

 


cf.

 https://velog.io/@nuketuna/TIL-20241219-TIL-Transport-Layer