개인 공부/네트워크
[Chapter 03-3] 네트워크 바이트 순서와 인터넷 주소 변환
Koalitsiya
2023. 7. 20. 10:59
바이트 순서와 네트워크 바이트 순서
- CPU에 따라 바이트를 저장하는 순서에 차이가 있을 수 있음
- 이것을 고려하지 않고 데이터 송수신 시 전송되어온 데이터의 해석순서가 달라져 문제가 발생할 수 있음
- CPU가 데이터를 저장하는 방식은 두 가지로 나뉨
- 빅 엔디안(Big Endian): 상위 바이트의 값을 작은 번지수에 저장
- 리틀 엔디안(Little Endian): 상위 바이트의 값을 큰 번지수에 저장
저장될 정수 | 빅 엔디안 | 리틀 엔디안 | ||||||
0x12345678 | 0x20번지 | 0x21번지 | 0x22번지 | 0x23번지 | 0x20번지 | 0x21번지 | 0x22번지 | 0x23번지 |
0x12 | 0x34 | 0x56 | 0x78 | 0x78 | 0x56 | 0x34 | 0x12 |
네트워크 바이트 순서는 빅 엔디안을 기준으로 함
바이트 순서의 변환(Endian Conversions)
- unsigned short htons(unsigned short);
short형 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환 - unisgned short ntohs(unsigned short);
short형 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환 - unsigned long htonl(unsigned long);
long형 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환 - unsigned long ntohl(unsigned long);
long형 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환