TCP와 UDP
TCP와 UDP는 네트워크 프로그래밍의 가장 기초가 되는 개념이다. 게임 좀 많이 해본 사람이라면 친구와 멀티를 하기 위해 서버를 열기 위해서 가끔 방화벽을 건드려주거나 공유기를 사용 중이라면 해당 공유기의 포트를 열어주는 작업 등을 하는데 그때 자주 보게 되는 단어이기도 할 것이다. 오늘은 이것에 대해서 한번 공부해 보았다.
TCP(Tansmission Control Protocol)
TCP는 연결 지향형(Connection-Oriented) 프로토콜로서 데이터를 보내기 전에 3-Way Handshake 방식을 통해 연결을 확실하게 맺는다. 데이터를 보낸다면 수신하는 측에서는 해당 데이터를 수신했다는 사인을 보내게되고 송신한 측은 해당 사인(ACK)을 받게 된다. 만약 데이터가 중간에 사라지게 되어 ACK를 받지 못한다면 재전송(Retansmission)하게 된다. 이러한 방식 때문에 데이터가 순서대로 도착하는 것을 보장하며 이를 위해 흐름 제어와 혼잡 제어를 수행한다.
1. 흐름 제어(Flow Control)
흐름 제어는 수신자를 보호하기 위한 동작으로 송신자의 속도가 너무 빨라서 수신자가 데이터를 처리하는 속도가 못 따라가는 상황을 예방하기위한 동작이다. 수신자가 송신자에게 여유 공간이 어느 정도인지를 알려주고 해당 정보를 바탕으로 송신자는 보내는 양을 조절한다. 이때 사용되는 알고리즘이 슬라이딩 윈도이다.
2. 혼잡 제어(congestion Control)
혼잡 제어는 네트워크를 보호하기 위한 동작으로서 송신자와 수신자의 성능은 좋은데 그 사이를 연결하는 네트워크 회선이 그렇지 못해 막히는 상황을 방지하기 위한 동작이다. 네트워크 혼잡으로 인해 패킷이 중간에 유실되거나 지연되면 송신자가 재전송을 반복하면서 혼잡이 더 심해지고 네트워크 전체가 마비될 수 있다. 그렇기에 송신자가 패킷 유실을 감지하면 송신하는 속도를 줄였다가 천천히 다시 올리면서 조절하게 된다. 이에 사용되는 알고리즘으로는 Slow Start, Congestion Avoidance, Fast Recovery가 있다.
TCP는 이러한 특징 때문에 신뢰성이 높으며 순서대로 도착함을 보장한다. 하지만 절차가 많아서 상대적으로 느리고 그로 인해 헤더가 커서 무거워진다.
UDP(User Datagram Protocol)
UDP는 비연결형(Connectionless) 프로토콜로서 방송과 같이 연결 절차를 별도로 가지지 않고 주소만 보고 데이터를 송신한다. 상대방이 해당 데이터를 받았는지 안 받았는지 ACK 하지 않으며 데이터가 중간에 사라지더라도 재전송하지 않는다. 그렇기 때문에 순서가 섞여 뒤죽박죽으로 도착할 수 있다. TCP에 비해서 불필요한 절차가 없어서 매우 빠르고 오버헤드가 적다. 하지만 앞서 설명했듯 데이터가 유실되거나 순서가 바뀔 수 있어서 신뢰도가 낮다.
언리얼엔진에서는 주로 UDP방식을 사용하는데 이는 손실이 있더라도 최신 데이터를 우선하기 때문이다. 그렇기에 기본적으로 언리얼에서는 UDP방식을 사용한다.
'unreal 5기' 카테고리의 다른 글
| 251201 언리얼엔진 본캠프 78일차 언리얼 모듈과 플러그인 (0) | 2025.12.01 |
|---|---|
| 251126 언리얼엔진 본캠프 75일차 Merge Sort (0) | 2025.11.26 |
| 251124 언리얼엔진 본캠프 73일차 3정렬과 퀵 정렬 (0) | 2025.11.24 |
| 251119 언리얼엔진 본캠프 70일차 NetConnection (0) | 2025.11.19 |
| 251118 언리얼엔진 본캠프 69일차 NetMode (0) | 2025.11.18 |