네트워크는 NodeEdge로 이루어진 그래프 구조로 볼 수 있다.
네트워크 가장자리에 위치하면서 네트워크를 통해 정보를 송수신하는 NodeHost라고 한다.

요청을 보내는 HostClient,
응답을 보내는 HostServer라고 한다.


LAN, WAN

네트워크는 규모에 따라 LAN, WAN으로 나뉜다.

LAN (Local Area Network)
→ 가까운 거리 내에서 구성된 로컬 네트워크
(가정, 사무실, 학교, 데이터센터 등)

WAN (Wide Area Network)
→ 넓은 지역을 연결하는 네트워크
(인터넷, 통신사 백본망 등)

인터넷은 여러 ISP(Internet Service Provider)WAN이 상호 연결된 거대한 네트워크이며,
서로 다른 LAN 간 통신은 이러한 WAN을 통해 이루어진다.


Packet

네트워크를 통해 전달되는 데이터는 전송 과정에서 작은 단위로 나뉘며 이를 Packet이라고 한다.

패킷은 다음으로 구성된다:

  • Header : 주소, 제어 정보 등 전달을 위한 메타데이터
  • Payload : 실제 전달할 데이터
  • Trailer : 오류 검출 등 부가 정보 (계층에 따라 존재, 주로 Ethernet, TCP/UDP에는 없음)

Protocol

네트워크에서 통신하는 노드 간에 합의된 규칙과 절차를 의미한다.
데이터 형식, 전송 방식, 순서, 오류 처리 등을 정의한다.

Host와 네트워크 장비가 서로 주고받는 정보를 올바르게 해석하기 위해서는
동일한 Protocol을 사용해야 한다.

IP : 네트워크 계층 주소 및 전달
ARP : IPMAC 변환
ICMP : 제어/오류 메시지
TCP, UDP : Transport 계층
HTTP : 응용 계층
Protocol은 목적과 특징이 다름.


Address

네트워크에서 데이터를 전달하려면 대상 식별자가 필요하다.

대표적인 주소 체계:
IP Address : 네트워크 계층 주소 (논리 주소)
MAC Address : DataLink 계층 주소 (물리 주소)
Port : Transport 계층 프로세스 식별자

Address를 통해 Packet을 보낼 수 있는데, 수신 방법에 따라 명칭이 나뉨
Unicast
→ 1:1 통신 (특정 Host)

Broadcast
→ 동일 네트워크 내 모든 Host

Multicast
→ 특정 그룹에 속한 Host


NRM(Network Reference Model)

네트워크 통신 기능을 계층적으로 분리하여 표현한 개념 모델을 Network Reference Model(NRM)이라고 한다.
NRM으로 OSI, TCP/IP이 있다.


OSI 7계층

국제 표준화 기구(International Organization for Standardization)에서 만든 NRM

계층 레이어 이름 설명 예시
7 Application 애플리케이션 프로토콜과 요청/응답 의미를 정의하는 계층 HTTP, DNS, SMTP
6 Presentation 데이터 인코딩·압축·암호화 등 표현 형식을 변환하는 계층 JSON, Protobuf, TLS encoding
5 Session 통신 세션을 생성·유지·동기화·종료하는 계층 RPC session, TLS session
4 Transport 포트 기반 종단 간 전송, 흐름/오류 제어를 담당하는 계층 TCP, UDP
3 Network IP 주소 기반 라우팅으로 네트워크 간 패킷 전달 IPv4, IPv6, ICMP
2 DataLink MAC 주소 기반으로 동일 링크 내 프레임 전달 Ethernet, Wi-Fi, ARP
1 Physical 비트를 전기/광/무선 신호로 변환하여 전송 케이블, RF, 광신호

TCP/IP 4계층

OSI 모델을 단순화한 실용 모델

계층 레이어 이름 설명
4 Application OSI L7 + L6 + L5
3 Transport OSI L4
2 Internet OSI L3
1 Network Interface OSI L1 + L2

캡슐화/역캡슐화

Packet의 송신 과정에서는 캡슐화가 이루어지고,
수신 과정에서는 역캡슐화가 이루어진다.

상위 계층에서 전달된 데이터를 Payload로 삼아
각 계층 Protocol에 따라 Header(및 필요 시 Trailer)를 추가하여
하위 계층으로 전달하는 과정을 캡슐화(Encapsulation)라고 한다.

수신 측에서는 각 계층에서 Header/Trailer를 확인하고 제거하여
상위 계층으로 전달하는데, 이를 역캡슐화(Decapsulation)라고 한다.

그렇게 캡슐화, 역캡슐화를 통해 만들어진 Packet을 지칭하는 이름이 계층마다 다르다.

계층 PDU(Protocol Data Unit)명칭
Application / Presentation / Session Data, Message
Transport (TCP) Segment
Transport (UDP) Datagram
Network Packet
DataLink Frame
Physical Symbol, Bit

IP

네트워크 계층(L3) Protocol로,
서로 다른 네트워크 간에 패킷을 전달하기 위한 Host 식별(Addressing)과 전달(Routing) 규칙이다.
네트워크 상에서 IP주소로 Host를 식별한다.

서로 다른 네트워크 사이에서 Packet을 전달하며,
Router가 목적지 IP를 기반으로 경로선택하여 전달한다.

RouterHost가 전달하는 데이터를 외부로 송신해 주는 컴퓨터.

IP는 전달 시도만 하고 도착, 순서, 중복, 지연을 보장하지 않음.
신뢰성이 필요한 경우 IP 위에서 TCP/UDP를 추가적으로 사용한다.


IPv432bit 주소 체계로 약 42억 개 주소 공간을 가진다
인터넷 확장에 비해 주소 공간이 제한적이어서 IPv6가 도입되었다.

IPv4 IPv6
크기 32bit 128bit
표기 10진수 점표기 16진수 콜론표기
범위 0.0.0.0 ~ 255.255.255.255 0000:0000:0000:0000:0000:0000:0000:0000 ~ ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

LAN 내부에서 사용하는 IPPrivate IP,
인터넷에서 라우팅 가능한 IPPublic IP라고 한다.

가정 환경에서:
PC(Private IP) → 공유기(NAT 변환) → 인터넷(Public IP)

IP는 상위 계층 데이터를 Payload로 실어 나르며
일반적으로 TCP 또는 UDPsegment를 전달한다.


IP주소 구조

)

식별자 : 어떤 데이터에서 쪼개진 패킷인지 식별하기 위해 사용
DF(Don't Fragment) : IP 단편화 수행 제어 비트
MF(More Fragment) : 단편화 패킷 더 있는지 확인 비트
단편화 오프셋 : 단편화된 패킷을 재조합하기 위해 초기 데이터와의 오프셋 기록.
TTL(Time To Live) : IP 전달 시간
헤더 체크섬 : Router가 수신한 IP Datagram(Packet)의 헤더 비트 오류를 탐지하는데 사용한다.


Classful Addressing

네트워크 주소 크기와 Host 주소 크기는 유동적일 수 있음
■ = 네트워크 주소, ▼ Host 주소, 한 덩어리를 옥텟(Octet)이라고 함.
■.■.■.▼ : C Class (192.0.0.0 ~ 223.255.255.255)
■.■.▼.▼ : B Class (128.0.0.0 ~ 191.255.255.255)
■.▼.▼.▼ : A Class (0.0.0.0 ~ 127.255.255.255)
이런식으로 IP주소를 관리하는 체계를 Classful Addressing이라고 함.

네트워크 부분 + Host 부분
192.168.0.5

192.168.0 → 네트워크(C Class)
.5 → Host


단편화(fragmentation)

최대 전송 단위인 MTU(Maximum Transmission Unit)보다 클 경우
PacketMTU이하의 여러 Packet으로 쪼개어 전송하고
전송된 Packet은 수신지에서 재조합된다.
일반적인 MTU크기는 1500Byte이다.


Classless Addressing, Subnet(Subnetwork)단

Classful Addressing에 비해 더 정교하고 유동적인 표기법.
IP 주소상에서 네트워크 주소를 1로 표기, Host주소를 0으로 표기한 비트열인 Subnet mask를 이용함.
10진수 표기 → 255.240.0.0(11111111.11110000.00000000.00000000)
CIDR 표기법 → 192.168.0.1/12 1의 개수를 적어줌


IP : 192.168.0.5
Mask : 255.255.255.0

192.168.0.x → 같은 Subnet

같은 Subnet
→ 내부망(LAN)에 존재, 직접 통신가능
→ 게이트웨이 필요 없음

다른 Subnet
Router(게이트웨이)로 전송
ARP 대상 = 게이트웨이

192.168.0.5/24
192.168.0.20 → 직접 통신
203.0.113.10 → 게이트웨이로 전송


NAT(Network Address Translation)

내부 Private IP + Port
외부 Public IP + Port로 변환하는 기능

내 PC:        192.168.0.5:53012
↓ NAT 변환
인터넷:      203.0.113.55:40231

서버는 클라이언트의 실제 사설 주소가 아닌 NAT 외부 주소를 보게 된다.
DHCP(Dynamic Host Configuration Protocol)Private IP를 할당하고,
ISP로부터 Public IP를 받아 NAT을 통해 내부 장치들이 인터넷에 접속한다.

NAT는 클라이언트가 먼저 통신해야 매핑이 생성되기 때문에
서버에서 클라이언트로의 직접 연결이나 P2P 연결이 어렵다.

NAT은 외부로부터 직접적인 접근을 차단해서 직접 연결이 어렵다.
내부에서 외부로 나가는 요청이 있을 때만 통신 경로를 열고, 응답이 돌아오는 것을 허용한다.

  • NAT Table에 등록된 Public IP + Port 쌍으로 Packet이 들어올 경우.
  • 클라이언트가 먼저 특정 IP와 Port로 패킷을 보내 경로를 열었을 경우.

IP와 더불어 Port까지 고려하면 NAPT(Network Address Port Translation)라고 한다.


NAT keepalive

NAT에는 timeout이 있어서 시간이 지나면 NAT Table에서 삭제되는데
NAT 장비의 Port 매핑(NAT table entry)이 만료되지 않도록
주기적으로 패킷을 보내는 동작을 말한다.

서버가 클라이언트에게 Packet을 보내도 NAT이 Timeout되어 매핑이 사라지면
경로가 닫혀 받지 못하고 이 경우 다시 매핑해야하기 때문에
클라이언트가 NAT Table을 유지할 수 있게 지속적으로 값을 보내게 한다.


Port

PortTransport 계층(L4)에서 Host 내부의 Process(Application)를 식별하기 위한 논리적 식별자이다.
즉, 동일한 Host(IP) 내에서 어떤 프로그램이 통신하는지 구분하기 위해 사용된다.

IP만으로는 컴퓨터까지만 식별되고 여기에 Port를 추가해 프로세스를 찾아간다.

192.168.0.1:7777

이런 형태를 Socket Address라고 한다.

Port의 범위는 0 ~ 65535이다.
0 ~ 1023까지는 Well-known Port으로 HTTPS(443), HTTP(80)같은 Protocol이 사용한다.
1024 ~ 49151은 Registered Port 흔하게 사용하는 Application들이 사용한다.
49152 ~ 65535 Ephemeral/Private Port, 자유롭게 사용가능.

게임은 보통 1024이상 부터 사용한다.


던전앤파이터의 경우 10000번대를 사용한다.
실행 직후 에는 443(HTTPS)로 인증 서버, 버전 체크가 이루어지다,
로딩 후에 게임서버가 붙는다.

클라이언트는 임시 Port를 사용한다.


MAC(Media Access Control)

DataLink 계층(L2)에서 네트워크 인터페이스(NI, Network Interface)를 식별하는 물리 주소이다.

같은 네트워크(LAN) 내에서 프레임의 송신지와 수신지를 식별하는 데 사용된다.

MAC 주소는 48bit(6byte) 길이이며
콜론으로 구분된 16진수 12자리로 표현된다.

ab:cd:ab:cd:00:01

MAC 주소의 역할

  • 동일 링크(LAN) 내 장치 식별
  • 프레임 전달 대상 지정
  • 스위치 전달 기준 주소

※ 인터넷 통신에서는 MAC이 종단 식별자가 아니며
Hop(Packet이 Host/Router에 한 번 전달되는 단위) 마다 변경된다.

frame(DataLink PDU)에 송신지와 수신지를 특정할 수있는 6byte 길이의 MAC 주소가 명시된다.

프리앰블(Header) 수신지 MAC 주소(Header) 송신지 MAC 주소(Header) 타입/길이(Header) 데이터(Payload) FCS(Trailer)
8Byte 6byte 6byte 2byte 46~1500byte 4byte

프리앰블(Preamble) : 송수신지 동기화를 위한 정보
타입/길이 : 크기가 1500 이하 → 프레임 크기, 크기가 1536 이상 → 타입(캡슐화된 계층 정보)
데이터 : 상위 계층으로 전달하거나 전달받을 내용 명시
FCS(Frame Check Sequence) : frame의 오류 판별 필드.

NIC(Network Interface Controller/Card)

네트워크에서 Node와 통신 매체(케이블, 무선 등)를 연결하는 논리적·물리적 접점을
Network Interface (NI)라고 한다.
NIC는 이 Network Interface 기능을 실제로 수행하는 하드웨어 장치이다.
Network Interface에는 DataLink 계층 식별자인 MAC 주소가 할당된다.

하나의 장치에는 여러 Network Interface가 존재할 수 있으며
각 Interface는 서로 다른 MAC 주소를 가진다.
대표적인 NIC 예:

  • Ethernet 카드 (LAN 카드)
  • Wi-Fi 어댑터
  • 네트워크 카드

ARP(Address Resolution Protocol - L2)

ARP 모듈은 IPv4 환경에서, 같은 LAN 안에서
목적지 IP 주소에 대응하는 MAC 주소를 알아내는 Protocol

IP는 아는데 MAC를 모를 때 사용.


IP 패킷을 인터넷으로 보내면, L2(DataLink) 프레임(Ethernet/Wi-Fi)에 실려 나감
L2 프레임은 목적지를 MAC 주소로 지정해야한다.

하지만 Application/Socket 레벨에서 보통 알고 있는 건:

  • 목적지 IP (예: 게임 서버 IP)
  • 목적지 Port

목적지가 같은 LAN이면 → 목적지 HostMAC 필요
목적지가 인터넷(다른 네트워크)이면 → Gateway(공유기/Router)의 MAC 필요

클라이언트가 서버 IP로 전송하려 할 때 같은 서브넷이 아니면 게이트웨이 MAC이 필요하다.


ARP 과정(L2)

  1. ARP Request (Broadcast)
    같은 LAN에서 frame을 보내려면 목적지 MAC이 반드시 필요하기 때문에,
    IP와 MAC Broadcast 주소(FF-FF-FF-FF-FF-FF)를 보냄 IP만으로는 L2 전송이 불가능함.
    IP는 L3정보.
  2. ARP Reply (Unicast)
    해당 IP를 가진 장치(Gateway)가 응답해서 MAC 반환
  3. ARP Cache(ARP Table) 저장
    내 PC는 (IP → MAC) 매핑을 캐시에 저장.
    다음부터는 ARP 안 하고 바로 프레임 전송 가능
    캐시는 TTL/만료 시간이 있어 일정 시간이 지나면 제거/갱신된다.

Packet의 최종 송수신 대상은 Host가 아니라 Host가 실행하는 프로세스
Port로 프로세스 식별한다.
Port를 통한 프로세스 식별은 Transport 계층의 주된 목적.
Transport 계층의 핵심 Protocol TCP/UDP

TCP(Transmission Control Protocol)

Transport 계층(L4)의 Protocol
두 Host 간에 신뢰성 있고 순서가 보장된 Byte stream 통신을 제공한다.

신뢰할 수 있는 통신 : 상태 관리, 흐름 제어, 오류 제어, 혼잡 제어
연결형 통신 : 연결 수립, 종료 과정

TCP는 다음을 보장한다

  • 데이터 손실 없음
  • 순서 유지
  • 중복 제거
  • 오류 검출
  • 재전송

순서 번호(sequence number)는 TCP segment의 올바른 송수신 순서를 보장하기위해
segment 첫 Byte에 매겨진 번호
순서 번호를 통해 현재 주고 받은 segment가 송수신하고자 하는 데이터의 몇 번째
Byte에 해당하는지 알 수 있음.

확인 응답 번호(acknowledgment number)는 상대 Host가 보낸 segment에 대한
응답으로, 다음으로 수신하길 기대하는 순서 번호.
올바르게 수신한 순서 번호에 1이 더해진 값으로 설정.

순서 번호가 100이면 확인 응답 번호는 101이다.

segment가 확인 응답 번호를 가지고 있을 때 ACK 플래그를 1로 설정함.
ACK 플래그는 제어 비트에서 승인을 나타내는 비트.

제어 비트(플래그 비트)는 현재 segment에 대한 부가 정보를 나타내는 정보.

  • ACK : segment의 승인
  • SYN : 연결 수립
  • FIN : 연결 종료

SYN,FIN제어비트는 순서를 증가시킨다.

)

SYN, FIN인 경우 Len이 0인데도 SN이 1이 증가했다.


반면 ACK, PSH등은 1로 설정되어도 SN에 영향을 주지 않는다.

)

SYNFIN만 순서 번호를 1 소비하는 이유는
TCP가 연결을 연속된 Byte stream(byte stream)으로 모델링하고,
그 스트림의 시작과 끝을 Byte offset 으로 표현하기 때문이다.

TCP에서는 데이터뿐 아니라 연결의 시작(SYN)과 종료(FIN)도
스트림 상에서 순서를 갖는 이벤트로 취급되며,
이 두 제어 비트만 1Byte의 순서 번호 공간을 차지한다.

Byte stream에서 데이터가 어디서부터 어디까지가
하나의 메시지인지에 대한 정보는
TCP가 아니라 상위 Application Protocol이 정의한다.


ApplicationLengthPayload를 사용해
Byte stream에서 메시지 경계를 구분한다.

Length : 뒤따르는 데이터의 Byte 길이
Payload : 실제 애플리케이션 데이터(메시지 본문)

수신 측 Application은 TCP로부터 받은 연속 Byte stream을 읽다가
먼저 Length를 해석한 뒤, 그 길이만큼의 Payload를 읽어
하나의 메시지 단위로 복원한다.

계층 관점에서 보면 구조는 다음과 같다.

Application Message
  ↓ (Length + Payload framing)
// Length 정보가 손상되어 엉뚱한 Payload를 읽는 경우도 가정해 예외처리 해야한다.
TCP Payload (`Byte stream`)
  ↓
TCP Segment (분할/재조립 가능)
  ↓
IP Packet

즉 TCP는 단지 순서 있는 Byte 전달만 담당하고
메시지의 경계와 의미는 Application 계층이 정의한다.

또한 TCP는 양방향 스트림이므로
각 방향의 스트림은 서로 독립적으로 존재하며
각각의 시작과 종료를 알리기 위해
SYNFIN이 사용된다.


처음 TCP의 연결이 열리면

(SYN)A →→→→→→→→→→→→ B(FIN)
(FIN)A ←←←←←←←←←←←← B(SYN)

독립적인 Byte stream이 두개 생긴다.

끝내고 시작할때 두개의 Byte stream에 각각 SYNFIN을 보내기 위해서
3-way handshake, 4-way handshake를 진행한다.


연결과정 3-way handshake

양쪽이 초기에 순서 번호를 동기화하고 통신 상태를 확인하는 작업
2-way로 연결되면 과거의 SYN에 잘못 응답할 수 있음.
과거의 SYNSYN + ACK를 하게되면 ACK를 하지 않게 해 예외처리가능

A →        SYN semgnet1        (SN:100,         len=0, 제어비트 + 1) → B
A ←     SYN + ACK segment2    (SN:200,AN:101, len=0, 제어비트 + 1) ← B
A →     ACK semgnet3        (SN:101,AN:201, len=0) → B
→ 연결성립

재전송을 통한 오류 제어

송수신 중 잘못 전송된 segment가 있을 경우, 재전송해 오류를 제어한다.

  • 중복된 ACK segment 도착 시
  • 타임아웃이 발생했을 때 발생한다.
A → seg1(SN=100, AN=0,   len=4) → B
A ← ACK (SN=500, AN=104, len=0) ← B

A → seg2(SN=104, AN=0,   len=6) → B
A ← ACK (SN=500, AN=110, len=0) ← B

A → seg3(SN=110, AN=0, len=5)     X B

A ← ACK (SN=500, AN=110, len=0) (dup) ← B
A ← ACK (SN=500, AN=110, len=0) (dup) ← B
A ← ACK (SN=500, AN=110, len=0) (dup) ← B
A → seg1 (SN=100, AN=0, len=7)   X B
        (timeout)

A → seg1 (SN=100, AN=0, len=7)      → B
A ← ACK  (SN=500, AN=107, len=0) ← B

오늘날의 TCP는 응답한번, 송신한번이 아니라
응답을 한꺼번에 보내고 송신도 한꺼번에 받는다.

A → seg1 (SN=100, AN=0,   len=1) → B
A → seg2 (SN=101, AN=0,   len=1) → B
A → seg3 (SN=102, AN=0,   len=1) → B

A ← seg4 (SN=500, AN=101, len=0) ← B
A ← seg5 (SN=500, AN=102, len=0) ← B
A ← seg6 (SN=500, AN=103, len=0) ← B

흐름 제어

송신 Host수신 Host의 처리 속도를 고려해 송수신 속도를 균일하게 맞추는 기능.
TCP Header의 윈도우에 수신할 수 있는 수신 윈도우 크기가 명시된다.
송신 Host가 이 수신 Header수신 윈도우 크기를 통해 속도를 맞춘다.


혼잡 제어

많은 트래픽으로 인해 Packet 처리 속도가 느려지거나 유실될 수 있는 상황에서
segment 전송 오류,송신 Host가 중복된 ACK segment를 받거나 타임아웃이 발생했을 때
네트워크가 혼잡할 수 있다고 판단함.

혼잡없이 전송할 수 있을 정도의 양을 혼잡 윈도우라고 하는데
송신 Host가 혼잡 판단 시, 혼잡 윈도우 양 만큼 송신하게 된다.

혼잡 윈도우의 양은 송신 Host가 계산해 알아내야 하는데
이 과정을 혼잡 제어 알고리즘이라고 한다.
기본적인 혼잡 제어 알고리즘으로 AIMD(Addrive Increase/Multiplicative Decrease)가 있다.

합으로 증가, 곱으로 감소라는 의미의 이 알고리즘은 segment를 보내고
그에 대한 응답이 오기까지 혼잡이 감지되지 않으면 혼잡 윈도우를 RTT(Round Trip Time)마다 1씩 선형 증가시키고
혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨리는 동작을 반복하는 알고리즘이다.

RTT(Round Trip Time) : Packet을 보내고 응답 수신까지의 시간


TCP 종료 4-way handshake

A → FIN, ACK      (SN=100, AN=0,   len=0) → B
A ← ACK          (SN=200, AN=101, len=0) ← B
A ← FIN, ACK      (SN=200, AN=101, len=0) ← B
A → ACK          (SN=101, AN=201, len=0) → B
→ 연결종료

UDP(User Datagram Protocol)

비연결형 Protocol로 신뢰할 수 없는 Protocol이다.
데이터를 독립적인 Datagram 단위로 전달한다.

TCP와 달리 연결 설정, 상태 유지가 없음
도착, 순서, 중복, 재전송을 보장하지 않는다.
혼잡/흐름제어 또한 없다.

다중화와 역다중화를 제외하면 IP에 아무것도 추가하지 않는다.
UDP는 거의 IP와 직접 통신하는 셈.

무슨 데이터를 언제 보낼지에 대해 Application 레벨에서 정교한 제어가 가능하다.
데이터 손실/순서 보장도 Application 레벨에서 구현해야한다.

UDP는 실시간성이 중요하고, 지연이 최소화로 이루어져야 하는 곳에서
주로 사용된다.

UDP checksum을 통해 헤더와 데이터의 손상만 확인한다.
손상이 확인되면 Datagram이 폐기됨.


UDP Hole Punching

NAT(Network Address Translation) 뒤에 있는 두 클라이언트가 직접 UDP 통신을 할 수 있도록
NAT에 임시 Port mapping(hole)을 생성하는 기술로
P2P(Peer to Peer) 연결이 이 방법을 쓴다.

NAT에서 언급한것 처럼 Private IP는 외부에서 직접 접근이 불가함.

클라이언트가 중앙 서버로 UDP 패킷을 보내면
클라이언트의 NAT이 패킷의 경로를 NAT 테이블에 등록해
클라이언트의 Public IPPort를 생성한다.
중앙 서버는 이 정보를 기록하여 통신 시 각 클라이언트에게 전달한다.

1️⃣ A → Server : “B랑 연결하고 싶다”

2️⃣ 
Server → A : B의 공인IP/Port 전달
Server → B : A의 공인IP/Port 전달

3️⃣
A → B 공인IP:Port 로 UDP 전송
B → A 공인IP:Port 로 UDP 전송

4️⃣
A의 NAT Table에 B의 Public IP + Port 허용 매핑 등록
B의 NAT Table에 A의 Public IP + Port 허용 매핑 등록

기존 A ⇄ Server ⇄ B의 구조보다
빠르고 서버 비용이 절감된다.
A ⇄ B

통신이 클라이언트에 의존적이게 되기 때문에

  • 치트의 위험
  • Host의 환경에 따라 통신상태가 결정됨
  • Host는 지연이 없어서 유리함.
  • 보안 문제가 있다.

QUIC(Quick UDP Internet Connection)

구글에서 개발한 Application Protocol

UDP 위에서 동작하는 신뢰성·보안·MultiStream 전송 Protocol
TCP, TLS, HTTP/2 기능을 통합하여 지연을 줄이고
HOL(Head-of-Line) blocking을 제거한 현대 전송 Protocol

HOL(Head-of-Line) blocking

Packet 손실 때문에 뒤 데이터까지 지연되는 현상

UDP안에 QUIC를 넣어 보내는데, QUIC에는 TCP의 기능이 구현되어있다.
아예 새 Protocol을 만들면
다른 장비들에 적용되기 전까지 많은 시간이 걸리지만

QUIC는 기존 UDP를 사용했기 때문에
Application단에서만 패치하면 사용 가능

TCP + TLS
Client → SYN
Server → SYN+ACK
Client → ACK        (TCP 완료)

Client → ClientHello
Server → ServerHello
Client → Finished
Server → Finished   (TLS 완료)
QUIC
Client → Initial (ClientHello)
Server → Initial (ServerHello, cert, key)
Client → Handshake (Finished)
Server → 1-RTT data 가능

Connection ID를 기반으로 연결하기 때문에
IP가 변경되어도 연결이 지속됨.

QUICTCP처럼 ACK를 쓰고 혼잡 제어, 재전송, 암호화가 이루어진다.

TCP는 손실된 Packet을 보내기 위해 다른 Packet이 대기해야 하는 반면
QUIC는 손실된 Packet만 새로운 Packet Number로 다시 보낸다.

단계 TCP QUIC
Handshake 3-way+TLS TLS 통합
RTT 2 1/0
스트림 1 다수
HOL 있음 없음
종료 FIN Frame

던전앤파이터 경우
수신 대기 포트에 Hole Punching용 UDP를 올려놓는다.
결투장이나 파티사냥이 시작되면 P2P로 서로 연결한다.

마을이나, 던전을 혼자 돌때는 TCP로 동작한다.

UDP는 사용하지 않아도 주기적으로 1byte Packet을 보내는데
NAT keepalive을 위해 주기적으로 갱신하기 위해서 이다.


참고 문헌
이것이 컴퓨터 과학이다 with CS 기술면접
컴퓨터 네트워킹 하향식 접근 제7판


문제

객관식 10문제

https://gemini.google.com/share/d4e998670cee

서술형 10문제

  1. OSI 7계층 중에서 게임 클라이언트 개발자가 주로 다루거나
    신경 써야 하는 계층은 어디라고 생각하시나요? 그 이유와 함께 설명해 주세요.
  2. TCPUDP의 가장 큰 차이점을 설명하고, 게임 내
    캐릭터 이동아이템 상점 거래에는 각각 어떤 프로토콜을 사용하는 것이
    적절할지 본인의 생각을 말씀해 주세요.
  3. TCP3-way handshake 과정을 설명해 주시고,
    왜 2번이 아닌 3번의 과정을 거쳐야 하는지 이유를 설명해 주세요.
  4. TCP에서 HOL(Hand-Of-Line)이 왜 발생하고, 이것이 실제 게임 플레이에 어떤 형태의 지연/버벅임으로 나타나는지 예를 들어 설명해 주세요.
  5. MTU패킷 단편화에 대해서 설명해보세요. 만약 클라이언트에서
    너무 큰 데이터를 한 번에 보내려 할 때 네트워크 계층에서
    어떤 일이 발생하는지 설명해 주세요.
  6. 실시간 멀티플레이 게임에서 UDP Hole Punching
    기술을 사용하는 이유와 그 동작 원리에 대해 간략히 설명해 주세요.
  7. NAT 환경에서 서버가 클라이언트에게 먼저 패킷을 보내기 어려운 이유는 무엇이며,
    이를 해결하기 위해 클라이언트가 주기적으로 보내는 패킷을 무엇이라 부르나요?
  8. TCP의 흐름 제어혼잡 제어의 차이점을 설명해 주세요.
  9. 게임 클라이언트가 서버로부터 받은 바이트 스트림을 역캡슐화하여 의미 있는 데이터(패킷)로 복원할 때,
    패킷의 경계를 어떻게 구분하는지 구조적 관점에서 설명해 주세요.
  10. ARP의 역할은 무엇이며, 게임 클라이언트가 목적지 서버의 IP 주소만 알고 있을 때
    실제 데이터 링크 계층에서 전송하기 위해 어떤 과정을 거치게 되나요?

내용에 대한 질의나, 수정 요청은 저에게 큰 도움이 됩니다.

'Network' 카테고리의 다른 글

Docker로 Gitea 배포하기  (0) 2026.06.01