[네트워크] TCP, UDP 헤더형식과 게임서버 특징

Robert.Yang·2023년 5월 20일
1

Network

목록 보기
29/59
post-thumbnail

이 포스트는 널널한 개발자님 강의를 참조하여 작성한 포스트입니다.

TCP, UDP 헤더형식과 게임서버 특징

TCP Header 형식

헤더형식을 구체적으로 봐보자. 위 그림의 가로 크기 체계가 32bit단위로 무언가 표현이 되어있다. Source Port와 Destination Port가 존재하며 이 포트는 16bit 주소체계로 되어있다. 이 포트의 값의 범위로 이야기를 해보면 0~65535번가지 가는데 문제는 이 포트중에 0,65535번은 쓸 수가 없다. 그래서 쓸 수 있는 포트의 개수는 2^16-2이다. 또한 이 포트중에 well-known 포트라는 것이 있는데 이게 무엇이냐면 TCP기본값(80), FTP, TELNET 기본 포트들과 같이 기본으로 정의되어 있는 포트들이며 이것을 포트로 쓸 수가 없다.

그리고 그 다음으로 Sequence Number가 나오는데 이것은 일련번호이다. 전 포스트에서 설명했었는데 여기서 추가적으로 더 알아둬야 할 것이 위 그림의 option값에 data offset이 byte단위로 있을텐데 예를 들어 100byte라고 하면 이 Sequence Number는 100씩 증가를 하게 되어 있다. ACK Number는 Sequence Number + 1이다. 그 다음 data offset이 나오는게 이것이 뭐냐면 TCP payload 위치를 계산할 때 사용되는 값이다. IP Header의 IHL과 유사하다.

그 다음으로 flag값들이 쭉 있는데 이 flag들이 TCP의 상태를 결정할 때 사용한다. 우리가 앞서 본 FIN, SYN, ACK말고도 RST라는 것도 있는데 이것은 뭔가 연결이 꼬일때 리셋시키는 플래그이다. 즉, 비정상적으로 연결이 끊길때 이 flag를 보낸다. PSH는 TCP통신할 때 버퍼링하지 말고 즉시 보내달라는 flag이고 그 외 NS, CWR, ECE, URG부분은 혼잡제어 부분이다. 혼잡제어란 TCP장애가 발생하면 네트워크가 혼잡해지고 회선이 복잡해지니 데이터 속도를 천천히 하기위한 통제 flag이다. 그 다음 window size라는 것은 여유공간을 의미한다. 그 다음 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방식으로 사용된다.

profile
모든 것을 즐길 줄 아는 개발자, 양성빈입니다.

0개의 댓글