[CS] 컴퓨터 네트워크 IP주소

재오·2023년 5월 28일
5

CS

목록 보기
20/35
post-thumbnail

IP Address

IP주소는 네트워크 통신에 있어서 각각의 통신기기에 할당된 식별번호를 의미한다.

  • IPv4:
    점( . )으로 구분되어진 4개의 그룹으로 구성되며, 각 그룹은 32비트를 갖는다. (0.0.0.0 부터 255.255.255.255 까지 나타낼 수 있다.)
  • IPv6:
    콜론( : )으로 구분되어진 8개의 그룹으로 구성되며, 각 그룹은 128비트를 갖는다.

Subnet Mask

IP주소에서 네트워크 주소호스트 주소를 나눠주는 역할을 한다. 똑같은 IP주소라고 하더라도, 서브넷 마스크가 다르면 IP주소가 의미하는 바가 완전히 달라지게 된다. 호스트 간의 네트워크 통신은 같은 네트워크 주소 내에서만 이루어진다.

예를 들어, 인하대학교는 860 - xxxx 전화번호를 사용한다. 인하대학교에서 860이라는 통신국을 하나 사고, 그 뒤에 0000부터 9999까지 10000개의 번호를 학과, 학부에 알아서 부여해줄 수 있는 것이다.

IP주소의 클래스


클래스는 하나의 IP주소에서 네트워크 영역과 호스트 영역을 나누는 방법이자 약속이다. 하나의 네트워크에서 몇개의 호스트 주소까지 가질 수 있는가에 따라서 클래스를 나눌 수 있다.

A 클래스

A 클래스는 하나의 네트워크가 가질 수 있는 호스트 수가 제일 많은 클래스이다. IP주소를 32자리 2진수로 표현했을 때, 맨 앞자리 수가 항상 0인 경우가 A클래스이다. 십진수로 표현한다면 0.0.0.0 ~ 127.255.255.255까지 가질 수 있다.

A 클래스에서 네트워크 주소는 가장 작은 네트워크인 1.0.0.0과 가장 큰 네트워크인 126.0.0.0까지고 규정되어 있다. 보통 마지막은 제외된다. 그래서 127은 포함되지 않는다.

호스트 주소가 가질 수 있는 IP주소 개수는 (2^24) - 2 개이다. 2를 빼주는 이유는 모두가 1인 경우에는 브로드캐스트 주소로 사용하고 모두 0인 경우에는 네트워크 주소로 사용하기 때문이다.

B 클래스

B 클래스는 반드시 10으로 시작한다. 십진수로 표현한다면 128.0.0.0 ~ 191.255.255.255까지이다. 호스트 주소가 가질 수 있는 IP주소 개수는 (2^16) - 2 개이다. 이유는 위와 같다.

C 클래스

C 클래스는 반드시 110으로 시작한다. 십진수로 표현한다면 192.0.0.0 ~ 223.255.255.255까지이다. 호스트 주소가 가질 수 있는 IP주소 개수는 (2^8) - 2 개이다. 이유는 위와 같다.

주소가 딱 있으면 앞에 자리를 보고 몇 대 몇으로 끊어야할 지 알아야 한다. 195.8.7.9라고 가정을 한다면 195이기 때문에 3:1로 끊어야 하는구나 하고 195.8.7 이랑 9 이렇게 읽는다. 따라서 첫번째 바이트를 읽고 class별로 끊어읽어야 하는 포지션을 알면 된다.

서브넷(Subnet)

클래스가 정해지면 네트워크 당 사용 가능한 IP주소가 정해진다. 클래스 A를 사용할 경우 한 개의 네트워크 당 약 1600만 대의 호스트를 연결할 수 있고, 클래스 B를 사용할 경우 한 개의 네트워크 당 6만5천 대의 호스트를 연결할 수 있다. 하지만 실제로 이렇게 많은 호스트를 연결하는 것은 주소가 낭비되는 것이다.

IP주소를 효율적으로 활용하기 위해서 클래스 A와 B 같은 대규모 네트워크를 좀 더 작은 네트워크로 분할하는 것을 서브넷팅이라 하고, 분할된 네트워크를 서브넷이라고 한다.


위 그림은 네트워크 부가 모두 0인 클래스 A의 네트워크 1개를 256개의 작은 네트워크로 서브넷팅 한 것이다. 호스트 부의 비트를 서브넷 부로 변경하여 서브넷으로 만든다. 서브넷팅을 하면 네트워크 부와 호스트 부로만 구성되었던 클래스가 네트워크 부 - 서브넷 부 - 호스트 부로 변경된다. 위 그림에서는 호스트 부의 8비트를 서브넷 부로 변경하여 256(2^8)개의 서브넷을 만들었다.

클래스 A의 IP주소를 서브넷팅하면 네트워크 부가 변경되는데 IP주소만으로는 변경된 네트워크 부가 어디까지인지 알 수가 없다. 서브넷팅을 한다고 해서 IP주소가 변경되는 것은 아니기 때문이다. 따라서 IP주소를 서브넷팅하는 경우 IP주소와 별도로 어디까지가 네트워크 부이고 어디까지가 호스트 부인지 구별할 수 있는 식별자가 필요한데 이 식별자를 서브넷 마스크라고 한다.

서브넷 마스크

서브넷 마스크는 IP주소의 네트워크 부와 호스트 부의 경계를 식별하기 위해 만든 숫자이다. 서브넷 마스크는 IP주소의 32비트에 대응한 32비트로 구성되어 있다. 즉, 서브넷 마스크는 IP주소처럼 32개의 0 또는 1로 구성된 값이다.

IP주소의 비트가 네트워크 부이면 이 비트에 대응하는 서브넷 마스크의 비트는 1이 되고, IP주소의 비트가 호스트 부이면 서브넷 마스크의 비트는 0이 된다. 이러한 방법으로 클래스에 구애받지 않고 IP주소의 네트워크부를 식별할 수 있다.

십진수 표기법

IP주소와 마찬가지로 보기 쉽게 전체 32비트를 8비트씩 4그룹으로 나누어, 각 그룹을 십진수로 변환한다.

Prefix 표기법

서브넷 마스크를 슬래시(/)와 네트워크부 비트수로 나타내는 표기법이다. 네트워크가 8비트인 클래스 A에서 8비트를 서브넷팅한 IP주소를 서브넷 마스크로 정의하면 아래 그림과 같다.

서브넷 마스크의 유용성

서브넷 마스크를 사용하면 8비트 단위가 아닌 1비트 단위로 네트워크 부를 구성할 수 있기 때문에 더 세분화된 네트워크를 만들 수 있다. IP주소를 낭비하지 않을 수 있다. 서브넷 마스크는 반드시 연속한 '1'과 연속한'0'으로 구성된다. '1'과 '0'이 교대로 나타나는 서브넷 마스크는 없다.

네트워크 주소


네트워크 1을 보면 203.179.33.1은 라우터1에서 할당한 IP주소이다. 위에서 설명한 것과 같이 호스트는 203.179.33.0203.179.33.255 이 두 주소를 사용하지 못한다. 0은 네트워크 주소, 255는 브로드 캐스트 주소로 할당이 되기 때문이다.

목적지 주소를 알려면 목적지 경로를 아는 주소가 Router Table 안에 있어야 한다. 클래스 A라고 가정하면 네트워크1 부터 m까지 각 16000000개의 주소를 라우터가 가지고 있어야만 한다. 이게 가능할까..? 주소를 보고 속한 네트워크가 어디인지 알아야만 한다. 시작 주소를 찾은 후에 테이블을 찾아본다.Routing Table은 디테일한 주소 말고 네트워크의 주소를 적는다. 시작 주소를 끄집어 내기 위해서는 아래와 같이 하면 된다.

네트워크 주소를 알기 위해서는 목적지 주소와 서브넷 마스크 주소를 AND 하면 된다.

네트워크 영역, 호스트 영역 개수 구하기

위에서 우리가 구했던 서브넷 마스크는 기본 서브넷 마스크이다(클래스 A는 1바이트 '1' 나머지는 '0'과 같은 기본값을 의미). 이제는 사용자가 만든 서브넷을 구해볼 것이다.
201.222.5.0인 IP주소를 255.255.255.248 서브넷 마스크를 씌우면 서브넷 마스크는 11111111.11111111.11111111.11111000이다. 여기서 4바이트에 있는 11111은 사용자가 지정한 네트워크영역이고 000은 사용자가 지정한 호스트영역이다. 즉 위와 같은 경우에는 2^5개의 서브넷 네트워크를 가지고, 호스트 IP의 개수는 2^3 - 2개를 가진다.

네트워크 주소 계산 문제

유형 1)

우선 IP주소는 14.24.72.0/24 이다. 여기서 n의 값은 24이고 그 말은 즉, 24개의 prefix 값을 갖는다. 하나의 블락에서는 120개가 필요하다. 2의 제곱만으로 나타내어야 하기 때문에 120개보다 살짝 더 많은 128개(2^7)를 할당해준다. 여기서 n의 값은 7이 된다. 그렇다면 prefix(네트워크 서브넷은 32-7 = 25)가 된다.
14.24.74.0/25가 시작주소가 되고 14.24.74.01111111/25(14.24.74.127/25)가 마지막 주소가 된다. 두번째 블락의 시작주소는 14.24.74.128/26이 된다. 60은 64(2^6)개를 할당해주기 때문에 n= 6이 되기 때문에 32-6 = 26이 되는 것이다. 두번째 마지막 주소는 14.24.74.10111111/26이 되는 것이다. 세번째 블락도 이와 같은 원리로 적용해주면 된다.

유형 2)


서브넷 안에 서브넷이 들어있는 문제로 서브넷 문제에서 끝판왕 문제이다.

문제를 이해하자면 첫번째 그룹은 64개의 호스트에게 256개의 주소를 나눠준다는 의미이다.

우선 각 그룹의 시작주소를 알아보자. 첫번째 그룹은 2^6 x 2^8 = 2^14. 따라서 n = 32-14 = 18이다. 190.100.00[000000.00000000]/18로 나뉘어지고 두번째 그룹도 이와 마찬가지로 190.100.01[000000.00000000]/18로 나뉜다(그룹1 + 1). 세번째 그룹은 190.100.100[00000.00000000]/19 가 된다.

따라서 첫번째 그룹은 n은 32-8 = 24이고, 00이후부터 6개를 마음대로 000000 ~ 111111으로 지정할 수 있는 것이다.190.100.00000000.0000000/24가 시작주소가 된다.

두번째 그룹은 256 = 2^7로 7개를 마음대로 이용해서 만든다. 시작 주소는 190.100.01000000.00000000/25 가 된다.

유형 3)

위의 풀이와 비슷하게 a그룹은 50 <= 2^6, b그룹은 400 <= 2^9, c그룹은 1000 <= 2^10이다.
IP주소를 풀게 된다면 34.104.11100000.00000000/19가 된다. 뒤에서부터 6개를 자유롭게 호스트 주소로 사용이 가능한 것이다. a그룹의 최종 주소가 끝나면 34.104.11100000.01000000/26이 된다. 하지만 b그룹 시작전에 중간에 1이 들어있다. 이때는 suffix가 9에 0이 있을 때까지 스킵해야 한다. 밑에서부터 9칸까지 0으로 만들 때까지 이동하면 34.104.11100010.00000000/23이 된다. b의 최종 IP주소는 34.104.11100011.11111111/23이고, c는 34.104.11100100.00000000/22가 시작주소가 된다. 최종 c의 코드는 34.104.11100111.11111111/22이다.

⭐️ NAT(공유기가 하는 역할)


보내는쪽 주소는 10.0.0.1이고 port넘버가 3345라고 가정을 하자. 상대방 IP는 128.119.40.186이고 상대방 port넘버는 80이라고 가정을 한 것이다. 보내는 주소를 저렇게 써도 TCP는 양방향성을 가지고 있기 때문에 오는게 문제다.

138.76.29.7처럼 사설망 주소와는 다르게 전세계 하나만 있는 주소가 필요하다. 라우터는 2번과 같이 138.76.29.7과 같은 public주소로 바꿔야만 한다. 여기서 문제는 사설망 주소가 너무 많다. 65000개일 수도 있는 것이다.

따라서 port넘버로 구분을 하기로 한다. 테이블을 살펴봐서 최초로 나가는 거라면 테이블에 없을 것이다. 그때 쓰지 않는 port넘버를 할당을 해주고 테이블에 기록한다. 그리고 헤더를 5001로 바꾼다. 그리고 보낸다. 상대방은 응답을 그 주소로 보내준다. 그리고 5001을 살펴보고 테이블에 해당되는 10.0.0.1, 3345로 바꿔서 그 주소로 응답을 보내주는 방식이다.

NAT 정리

사설망 내에 있는 컴퓨터가 특정 서버로 접속하고 싶은 경우 NAT 장비는 접속을 요청하는 컴퓨터에 port번호를 할당하여 테이블을 관리하고, 자신의 public IP주소에 port번호를 붙여서 보낸다. 응답 패킷이 도착하면 NAT 장비는 Port번호를 관리해둔 테이블에서 패킷이 가야할 사설망 내의 컴퓨터를 찾아서 보내준다.

profile
블로그 이전했습니다

2개의 댓글

comment-user-thumbnail
2023년 5월 28일

햇갈리는 IP 주소 체계 정리해주셔서 감사합니다!

1개의 답글