본문 바로가기

애니리뷰

네트워크 3 ) IP 어드레싱

1계층 - 케이블이 연결된 상대에 대한 신호 전달

2계층 - 신호 송수신 가능한 상태에서, 세그먼트 내에서 어떻게 데이터를 주고받는가? 상위층으로 신호를 제대로 송수신하기 위한 순서 AND 신호를 데이터로서 수신하거나 충돌이 일어나지 않도록

3계층 - 세그먼트(라우터와 라우터 간의 범위)를 넘어, 그 세그먼트 간의(즉, 네트워크의) 데이터 송수신하는 계층.

 

허브를 사용시, 송신측이 보낸 신호는 허브에 의해 연결된 모든 기기에 도달한다.

이를 막기 위해 스위치를 쓰며, 멀티캐스트, 브로드캐스트, 아직 학습하지 않은 주소 수신의 프레임을 플러딩함으로써 허브에 의해 발생할 수 있는 충돌을 방지한다. 그러나, 브로드캐스트 송신 시, 브로드캐스트가 도달하는 범위의 모든 컴퓨터가 이를 수신해서 자기와 관계있는지 여부를 확인해야 하니, 처리가 증가한다.

또한 라우터는 브로드캐스트를 중계하지 않기에, 라우터를 넘어서는 브로드캐스트는 송신되지 않으며, 네트워크를 나눔으로써 브로드캐스트가 송신되는 양은 감소한다. 이렇게 나뉜 네트워크 간의 데이터는 어떻게 송수신할까? 이것이 3계층이 하는 역할이자, 인터넷이라 불림.

 

이러한 인터넷 프로토콜은....

이를 위해 필요한 것은 우선 어드레싱

2계층에서는 MAC주소에서, 앞 24비트는 제조업체 번호, 뒤 24비트는 제조업체가 붙은 번호가 되지만 어디로 갈 건진 없다. 따라서, 3계층만의 주소가 필요한다. 즉, 어느 네트워크에 있는 어느 컴퓨터라는 조합이 필요하다.

 

다음으로 필요한 건 라우팅. 수신처까지, 어떤 경로로 갈지를 결정.

 

위의 두 가지 작업을 위해 TCP/IP에 쓰이는 것이 IP(Internet Protocol)임.

IP헤더가 붙은 상태의 PDU는 IP데이터그램이라 불리며, IP헤더와 데이터그램은 아래와 같다.

 

IP 데이터그램

IP헤더 페이로드(상위 4계층 pdu가 들어감)
20바이트 + 옵션 0~8 키로바이트

IP헤더

번호 이름 용량 특징
1 버전 4 IP버전
2 헤더 길이 4 IP헤더 길이
3 서비스 타입 8 패킷의 우선도/중요도
4 데이터 길이 16 IP의 헤더와 페이로드 합친 길이
5 ID 16 데어터그램 식별번호
6 플래그 3 데이터그램 분할 여부의 판별
7 플래그먼트 오프셋 13 분할한 경우, 본래대로 되돌릴 때 사용
8 TTL 8 패킷 생존기간
9 프로토콜 8 상위 프로토콜 지정
10 헤더 체크섬 16 IP헤더의 에러 체크용 코드
11 송신처 IP주소 32 송신처 논리주소
12 수신처 IP주소 32 수신처 논리주소
13 옵션 n 특별한 설정을 할 때 사용

 

이러한 IP주소는, IEEE가 붙인 벤더코드와 벤더가 붙인 할당코드로 인해 수정이 불가한 MAC과는 다르게, 

네트워크에 접속할 때마다 붙이기에, 어느 네트워크에 소속되냐에 따라 바뀌게 됨.

3계층 주소는 '유니캐스트', '멀티캐스트', '브로드캐스트' 주소로 나뉘는데,

이 유니캐스트의 논리주소 중 '네트워크를 표시하는 번호는 접속된 모든 네트워크에서 유일해야 됨'. 즉, 소속네트워크에서 유일해야 됨.

따라서, 이를 통해, '네트워크 번호' + '컴퓨터번호'는 반드시 유일할 수밖에 없다.

 

IP주소는 조직 규모에 따라 A~E로 나뉘고, 각 클래스마다 제1옥텟(첫 8비트)에 차이가 있다.

클래스 제1옥텟(첫 8비트)
  네트워크번호
A 0xxxxxxx, 나머지가 컴퓨터번호
B 10xxxxxx, 앞 16비트가 네트워크번호, 나머지가 컴퓨터번호
C 110xxxxx, 앞 24비트가 네트워크번호, 나머지가 컴퓨터번호
D 1110xxxx, 보통은 할당하지 않음. 멀티캐스트용.
E 1111xxxx, 보통은 할당하지 않음, 연구용

이 네트워크 번호가 몇비트까지인지는, ICANN이 조직의 규모에 따라 할당시킨 클래스에 따라 달라진다. 

그럼 이 컴퓨터 번호는 누가 할당하는가? 이는 호스트번호라고도 불리며, 네트워크의 관리자가 마음대로 정한다.

이 때, 제4옥텟이 전부 0인 번호는 네트워크 주소로, 그 네트워크 자체를 표시하며

전부 1인 번호는 브로드캐스트 주소로, 전체가 수신하는 주소다.

 

근데 이렇게 많은 컴퓨터에 어떻게 일일이 번호를 설정하냐. 따라서 subnet(서브넷)을 활용하여,

호스트번호(컴퓨터번호)의 비트를 서브넷번호와 호스트번호로 분할한다. 

예를 들어, 클래스B의 네트워크 172.16.0.0을, 호스트번호 16비트를 서브넷번호 6비트와 호스트번호 10비트로 분할한다. 이 상태에선 아래와 같아진다.

제1옥텟 제2옥텟 제3옥텟 제4옥텟
네트워크 번호 호스트번호
172 16 4 1
10101100 00010000 000001 00 00000001
네트워크 번호 서브넷 번호 호스트 번호

서브넷은 그 네트워크 내부에서만 유효하다. 즉, 네트워크 외부에서 보면, 네트워크A의 서브넷1이나 2나 같은 네트워크A에 있느 것.

또한, 서브넷의 숫자가 커질 수록, 각 서브넷 내의 호스트 수는 감소하게 됨.

 

만약 컴퓨터가 어느 네트워크에 소속되어있는지 알려면 어떻게 해야 할까?

IP주소의 어디까지가 네트워크주소인지 모르면 큰 문제다.

따라서, 서브넷을 사용할 경우엔 서브넷마스크라 불리는 비트열을 IP주소와 동시에 표기하여, 어디까지가 서브넷번호인지를 나타낸다.

이를 위해서 네트워크 번호 & 서브넷 번호의 비트를 모두 1, 호스트번호를 0으로 한 것.

 

서브넷마스크의 비트가 1인 부분이 네트워크 번호로, 서브넷 마스크와 IP주소를 조합하면 그 IP주소의 네트워크 번호와 서브넷 번호의 비트수를 알 수 있다.

위의 IP주소에 대응하는 서브넷마스크는 아래와 같다.

제1옥텟 제2옥텟 제3옥텟 제4옥텟
네트워크 번호 서브넷 번호 호스트 번호
11111111 11111111 111111 00 00000000
255 255 252 0

네트워크 부분의 비트는 1로, 호스트 부분의 비트는 0으로 표기하는 것을 알 수 있다.

즉, IP주소 172.16.4.1, 서브넷마스크는 255.255.252.0으로 나열해 기술.

 

근데 만약 3000개의 IP주소가 필요하다 가정하자.

클래스B에는 65000개, 클래스C에는 256개의 주소 할당이 가능하다.

B를 해야 되는데, 62000개의 낭비가 된다.

따라서, 클래스리스 어드레싱을 사용하는데, 가령 네트워크번호가 18비트 필요하면 그 번호를 1010 0000 0000 0001 01로 하는 식. 이는 슈퍼넷이라고도 부르는데, 네트워크번호가 18비트이면, 호스트부분에 쓸 수 있는건 14비트가 되며, 16000개의 사용이 가능한 IP주소가 되는 것. 클래스C의 네트워크를 8개 모아서 큰 네트워크를 만드는 방식이다.

즉, 192.168.32.0, 192.168.33.0, ..... 192,168.39.0의 8개의 C네트워크를 합치는 식. 이 경우엔,

  제1옥텟 제2옥텟 제3옥텟 제4옥텟
192.168.32.0 1100 0000 1010 0000 0010 0000 0000 00000
192.168.33.0 1100 0000 1010 0000 0010 0001 0000 00000
192.168.34.0 1100 0000 1010 0000 0010 0010 0000 00000
192.168.35.0 1100 0000 1010 0000 0010 0011 0000 00000
192.168.36.0 1100 0000 1010 0000 0010 0100 0000 00000
192.168.37.0 1100 0000 1010 0000 0010 0101 0000 00000
192.168.38.0 1100 0000 1010 0000 0100 0110 0000 00000
192.168.39.0 1100 0000 1010 0000 0100 0111 0000 00000

앞의 21개의 비트(제3옥텟의 5개까지)를 네트워크번호로 가지며, 호스트번호로 11비트를 쓴다.

이 경우, 프리픽스 길이를 설정해, 어디까지가 네트워크번호인지를 표시한다.

즉, 192.168.32.0/21과 같이, 앞의 21개가 네트워크번호입니다~ 를 표시.

 

NAT(Network Address Translation) : NAT이 돌아가는 라우터 내의 많은 호스트는, 하나의 local area network로 생각하고, 여기서 받는 IP주소는 하나만. 그리고 하나하나 호스트에는 유니크한 포트넘버를 붙임. 

 

그래서, 이더넷을 사용해 IP데이터그램을 송수신하기 위해선 송신처MAC주소, 수신처MAC주소, 수신처IP주소, 송신처IP주소의 4개 주소가 필요하다.

우선, 송신처 자신의 MAC주소는 송신할 인터페이스의 MAC주소를 사용한다.

송신처 IP주소는 송신할 인터페이스에 설정된 IP주소를 설정한다. 이 때, IP주소가 자동으로 컴퓨터에 설정되는 건 DHCP를 활용한다. 이는, 할당할 IP주소를 관리하고, 실제 할당할 작업을 수행하는 서버와, 할당받는 클라이언트로 구성된다.

이는 클라이언트가 IP주소를 요청하면 서버가 그에 응해 주소를 할당한다.

이 때, IP주소풀이라는, 관리자가 할당할 주소 범위가 존재하는데, 가령

192.168.1.0/24라는 네트워크의 호스트에게는 192.168.1.1 ~ 192.168.1.254까지의 주소가 할당될 수 있다. 255는 마스크용이라 안 됨.

이더넷 헤더 IP 헤더 UDP 헤더 DHCP 메시지

DHCP메시지의 구조

옥텟 이름 설명
1 오퍼레이션 코드 클라이언트 -> 서버 : 1 // 서버 -> 클라이언트 : 2
4 클라이언트 IP 주소 현재 클라이언트 주소
4 할당 IP 주소 서버가 할당한 주소
4 서버 IP 주소 서버 주소
16 클라이언트 하드웨어 주소 클라이언트 MAC 주소
가변 옵션 메시지타입과 클라이언트 설정

DHCP의 동작은

1) 클라이언트가 DHCP DISCOVER 메시지를 브로드캐스트

2) 이를 받은 서버는 할당할 IP주소를 풀에서 선택해, 클라이언트에게 브로드캐스트로 통지

3) 클라이언트는 OFFER에서 받은 IP주소로 문제가 없으면 DHCP REQUEST를 서버에 브로드캐스트

4) 리퀘스트를 받은 서버는, 문제가 없으면 서브넷마스크 등 옵션설정을 동봉해 DHCP ASK를 보낸다. 

 

이제, 수신처의 MAC주소를 알아낼 차례다.

ARP를 사용해, MAC주소를 알아낸다. 

이 ARP는 ARP테이블이라는, IP주소와 MAC주소의 대응표를 통해 알아낸다.

만약 테이블에 수신처IP주소와 MAC주소의 대응이 없다면, 전체에 보내면 된다.

브로드캐스트를 통해, 지정된 IP주소를 갖는 컴퓨터만이 ARP대응을 보내도록 하면 된다.

그럼 응답을 받은 송신측 컴퓨터는 그를 ARP테이블에 기재하고, 이렇게 수신처MAC주소가 결정된다.

이는 추후 파기하는데, IP주소는 MAC기기가 어디에 있느냐에 따라 내내 바뀌니까 계속 갖고있으면 곤란하다. 테이블 용량 터짐.

 

그럼 MAC주소는 알았으니, 수신처IP주소를 알 차례다. 이는 도메인명(DNS)을 사용한다.

도메인명은 IP주소처럼, ICANN이 관리한다. 

이름과 IP주소를 대응시킨 DB를 가진 DNS서버에 문의해, 수신처의 IP주소를 알아내면 된다.

DNS서버는 각 조직에 하나씩 존재하고, 다른 조직 도메인명으로부터 IP주소를 알기 위해선, 그 조직의 DNS에 묻는다.

즉, 1) 사용자 애플리케이션은 도메인명으로 수신처를 지정

2) 그 도메인명에 대응하는 IP주소를 문의

3) DNS서버가 찾고자 하는 DNS서버에 문의를 통해, 다른 조직의 도메인명은 그 조직의 서버에 문의

4) 도메인명에 대응하는 IP주소를 입수

5) 입수한 IP주소를 DNS서버에 알려줌.

 

이렇게 데이터 전송의 흐름을 살펴보면,

DHCP와 ARP, DNS를 통해 4개의 주소를 결정

1) 자신의 IP주소를 수동이나 DHCP로 할당받고, MAC주소는 NIC를 장치함으로써 자동으로 암

2) 사용자 애플리케이션이 수신처 도메인명을 결정하면 DNS로 IP주소를 취득

3) IP주소가 결정되면, ARP로 MAC주소 획득

4) 이것으로 송신처, 수신처의 MAC주소, IP주소를 알았기에 데이터전송 가능

 

출처 - 하루3분 네트워크교실


라우터 : 매치 : longest destination IP prefix / 액션 : forward out a link

스위치 : 매치 : Destination MAC 주소 / 액션 : forward or flood

파이어월 : 매치 : IP주소 & TCP/UDP 포트넘버 / 액션 : permit or deny

NAT : 매치 : IP주소와 포트넘버 / 액션 : rewirte address와 포트

'애니리뷰' 카테고리의 다른 글

네트워크 4) 라우팅  (0) 2022.04.16
네트워크 5) 4계층(Transport Layer)  (0) 2022.04.16
opencv의 c++에서의 픽셀 접근  (0) 2022.03.27
네트워크 2 ) 신호의 전송과 충돌  (0) 2022.03.14
네트워크 1 ) 기초  (0) 2022.03.13