kakasoo

[TCP/IP] 주소정보의 표현 (자료형, 매크로 상수들이 있는 이유) 본문

프로그래밍/네트워크

[TCP/IP] 주소정보의 표현 (자료형, 매크로 상수들이 있는 이유)

카카수(kakasoo) 2020. 7. 15. 13:38
반응형

주소정보의 표현

 

1
2
3
4
5
6
7
8
9
10
struct in_addr{
    in_addr_t s_addr; // 32bit IPv4 인터넷 
};
 
struct sockaddr_in{
    sa_family_t        sin_family; // 주소체계(address Family)
    uint16_t     sin_port; // 16비트 TCP/UDP PORT 번호
    struct in_addr     sin_addr; // 32bit IP 주소
    char sin_zero[8// 사용되지 않음
};
cs

 

 

어떤 주소 체계를 사용하는가 -> IPv4

IP 주소는 무엇인가 -> xxx.xxx.xxx.xxx (자신의 IP, 또는 연결하고자 하는 IP를 말해야 한다.)

포트 번호는 무엇인가 -> 9180 (임의의 값을 말해주면 된다.)

 

이 질문에 모두 답했다면 소켓 간의 통신이 가능해졌다고 볼 수 있다, 이제 소켓에 정보를 담아야 하는데,

우리가 앞서 servScok과 ClientSocket에 담았던 정보들도 여기 있는 것들이다. (서버 소켓과 클라이언트 소켓)

sin_family는 sa_family_t의 자료형을 가진 변수로, IPv4, IPv6 따위의 주소 체계를 넣어야만 한다.

미리 만들어진 상수 AF_INET를 넣어주면 자동적으로 IPv4가 된다.

sin_port에는 포트의 번호를,

sin_addr에는 32비트 정수 자료형으로, IP 주소를, 마지막 sin_zero는 반드시 0으로 채워야 하는 변수이다.

(sockaddr_in의 구조체 크기를 sockaddr와 맞추기 위해서 일부러 만들어 놓은 것이다.)

 

(원래는 sockaddr를 사용했는데, 이 당시에는 하나의 배열에 IP와 포트 번호를 모두 입력해야 했다)

(그리고 남은 자리를 0으로 채워 넣어야 했던 불편함이 있었는데, 이 둘을 분리하는 과정에서 sin_zero[]가 생겼다.)

 

전부 처음 보는 자료형과, 많은 매크로 상수들이 존재하는데, 이들은 모두 확장성을 고려하여 만들어진 것들이다.

무시하고 싶다면, 사실 무시해도 된다. (내 생각에는, 이게 바뀔 날이 올 때쯤에는 이미 다시 공부해야 한다.)

만약 우리가 사용하고 있는 자료형들의 개념, 정의가 바뀐다고 하더라도 그대로 유지할 수 있도록,

자료형을 socket programming에 맞춰서 전부 재정의해놓은 것들이기 때문이다.

반응형