포트폴리오/[IoT 기반 피지컬 AI 교육일지]

[ C++ 네트워크 통신 기초 ] TCP/UDP 차이 및 바이트 오더(Endian) 변환 등 정리 (21일차 기록)

개발자혜콩 2026. 3. 11. 09:00

1. 오늘 한 것

① 네트워크 프로토콜 이해: TCP vs UDP

  • TCP (Transmission Control Protocol)
    • 특징 : 정보가 한 번이라도 누락되면 안 되는 높은 신뢰성이 필요할 때 사용. 상대방의 IP가 연결되어 있어야 함.
    • 사용처 : 은행 프로그램, 카카오톡 등 데이터의 정확성이 생명인 곳.
  • UDP (User Datagram Protocol):
    • 특징: 신뢰도는 다소 낮지만, 패킷에 순서나 연결 상태를 묻지 않아 속도가 매우 빠름. 여러 명에게 동시에 뿌리는 브로드캐스트(Broadcast) 기능이 있음.
    • 사용처: 약간의 끊김이나 데이터 손실이 있어도 실시간성이 중요한 영상 스트리밍 등.

② 데이터 송수신 개념: Packing & Unpacking

  • 패킹 (Packing / 직렬화): 구조체 같은 덩어리 데이터를 네트워크로 전송하기 위해 일렬로 줄을 세워 '짐을 싸는' 과정.
  • 언패킹 (Unpacking / 파싱): 수신받은 데이터를 다시 의미 있는 데이터(종류별)로 나누어 '짐을 푸는' 과정.

네트워크 구조: IP 주소와 포트(Port)

  • IP 주소: 통신을 위한 '집 주소' (여러 대가 공유 및 사용 가능).
  • 포트(Port): 그 집 안의 '방 호수'. 프로세스와 1:1로 매칭됨.
  • 주의점: 포트는 한 번 열었으면 반드시 잘 닫아주어야(Close) 충돌이나 시스템 에러를 방지할 수 있음.

④ 바이트 오더(Byte Order)와 정렬 함수

  • 엔디안(Endian) 차이: 데이터를 메모리에 저장하는 순서.

         → 리눅스/윈도우 PC(호스트)는 보통 '리틀 엔디안'을 쓰지만, 네트워크 세상은 '빅 엔디안'을 표준으로 사용함.

  • hton (Host to Network): 내 PC(호스트)에서 밖(네트워크)으로 나가는 데이터 변환. (리틀 엔디안 → 빅 엔디안)
  • ntoh (Network to Host): 밖(네트워크)에서 내 PC(호스트)로 들어오는 데이터 변환. (빅 엔디안 → 리틀 엔디안)

⑤ C언어/리눅스 실무 팁 및 기타 OS 개념

  • 명시적 자료형 사용: unsigned int 대신 크기가 명확한 uint16_t, uint32_t를 사용하여 플랫폼 간 호환성 확보.
  • 메모리 함수: memset, memcpy를 적절히 활용해 데이터 초기화와 복사를 깔끔하게 처리.
  • 우분투 고정 IP 할당: sudo ifconfig enp0s3 192.168.0.105 up 명령어로 임시 고정 IP 할당 실습.
  • FTP (File Transfer Protocol): 우분투 환경에서 파일을 빠르고 쉽게 업로드/다운로드하며 공유하는 방법 확인.
  • RTOS (Real-Time OS): 지정된, 예상된 시간 안에 작업을 '반드시' 끝내주는 실시간 운영체제의 특징 이해.

2. 문제 / 헷갈린 점

통신 보안에 대한 막막함 (공개키 알고리즘 등):

    • 강사님께서 통신 시 '공개키 알고리즘' 등을 사용하여 암호화해 보내는 등 보안에도 신경을 써보라고 하셨는데, 네트워크 개념 자체도 벅찬 상황이라 이 부분이 아주 생소하게 느껴졌다.
    • 보충 정리: 찾아보니 우리가 흔히 쓰는 TCP/UDP로 데이터를 그냥 보내면(평문 전송), 중간에 누군가 패킷을 가로채서(스니핑) 그 내용을 다 들여다볼 수 있다고 한다. '공개키 암호화(RSA 등)'는 데이터를 '잠그는 키(공개키)''여는 키(개인키)'를 다르게 만들어서, 중간에 탈취당해도 암호를 풀 수 없게 만드는 훌륭한 방어막 역할을 한다. 당장 직접 C언어로 복잡한 암호화 알고리즘을 다 짜기는 어렵겠지만, 추후 소켓 통신 프로그램이 안정화되면 OpenSSL 같은 보안 라이브러리를 붙여서 센서 데이터를 안전하게 전송하는 방안을 꼭 고민해 봐야겠다.

hton, ntoh 방향성 헷갈림 

  • 처음에 나가는 건지 들어오는 건지 헷갈렸는데, 단어 그대로 h(Host) to n(Network)내 방에서 밖으로 나가는 거니까 리틀->으로 바꾸는 거라고 이해하니 명확해짐.

포트와 IP 변환 시 자료형 크기 오류 바로잡기:

* 수업을 들으며 메모할 때 크기를 잘못 적었는데 다시 찾아보니,

  • htons의 **'s'**는 short 타입으로 16비트(2바이트). 주로 포트 번호 변환에 씀.
  • htonl의 **'l'**은 long 타입으로 32비트(4바이트). 주로 IP 주소 변환에 씀.

3. 오늘 배운 핵심

  • 네트워크 데이터 전송 시 바이트 오더(Endian) 변환은 선택이 아닌 필수다. (hton, ntoh 함수 사용)
  • 네트워크 통신은 단순히 데이터를 보내는 것을 넘어 '암호화(보안)'까지 고려해야 완벽해진다.
  • memset, memcpy 같은 메모리 제어 함수와 명시적 자료형(uint32_t 등)을 습관화하여 예측 가능한 안정적인 코드를 짜자.