본문 바로가기
2CHAECHAE 학교생활/OSNW실습

[ OS/NW 실습 ] 7주차 - 바이트 순서( Byte Order ), 인터넷 주소와 도메인

by 2CHAE._.EUN 2022. 10. 29.

[ 바이트 오더( byte order ) ]

 

CPU는 바이트 단위로 주소가 주어지며 메모리의 데이터를 read/write할 수 있다.

* 산술논리장치 ALU 안에는 누산기( accumulator )가 존재한다.

 

MSB( Most Significant Byte ) : 중요도가 높은 바이트

LSB( Least Significant Byte ) : 중요도가 낮은 바이트

 

MSB가 가장 높은 주소로 들어갈 수도 있고, 제일 낮은 주소로도 들어갈 수 있다.

MSB가 높은 주소로 들어갈 때를 빅 엔디안이라 하고, MSB가 낮은 주소로 들어갈 때를 리틀 엔디안이라 한다.

* 인텔 CPU는 리틀 엔디안 방식이다.

서로 다른 엔디안 방식을 가진 CPU가 데이터를 주고 받을 경우 한쪽에서는 작은 수의 데이터를 전달했지만

반대쪽에서는 엄청 큰 수의 데이터를 받게 되어 엉뚱한 값을 전달받게 된다. 그래서 서로 다른 엔디안 방식을 가진

CPU가 데이터를  주고 받을 경우 바이트를 역전해서 읽을 수 있는 경우를 고려해야한다.

 


[ 네트워크 바이트 오더 ]

 

네트워크 바이트 오더는 빅 엔디안으로 통일한다. 데이터를 전송할 때는 빅 엔디안이든 리틀 엔디안 컴퓨터이든

네트워크 바이트 오더로 변환 후 송신해야 한다. 수신 측에서도 마찬가지로 수신 후 다시 호스트 바이트 오더로 변환해서

수신 해야 한다. 

* 자기 자신의 컴퓨터가 호스트 바이트 오더이다.

 


[ 바이트 오더 변환 함수 ]

 

바이트 오더 변환은 송신하기 직전에 이뤄진다.

 

16bit htons host to network short
  ntohs network to host short
32bit htonl host to network long
  ntohl network to host long

 


[ 인터넷 주소와 도메인 ]

 

인터넷 : 수많은 노드가 서로 연결된 거대 네트워크 ( 네트워크의 네트워크 )

인터넷 주소 : 노드에 부여된 유일한 주소

 


[ 인터넷 주소 관리 체계 ]

 

인터넷 주소의 크기 : 4byte( 32bit ) → 0.0.0.0 ~ 255.255.255.255

 

인터넷 주소의 상위 4bit 값으로 class를 구분한다. 

A class는 첫 bit가 0으로 시작하지만 B,C,D는 첫 bit가 1로 시작한다.

 

 

1. A class : 0

 

0을 제외한 나머지 31bit에서 7bit은 Network ID이고, 나머지 24bit는 Host ID이다.

Network ID가 7bit이기 때문에 전 세계의 A class를 할당받은 네트워크는 128개밖에 존재하지 않는다.

또한 Host ID가 24bit이기 때문에 2^24개의 호스트가 존재할 수 있다.

ex) 구글

 

2. B class : 1 0

 

1과 0을 제외한 나머지 30bit에서 14bit는 Network ID이고, 나머지 16bit는 Host ID이다.

Network ID가 14bit이기 때문에 2^14=16384개의 B class를 할당받은 네트워크가 존재할 수 있다.

ex) 카카오, NHN

 

3. C class : 1 1 0

 

1 1 0을 제외한 나머지 29bit에서 21bit는 Network ID이고, 나머지 8bit는 Host ID 이다.

Network ID는 21 bit이기 때문에 2^21개의 C class를 할당 받은 네트워크가 존재할 수 있다.

 

< check_class 실행하기 >

 

1. 집 컴퓨터의 IP 주소를 확인하면 C class임을 확인할 수 있다.

2. NHN으로부터 제공받은 서버의 IP는 B class임을 확인할 수 있다.

3. 구글의 IP 주소는 A class임을 확인할 수 있다.

 

즉, 인터넷 주소는 총 32bit로 구성이 되어있고, 상위 4bit를 가지고 class를 구분한다.

 


[ 인터넷 주소는 이더넷 카드에 할당 ]

 

인터넷 주소는 컴퓨터가 아니라 이더넷 카드에 할당이 된다. 

MAC address는 고유한 물리적인 주소로 변경이 불가능하다. ( 공장에서 만들때 생성이 되는 것임 )

* MAC 주소를 변경하기 위해서는 메인 보드 자체를 변경해야 한다.

 

인터넷 주소는 이더넷 카드에 할당이 되어있고, MAC address와 1:1 매칭이 된다.

컴퓨터가 이더넷 카드를 여러 개 가지게 된다면 인터넷 주소를 여러 개 가질 수 있다.

 


[ 인터넷 주소 변환 ]

 

인터넷 주소는 10진수로 되어있지만 컴퓨터는 2진수를 주로 사용한다.

네트워크 프로그램은 스트링 타입처럼 들어오는 정수 주소를 32bit의 2진수 데이터로 변환하고, 32bit 인터넷 주소를

다시 스트링 형태의 정수 주소로 바꿔주는 변환 과정이 필요하다.

 

inet_addr : 10진수 스트링 주소를 받아서 2진수 인터넷 주소로 변환하는 함수

→ 점 표기 방식을 2진수 인터넷 주소로 변환한다.

 

inet_ntoa : 2진수 인터넷 주소를 받아서 10진수 스트링 주소로 변환한다.

→  2진수 인터넷 주소를 점표기 방식으로 변환한다.

 

< check_class 실행하기  >

 

 

int main(int argc, char **argv)
{ 
	struct in_addr laddr;
    
	unsigned int ipaddr = 0;
	ipaddr = inet_addr(argv[1]);
    
	printf("inet_addr() : %s -> %8x\n", argv[1],ipaddr);
	printf("inet_ntoa() : %8x -> %s\n", ipaddr, 
    
	inet_ntoa(*(struct in_addr*)&ipaddr));
    
	if(inet_aton(argv[1], &laddr) != -1) {
		printf("inet_aton() : %s -> %8x\n", argv[1], laddr.s_addr);
		printf("inet_ntoa() : %8x -> %s\n", laddr.s_addr, 
		inet_ntoa(*(struct in_addr*)&laddr.s_addr) );
	}
}

 

* %8x : 8자리의 16진수로 표현

   %s : 16진수로 표현

 


[ 도메인주소 ]

 

컴퓨터가 내부적으로 표현할 수 있는 주소의 형태 : 2진수 형태의 32bit

관리를 위한 주소의 형태 : 10진수 점 표기 방식

사람을 위한 주소의 형태 : 도메인 주소

 

도메인 주소는 ICANN에서 관리한다.

DNS : DNS 서버에 도메인 이름을 요청하면 해당 도메인의 인터넷 주소를 응답해준다.

→ 도메인 주소는 인터넷 주소와 맵핑되어, 도메인 주소를 변환해주는 시스템이 필요하다.

 

< namelookup 실행하기 >

 

 

해당 도메인주소에 해당하는 IP 주소를 반환해준다. IP 주소는 언제든 변경될 수 있다. ( 고정적인 주소가 아니다. )

 

같은 도메인이라도 다른 IP 주소를 반환할 수 있다.  

→ 분산 시스템의 로드 밸런싱( 부하 균등 ) 때문이다. 내부적으로 각각의 IP 주소를 가지고 있는 서버를 여러 개 가지고

있는 회사가 존재한다. 그래서 접속한 사람마다 도메인 네임 서버에서 로드 밸런싱을 통해 다른 서버의 IP를 

전달함으로서 서버의 과부하 상태를 막아준다.

 

즉, 하나의 도메인 주소는 여러 개의 인터넷 주소를 가질 수 있다.

* 인터넷 주소 기반의 분산 시스템 구성이 가능하다. → 라운드 로빈 방식

 

* /etc/resolve.conf :  도메인 서비스가 서버 & 클라이언트 모델로 서버가 명시되어있다.