TCP, UDP 헤더형식과 게임서버 특징
TCP Header 형식
헤더형식을 구체적으로 봐보자. 위 그림의 가로 크기 체계가 32bit단위로 무언가 표현이 되어있다. Source Port와 Destination Port가 존재하며 이 포트는 16bit 주소체계로 되어있다. 이 포트의 값의 범위로 이야기를 해보면 0~65535번까지 가는데 문제는 이 포트중에 0,65535번은 쓸 수가 없다. 그래서 쓸 수 있는 포트의 개수는 2^16-2이다. 또한 이 포트중에 well-known 포트라는 것이 있는데 이게 무엇이냐면 HTTP(80), FTP(20, 21), TELNET(23) 등과 같이 기본으로 정의되어 있는 포트들이며 이것을 포트로 쓸 수가 없다.
그리고 그 다음으로 Sequence Number가 나오는데 이것은 일련번호이다. 전 포스트에서 설명했었는데 예를 들어 세그먼트 크기가 1000bytes라고 하면 이 Sequence Number는 1000씩 증가를 하게 되어 있다. ACK Number는 Sequence Number + 1이다. 그 다음 data offset이 나오는게 이것이 뭐냐면 TCP payload 위치를 계산할 때 사용되는 값이다. IP Header의 IHL과 유사하다.
좀 더 설명을 덧 붙이면,
-
데이터 오프셋 값 = 헤더 길이 (32비트 단위)
- 헤더 길이 지정: 데이터 오프셋 필드는 TCP 헤더의 총 길이를 32비트(4바이트) 단위로 나타낸다. 기본값은 5(즉, 20바이트)로 설정되어 있으며, 이는 옵션 필드가 없는 기본 헤더를 의미한다.예를 들어:
- 데이터 오프셋 = 5 → 5 * 4 = 20바이트 (옵션 없음)
- 데이터 오프셋 = 6 → 6 * 4 = 24바이트 (옵션 필드 4바이트 포함)
- 옵션 필드의 존재 여부 및 크기 결정: 데이터 오프셋을 통해 수신 측은 TCP 헤더에 옵션 필드가 있는지, 있다면 얼마나 긴지를 알 수 있다. 이를 통해 실제 데이터 페이로드가 헤더의 어디서 시작되는지를 정확히 파악할 수 있다.
그 다음으로 flag값들이 쭉 있는데 이 flag들이 TCP의 상태를 결정할 때 사용한다. 우리가 앞서 본 FIN, SYN, ACK말고도 RST라는 것도 있는데 이것은 뭔가 연결이 꼬일때 리셋시키는 플래그이다. PSH는 TCP통신할 때 버퍼링하지 말고 즉시 보내달라는 flag이고 그 외 NS, CWR, ECE, URG부분은 혼잡제어 부분이다. 혼잡제어란 TCP장애가 발생하면 네트워크가 혼잡해지고 회선이 복잡해지니 데이터 속도를 천천히 하기위한 통제 flag이다.
장애 유형은 보통 대표적으로 아래와 같다.
- 패킷 로스
- 재전송 + 재응답(ACK)
- 순서 안 맞음
- 윈도우 크기 0: 물론 이거는 네트워크 수준의 장애라기 보단, 어플리케이션 프로세스 상에서 해당 스트림 데이터를 가져오고 처리하는데 문제가 생겨 발생한 것이므로 어플리케이션단에서 조치를 취해야한다.
그 다음 window size라는 것은 TCP 버퍼 크기의 여유공간을 의미한다.
그 다음 checksum은 data가 손상된게 없는지 계산할 때 쓰이는 검사합값이다.
UDP Header 형식
UDP 헤더를 보면 TCP에 비해 매우 간단하다. Source Port, Destination Port, Length, Checksum밖에 없다. 그래서 UDP는 혼잡제어를 하지 않고 수신측에 대한 고민을 전혀 하지 않는다.
즉, UDP는 클라이언트를 배려하지 않는 프로토콜이다. 그런데 이런 UDP를 언제 사용할까? 예를 들면 IPTV를 생각해보자. IPTV의 영상을 송출해주는 서버가 있고 이 서버와 연결된 많은 클라이언트들이 잇는데 누구는 N/W가 빠르고 누구는 느리는 경우가 있을 것이다. 그러면 이 중에 느린 N/W를 기준으로 맞추면 빠른 N/W 사용자는 손해를 볼 것이다. 그래서 이런것을 송출할 때는 모두를 고려하는게 아닌 일단 빨리 보낼때 이것을 사용한다.
또한 게임서버를 생각해보자. 내가 LOL과 같은 게임을 만들고 싶으면 동기화가 중요하다. 문제는 TCP를 이용해 게임서버를 동기화하면 하향평준화가 되어 문제가 생길 것이다. 즉, 한놈이 느려지면 전체적으로 서버가 느려진다. 그래서 동기화를 위해 UDP를 사용한다. UDP를 이용하고 혼잡제어부분은 서버자체에서 구현을 하면 된다.
또한 HTTP3에서도 UDP방식으로 사용된다.
출처
외워서 끝내는 네트워크 핵심이론 - 기초 강의 | 널널한 개발자 - 인프런
널널한 개발자 | TCP/IP에서 HTTP까지! 네트워크에 대한 기본 이론이 부족한 분들이 '외워서'라도 전공 이론을 이해하고자 희망하는 분들을 위해 준비한 강의입니다. 할 수 있습니다!, 네트워크, 외
www.inflearn.com
'네트워크' 카테고리의 다른 글
TCP 연결과 게임버그 (0) | 2025.01.10 |
---|---|
TCP에서의 연결이 착각...인가? (0) | 2025.01.10 |
TCP 연결 종료와 상태 변화 (0) | 2025.01.10 |
TCP 연결 과정(3-way handshaking) (0) | 2025.01.10 |
TCP와 UDP 개요 (0) | 2025.01.09 |