● Name Resolver
- gethostbyname()
○ 도메인 이름을 이용하여 IP 주소 및 관련 정보를 구함
- gethostbyaddr()
○ IP 주소를 이용하여 도메인 이름을 구함
#include <netdb.h>
struct hostent *gethostbyname (const char *hname);
struct hostent *gethostbyaddr (const char *in_addr, int len, int family);
● netdb.h - Host Entry 관련
#include <netdb.h>
struct hostent {
char* h_name; // 호스트 이름
char** h_aliases; // 호스트 별칭
int h_addrtype; // 호스트 주소의 종류
int h_lenth; // 주소의 크기
char** h_addr_list; // IP 주소 리스트
};
#define h_addr h_addr_list[0] // 첫 번째(대표) 주소
● FTP (File Transfer Protocol) 기반 알FTP
1. ftp ice.anyang.ac.kr
/* name resolver */
2. hp = gethostbyname("ice.anyang.ac.kr");
3. Name resolver는 UDP를 이용하여 name server에게 query
4. IP address를 찾으면 응답 (129.254.0.150) 다음 name server에게 query
○ DNS (Domain Name System)을 이용한 주소 찾기
=> 인터넷에서 도메인 이름을 IP 주소로 변환하는 데 사용되는 시스템입니다. DNS를 이용하면 사용자가 기억하기 쉬운 도메인 이름을 통해 웹사이트에 접속할 수 있으며, 이 도메인 이름을 실제 네트워크 통신에 필요한 IP 주소로 변환해 준다.
DNS의 동작 원리
1. 도메인 이름 입력: 사용자가 브러우저의 주소 창에 도메인 이름을 입력한다.
2. DNS 쿼리 생성: 브러우저는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 쿼리를 생성
3. 로컬 DNS 캐시 확인: 먼저, 브러우저는 로컬 DNS 캐시에 이 도메인 이름이 저장되어 있는지 확인한다. 저장되어 있으면 캐시된 IP 주소를 사용한다.
4. 로컬 DNS 서버 요청: 로컬 캐시에 없으면, 브러우저는 설정된 DNS 서버(일반적으로 ISP의 DNS 서버)로 쿼리를 보낸다.
5. 재귀적 조회: 로컬 DNS 서버는 자체 캐시에 요청한 도메인이 없으면, 재귀적 조회를 수행하여 다른 DNS 서버에 쿼리를 전달한다. 이 과정은 다음과 같은 순서로 진행된다.
6. IP 주소 반횐: 로컬 DNS 서버는 얻은 IP 주소를 브라우저에 반환하고, 브라우저는 이 IP 주소를 사용하여 해당 웹 서버에 접속한다.
● netdb.h - Service Entry 관련
struct servent {
char *s_name; // 공식 서비스 이름
char **s_aliases; // 서비스 이름 별칭 리스트
int s_port; // 네트워크 바이트 순서의 포트 번호
char *s_proto; // 사용하는 프로토콜 (e.g., "tcp", "udp")
};
● Byte Order (바이트 순서)
- CPU마다 메모리로 부터 데이터를 읽는 방식이 다름
- 0000000001010000
○ little endian : 높은 주소부터 읽는다.
- Intel 계열
- 2^14 + 2^12 = 20480
○ big endian : 낮은 주소부터 읽는다.
- Motorola 계열
- 80
- 네트워크는 big endian를 사용한다.
● 바이트 순서를 바꾸는 함수
○ Network byte order
- Big endian
○ 2바이트와 4바이트의 구분
- Unsigned short integer 변환
htons() : host-to-network short 바이트 변환
ntohs() : network-to-host short 바이트 변환
- Unsigned long integer 변환
htonl() : host-to-network long 바이트 변환
ntohl() : network-to-host long 바이트 변환
'인터넷과 소켓프로그래밍' 카테고리의 다른 글
TCP 에코 서버 (계속) (0) | 2024.07.28 |
---|---|
소켓 개요 및 TCP 에코 서버 (0) | 2024.07.26 |
포트번호와 주소변화 (0) | 2024.07.24 |
서브넷 및 IPv6 주소 (3) | 2024.07.23 |
IPv4 (0) | 2024.07.20 |