[TIL] 20241220 TIL : Transport Layer pt.2

Jaeyoung Ko·2024년 12월 20일
0

<2> Transport Layer Protocol

이 파트에서는 전송 계층의 프로토콜들에 대해 알아볼 것이다.

프로토콜들의 동작을 잘 이해할 수 있도록 간단한 것에서부터 복잡한 프로토콜로, 최종적으로는 TCP/IP 프로토콜 그룹의 대표적인 프로토콜을 다루고자 한다.


RDT(Reliable Data Transfer)

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


Simple Protocol (rdt 1.0)


채널이 완벽히 신뢰성있는 환경이라는 가정에서의 단순 비연결형 프로토콜이다.
(flow control x, error control x) 이미지에서 알 수 있듯이 송신자가 패킷에 담아 보내면 곧이곧대로 수신자가 처리하는 구조이다.


Stop-and-Wait Protocol (rdt 2.0)


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

  • checksum: 패킷 훼손 여부를 위해 패킷에 추가한다. 만약 checksum이 틀리면, 패킷 훼손으로 간주하여 알림없이 버린다(silently discarded).

  • sequence number: 패킷에 대한 중복 수신을 막기 위해 sequnece numberacknowledge number를 사용한다.

ex. 흐름 시나리오:

  1. 패킷 오류 없이 도착 > 수신측 ack 전송 > 송신측 ack 정상확인 > 다음 넘버의 패킷 전송

  2. 패킷 훼손 오류 > 수신측 ack 보내지못하며 timeout > 송신측 재전송

  3. 패킷 오류 없이 도착 > 수신측 ack 전송 > 송신측이 ack 훼손 확인 > 송신측 재전송 >
    (수신측은 다음번 패킷 받는 것을 기대했으나 seq num을 통해 재전송된 중복 패킷임을 확인)


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

Go-Back-N Protocol


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

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

Why GO-BACK N?
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.

frame으로서 실제 데이터의 송수신
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 매커니즘

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

(1) connection establishment

클라이언트 to 서버: 연결 요청(SYN)
서버 to 클라이언트: 확인하고 응답(SYN-ACK)
클라이언트 to 서버: 응답에 대한 확인(SYN)


(2) data transfer


(3) connection termination

cf. Half-close (절반 폐쇄)

데이터를 받고 있는 중에도 한쪽 끝은 전송을 중단할 수 있다. 한 쪽을 미리 종료함으로 자원 관리 최적화에 도움이 된다.

클라이언트 to 서버: 연결 종료 요청(FIN)
서버 to 클라이언트: 확인(ACK)하고 app 에 대해선 close-wait
서버 to 클라이언트: app이 종료 준비될 시 연결 종료 플래그(FIN)
클라이언트 to 서버: 응답에 대한 확인(ACK)


응용

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



cf. SCTP

SCTP(Stream Control Transmission Protocol)는 TCP와 UDP의 장점을 결합한 프로토콜.

신뢰성, 순서 보장, 다중 스트림 등의 기능 제공

주요 용도: 실시간 음성/비디오 통신, 금융 거래

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글