최근 회사에서 하드웨어 게이트웨이와 IOT기반 프로젝로 TCP 통신을 통해 프로토콜을 송 , 수신하는
프로젝트를 하였는데 하다 보니 들어본거 같은데 기억이 안나는 부분이 있어 정리한다.
일단 이번 프로젝트에서는 빅엔디언을 사용한다고 했는데
생각해보니 TCP 통신이 기본적으로 빅엔디언을 사용하니까 (표준상)
이렇게 유도하신걸로 생각이 공부하다가 들었다.
쨋든 엔디언은 메모리르 저장하는 방식을 말하는데 다중 바이트 - 예를 들어 2바이트 ,4바이트 이렇게 되어 있는거를 저장하는 방법을 말한다.
비교해보자
리틀엔디언은 쉽게 말해 하위바이트를 낮은 주소(숫자가 작은곳)
상위 바이트(숫자가 높은곳)이 있으면 숫자가 작은 낮은 주소에 저장하는 거고
주소 값
0x100 | 0x78 |
0x101 | 0x56 |
0x102 | 0x34 |
0x103 | 0x12 |
리틀엔디언 방식 - 메모리에서 숫자를 읽고 증가시킬때 유리하다.
빅엔디언은 반대로 높은주소에 먼저 저장하는거다
주소 값
0x100 | 0x12 |
0x101 | 0x34 |
0x102 | 0x56 |
0x103 | 0x78 |
빅엔디언 방식 - 사람이 읽을때 유리하다. - 디버깅이 쉽고 TCP에서 표준이다.
따라서 연산이 필요하면 리틀엔디언 , 데이터를 이해하는게 필요하면 빅엔디언을
쓰는게 유리하다고 정리할 수 있다.
#include <stdio.h>
#include <arpa/inet.h>
int main() {
unsigned int num = 0x12345678;
unsigned int converted = htonl(num); // Host to Network Long
printf("Original: 0x%x\\n", num);
printf("Network Byte Order: 0x%x\\n", converted);
return 0;
}
C로 간단하게 예제를 만들면 이렇게 되는데 이러면
Original: 0x12345678 Swapped: 0x78563412
이렇게 값이 들어오게 된다.
자바 기반 개발을 주로하는 내 입장에서는 오랜만에 보니까 반갑기도 어렵기도했다.
사실 자바는 JVM안에 자바가 잡고있는 OS 버츄어메모리를 사용하고 있으니까
이런 생각을 안하고 개발을 했었는데 이번 기회에 정리하게되서
재미있다.
'NetWork' 카테고리의 다른 글
유니캐스트 , 멀티캐스트 , 브로드캐스트 (0) | 2025.04.02 |
---|---|
Inline / out of Paths - 웹 보안에 대한 기술 방식 (0) | 2025.03.23 |
-2 Prometheus PromQL 과 사용법 (0) | 2025.03.11 |
-1. Prometheus와 도입 이유 (0) | 2025.03.11 |
nginx , Docker를 기반하여 포트포워딩 하는 법 (0) | 2025.01.09 |