TIL

전송 계층 프로토콜에 대하여

추운날_너를_기다리며 2024. 10. 16. 23:51

위의 글은 모의 면접을 대비하여 미리 공부를 하기 위하여 정송 계층 프로토콜에 대하여 그리고 IP의 한계, 오류 제어, 흐름 제어에 대한 내용을 학습한 내용입니다.

 

전송 계층 프로토콜

전송 계층은 OSI 7 계층 중 4번째 계층으로, 애플리케이션 계층과 네트워크 계층 사이에서 데이터를 주고받는 역할을 담당합니다. 서버 개발자의 관점에서 이 계층은 애플리케이션이 네트워크를 통해 데이터를 안전하고 효율적으로 송수신할 수 있도록 도와주는 중요한 요소입니다. 대표적인 전송 계층 프로토콜에는 TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)가 있습니다. 다른 전송 계층 프로토콜로는 SCTP(Stream Control Transmission Protocol), DCCP (Datagram Congestion Control Protocol), RUDP(Reliable User Datagram Protocol), QUIC (Quick UDP Internet Connections)가 있습니다.

(TIP! : HTTP는 애플리케이션 계층(7계층)에서 사용, IP는 네트워크 계층(3계층)에서 사용

 

TCP(Transmission Control Protocol)

  • 신뢰성 보장 : TCP는 데이터의 신뢰성 있는 전송을 보장합니다. 서버와 클라이언트 간의 연결을 설정하여 데이터를 순차적으로 송수신하며, 전송된 데이터의 정확성을 검증하기 위해 세그먼트 마다 ACK(응답 신호)를 사용합니다. 손실된 데이터는 재전송하며, 데이터의 순서가 틀어질 경우 다시 정렬하여 전달합니다.
  • 연결 지향적 통신 : 3-way handshake(3단계 연결 설정)을 통해 연결을 설정하고 통신을 시작합니다. 이 과정은 SYN, SYN-ACK, ACK 패킷을 주고 받으며, 서버와 클라이언트 간의 연결을 안정적으로 유지하게 합니다.
  • 예시: HTTP/HTTPS와 같은 웹 프로토콜은 TCP를 기반으로 동작합니다. 서버 개발자가 REST API 서버를 구현할 때, 클라이언트와의 통신은 TCP를 통해 이루어져 데이터를 안전하게 주고받을 수 있습니다. 특히 데이터의 신뢰성과 정확성이 중요한 금융 애플리케이션이나 온라인 쇼핑몰에서 TCP가 사용됩니다.

UDP(User Datagram Protocol)

  • 비연결 지향적 통신: UDP는 연결을 설정하지 않고 데이터를 전송합니다. 데이터의 도착 여부나 순서를 보장하지 않으며, 손실된 데이터의 재전송이 이루어지지 않습니다. 그렇지만 TCP에 비해 오버헤드가 적고 빠른 데이터 전송이 가능합니다.
  • 실시간 데이터 전송에 적합: UDP는 데이터의 빠른 전송이 중요한 실시간 애플리케이션에서 주로 사용됩니다. 예를 들어, VoIP (인터넷 전화), 온라인 게임, 스트리밍 서비스 등에서는 약간의 데이터 손실보다 전송 속도가 중요하기 때문에 UDP를 사용합니다.
  • 예시: 서버 개발자가 WebSocket 서버를 구현할 때, 초기에는 TCP를 사용하여 연결을 설정하지만, 이후 데이터 전송의 지연을 줄이기 위해 UDP를 사용할 수도 있습니다. 온라인 게임에서 위치 정보나 실시간 채팅 데이터를 주고받을 때 UDP를 사용하는 경우가 많습니다.

IP의 한계

IP(Internet Protocol)는 네트워크 계층에서 사용되는 프로토콜로, 데이터를 목적지까지 전달하기 위한 주소 지정과 경로 설정을 담당합니다. 서버 개발자 입장에서 IP는 중요한 기능을 수행하지만, 몇가지 한계가 존재합니다.

  • 신뢰성 부족: IP는 데이터를 목적지까지 전달하는 역할을 하지만, 데이터 전송의 신뢰성은 보장하지 않습니다. 즉, 패킷이 손실되거나 순서가 틀려도 이를 복구하지 않습니다. 이는 TCP와 같은 전송 계층 프로토콜이 필요한 이유입니다.
  • 오류 제어 및 흐름 제어의 부재: IP는 데이터 전송 중 발생할 수 있는 오류를 처리하거나, 수신자의 처리 속도에 맞춰 데이터를 조절하는 기능이 없습니다. 이로 인해 전송 계층의 프로토콜이 오류 제어나 흐름 제어를 수행하게 됩니다.
  • 예시: 서버 개발자가 REST API 서버를 구현할 때, IP는 클라이언트의 요청을 서버로 전달하지만, 패킷 손실이나 순서 변경에 대해선 신경 쓰지 않습니다. 이를 보완하기 위해 TCP를 사용하여 데이터의 신뢰성을 보장하게 됩니다.

"오류 제어"와 "흐름 제어"에 대하여

오류 제어

  • 오류 제어는 전송 중에 발생할 수 있는 오류를 감지하고 수정하는 과정을 의미합니다. 전송 계층에서 TCP는 오류 제어를 위해 다양한 메커니즘을 사용합니다.
  • 예시: 체크섬(Checksum) TCP는 송신된 데이터가 손상되었는지 확인하기 위해 체크섬을 사용합니다. 송신자는 데이터를 전송하기 전에 체크섬 값을 계산하여 헤더에 포함시켜 보냅니다. 수신자는 받은 데이터의 체크섬을 다시 계산해, 원래의 체크섬과 비교합니다. 만약 체크섬 값이 다르면 데이터가 손상된 것으로 간주하고, 해당 데이터를 재전송 요청합니다.

흐름 제어

  • 흐름 제어는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 메커니즘입니다. 수신자의 처리 능력을 고려하여 데이터를 전송함으로써, 네트워크의 효율성을 높이고 과부하를 방지합니다.
  • 예시: 윈도우 크기(Window Size) TCP는 슬라이딩 윈도우(sliding window) 방식을 사용하여 흐름 제어를 수행합니다. 송신자는 수신자로부터 윈도우 크기 정보를 받아, 그 크기만큼 데이터를 전송할 수 있습니다. 수신자는 데이터를 받으며 윈도우 크기를 조정하여 송신자에게 알리며, 송신자는 이를 기반으로 데이터 전송량을 조절합니다.

이처럼, 전송 계층 프로토콜(TCP, UDP)는 서버 개발자가 네트워크 애플리케이션을 구출할 때 매우 중요한 역할을 하며, IP의 한계를 보완하고 신뢰성 있는 데이터 전송을 가능하게 합니다. TCP의 신뢰성 있는 데이터 전송과 오류 제어, 흐름 제어는 안정적인 서버 통신에 필수적인 요소입니다.

'TIL' 카테고리의 다른 글

Load Balancing에 대하여  (1) 2024.10.21
대칭키, 비대칭키 암호화에 대하여  (0) 2024.10.17
메모리란?  (0) 2024.10.11
CPU란? (기초)  (0) 2024.10.10
chome_dino_websocket_game 개인 프로젝트 트러블 슈팅  (0) 2024.10.07