TCP, UDP 서버 공부 #1 Nodejs / C로 TCP, UDP 서버 만들어 보기

Explanation

이번 주제는 TCP/UDP 랍니다.
간단하게 이론적으로 TCP는 3-way-handshaking 라거나 흐름 제어라거나 높은 신뢰성을 보장하고, UDP는 비연결형으로 낮은 신뢰성을 가지고 있지만 TCP보다 빠르다. 뭐 이정도만 알고 있는데요. 직접 TCP / UDP 서버를 만들어서 비교해서 이것저것 실험해보면 둘의 차이를 조금 더 잘 알고 이해할 수 있지 않을까 하는 생각이 들어 한번 해보게 되었답니다.
그리고 오늘 적을 내용은 간단한 메세지를 주고 받는 TCP / UDP 서버를 만들어 본 내용을 적어 보려합니다.

1. UDP Server – Node

우선은 그나마 가장 익숙한 Nodejs를 이용해서 아주 간단하게 UDP 서버를 만들어보면 아래와 같답니다.

생각해보니까, 저는 한번도 UDP 서버를 사용해본 적이 없더라고. 그래서인지 막연히 UDP 서버를 구성하는게 굉장히 복잡할 줄 알았는데 생각보다 Nodejs에서 구성하는 건 엄청 간단했어요.

어떤걸 테스트해야 TCP와 차이를 확실히 알 수 있을까… 생각해봤는데 마땅히 방법이 안떠오르더라고요. 그나마 생각한 방법은 UDP의 패킷은 헤더 8Bytes를 제외하고 최대 크기가 65,527Bytes니까 65,528Bytes의 데이터를 보내보자!

하지만… 결과는…

그냥 오류가 뜹니다.

하지만 그안에서도 별거 아닐 수 있지만, 새롭게 알게 된 사실이라면!
Mac OS 에서는 UDP 패킷의 데이터를 9,217Bytes만 보내도 오류가 출력된답니다.
왜 그런지 찾아보니 맥 기본 설정값이 그렇게 되어 있다고 하더라고요.
참고 링크. https://github.com/jaegertracing/jaeger-client-node/issues/124#issuecomment-324222456

그리고 고민을 하다가 Javascript는 하이 레벨의 언어이고 NodeJS도 굉장히 최근의 플랫폼이다보니 상대적으로 조금 로우한 레벨의 언어로 해봐야겠다! 라는 생각이 들어서 C 언어로 만들어봐야겠다. 했어요.

2. UDP Server – C

우선 관련해서 회사 동생에게 물어봤는데, 회사 동생이 윤성우님의 “열혈 TCP/IP 소켓 프로그래밍” 책을 빌려줘서 아래의 코드는 해당 책에 나오는 예제를 참고해서 약간 수정한 코드입니다.

한줄 한줄 코드에 대해 이야기하면 좋을 것 같지만,

(사실 저도 C 언어를 잘 모른 답니다.)

3. TCP Server – C

그리고 비교를 위해 TCP 서버도 만들어봤는데요.
TCP는 아래의 글의 예제를 참고해서 약간 수정한 코드랍니다.
참고 링크. https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa

짜잔!

(굉장히 간단한 코드지만.. 개인적으로는 오랜만의.. 엄청난 삽질의 결과물이랍니다..)
하지만, 역시나.. 비교 테스트 예제를 만들기가 어려운 거 같아요.

우선은 여기까지하고, 다음에 짬짬히 더 공부해서 다음 포스팅에 TCP/UDP의 비교 예제를 포스팅 하도록 하겠습니다.

혹시, 이 가련한 개발자 중생을 위하여 UDP와 TCP의 차이를 확인할 수 있는 예제를 알려주시는 용자님이 계신다면, 성은이 망극할 것 같사옵니다. 주륵..