소켓 구조체 및 빅엔디안, 리틀엔디안

이동욱

2021/07/30

Categories: 네트워크

소켓 자료 구조


- 전송 계층 프로토콜
- 네트워크 계층 프로토콜
- Source 호스트의 IP 주소
- Destination 호스트의 IP 주소
- Source 프로세스의 포트번호
- Destination 프로세스의 포트번호
struct sockaddr {
  uint8_t sa_len; // 주소 길이
  sa_familiy_t sa_family; // 주소 패밀리
  char sa_data[14]; // 주소 값
}
struct sockaddr_in {
  uint8_t sin_len; // 주소 길이
  sa_familiy_t sin_family; // 주소 패밀리
  in_port_t sin_port; // 포트번호

  struct in_addr sin_addr; // IPv4 주소값
  char sin_zero[8]; // 사용되지 않는 값 (sockaddr 과 길이를 맞추기 위함)
}

struct in_addr {
  uint32_t s_addr; // IP 주소
}

주소를 소켓에 적용시키는 방법


#include <sys/types.h>
#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

빅엔디안과 리틀 엔디안


만약 아래와 같은 연속된 바이트로 구성된 데이터가 있다고 가정하자.

| 0x |  12 | 34 | 56 | 78 | 9a | bc | de | f0 |
#include <netinet/in.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
struct sockaddr_in srv_addr;
int port = 9001;

srv_addr.sin_port = htons(port);

참고 문헌


>> Home