개발자공부일기
IP란? 본문
IP의 개념
인터넷 프로토콜(Internet Protocol)의 약자로, 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미합니다. 인터넷 계층의 IP 프로토콜은 IP 주소를 사용하여 호스트나 네트워크 장비를 식별합니다. 인터넷에 접속한 컴퓨터와 라우터에 고유한 IP 주소를 할당하고, 그 IP 주소를 사용해서 컴퓨터를 특정하거나 통신 상대방으로 지정합니다.
IP 프로토콜에서는 현재 IPv4(Internet Protocol version 4)의 주소 체계를 사용하고 있습니다. 하지만 스마트폰의 등장 및 모든 사물이 인터넷으로 연결되는 사물 인터넷으로 인해 IP 주소를 사용하는 기기가 폭발적으로 증가하면서 IPv4보다 월등히 많은 수의 IP 주소를 할당할 수 있는 IPv6(Internet Protocol version 6)가 사용되기 시작했고, 향후 모든 IP 주소는 IPv6로 대체될 것이라 보고 있습니다. 보통 IP 주소라 하면 IPv4를 의미합니다.
IP(Internet Protocol)는 인터넷 계층에서 데이터를 패킷 단위로 처리하며, 네트워크 간의 데이터를 효과적으로 전달하기 위해 단편화(Fragmentation) 와 주소 지정(Addressing)이라는 두 가지 중요한 기능을 수행합니다.
1.IP의 단편화 (Fragmentation)
개요
- 단편화는 데이터 패킷이 전송 경로의 MTU(Maximum Transmission Unit)보다 클 경우, 패킷을 여러 개의 더 작은 조각(Fragment)으로 나누는 과정입니다.
- MTU는 네트워크 인터페이스가 전송할 수 있는 최대 데이터 크기(바이트 단위)를 정의합니다.
- 일반적으로 이더넷의 MTU는 1500바이트입니다.
단편화의 필요성
- IP 패킷은 다양한 네트워크 장치와 매체를 통해 전송되며, 각 매체의 MTU 크기가 다를 수 있습니다.
- 패킷 크기가 MTU를 초과하면, 전송 가능한 크기로 조정해야 합니다. 이를 단편화(Fragmentation)라고 합니다.
단편화 과정
- 패킷 나누기:
- 패킷은 MTU보다 작은 크기로 나뉩니다.
- 각 단편에는 원본 패킷의 정보와 재조립에 필요한 식별자(Identifier)가 포함됩니다.
- IP 헤더 추가:
- 각 단편에는 새로운 IP 헤더가 추가됩니다.
- 헤더에는 조각 정보를 담은 Fragment Offset과 More Fragments(MF) 비트가 포함됩니다.
- MF 비트: 더 많은 조각이 있으면 1, 마지막 조각이면 0.
Fragment Offset은 IPv4 헤더에서 단편화된 패킷의 데이터 시작 위치를 나타내는 필드입니다. 단편화(Fragmentation) 과정에서 패킷이 여러 조각으로 나뉘면, 각 조각이 원래 데이터의 어느 위치에서 시작되는지를 나타내는 정보가 필요합니다. Fragment Offset 필드는 이 역할을 수행하여 수신 측에서 데이터 재조립(Reassembly)을 가능하게 만듭니다.
3. 단편 전송:
- 나뉜 조각은 네트워크를 통해 전송됩니다.
단편화의 문제점
- 성능 저하:
- 각 단편은 추가 헤더로 인해 네트워크 오버헤드를 증가시킵니다.
- 재조립 실패:
- 한 조각이라도 손실되면 전체 패킷을 다시 전송해야 합니다.
- 보안 문제:
- 단편화를 악용한 DoS 공격(Fraggle Attack) 가능성.
단편화와 재조립 과정
- 발신지에서 단편화를 수행하며, 수신지에서 재조립을 합니다.
- 재조립은 IP 헤더의 식별자(Identifier)와 Fragment Offset을 사용해 원래의 순서대로 조립합니다.
단편화를 줄이는 방법
- Path MTU Discovery (PMTUD):
- 경로 상의 최소 MTU를 탐색하여 단편화를 피함.
- MSS (Maximum Segment Size):
- TCP에서 데이터 세그먼트 크기를 조정하여 MTU를 초과하지 않도록 설정.
2.IP의 주소 지정 (Addressing)
IP주소 체계 IPv4와 IPv6
IPv4
IPv4는 32비트의 주소를 가지고 각 비트는 0과 1만 가질 수 있다. 그래서 약 43억개정도의 주소 공간이 있다.
하나의 숫자로 표기하기엔 너무 크고 복잡하니 8비트씩 나눠서 2진표기법 혹은 점-10진 표기법으로 표기한다.
2진표기법:10000000 00001011 00000011 00011111
점-10진 표기법:128.11.3.31
아마 점-10진 표기법이 우리에게 익숙할 것이다.
IP주소에는 호스트가 속한 네트워크의 주소인 네트워크 부 와 호스트의 주소인 호스트 부 로 구성된다.
8비트씩 나뉜 4개의 파트중 대체 어디가 네트워크고 부이고 어디가 호스트 부일까? 처음에는 클래스 개념을 사용해서
이를 구분했다. 클래스기반 주소지정에서는 약 43억개의 주소가 A,B,C,D,E라는 클래스로 나뉘었다.
클래스는 네트워크를 구분하는 netid와 호스트를 구분하는 hostid로 구성되어있다. 주소할당을 요청하는 기관에 netid를 할당하고, 그 기관 내부에서 호스트마다 hostid를 할당하여 주소를 배정했다.
앞에 파란네모들은 첫번째 8비트에서 고정되는 숫자들이다.
A클래스는 0.0.0.0 ~ 127.255.255.255 1바이트의 Net ID,3바이트의 Host ID
B클래스는 128.0.0.0 ~ 191.255.255.255 2바이트의 Net ID,2바이트의 Host ID
C클래스는 192.0.0.0 ~ 223.255.255.255 3바이트의 Net ID,1바이트의 Host ID
D클래스는 224.0.0.0 ~ 239.255.255.255 Multicast address(멀티캐스팅을 위해 사용하는 주소)
E클래스는 240.0.0.0 ~ 255.255.255.255이다. Reserved(특별한목적으로 예약된 주소들)
여기서 클래스 A를보면 Net ID를 표현중인 8비트중 고정인 맨앞 1개의 비트를 빼면 7개비트로 구성할 수 있다. 2의 7제곱인 128개의 블록이 나오고 이를 128개의 기관에 할당가능하다. 하지만 각 블록은 약 1670만개로 이 주소를 모두 소화 가능한 기관은 거의 없을것이다. 한마디로 낭비가 심하다. 클래스 B라고 사정이 그리 다르지 않은데, 계산해보면 기관당 16384개의 주소가 할당된다. 많이 줄었지만 그래도 여전히 많은 숫자다. 클래스C를 보자 약210만개로 나누어지고 각 256개의 주소를 갖는다 갑자기 너무 적어지지 않았나? 이건 부족한 기관이 꽤 많을것이다. 이런 비효율성으로 인해 현재는 클래스를 사용하지 않고 서브넷 마스크(subnet mask)방식을 사용한다. IPv6다음에 알아보겠다.
IPv6
IPv6는 128비트(16바이트)이다. IPv4의 4배길이로 2진법도 점-10진법도 너무 길어서 콜론 16진법으로 표기한다.
예시:FDEC:0000:0007:0000:0000:BBFF:2310:FFFF
여기서 제로 압축이라고 콜론사이에 앞에있는 0은 생략하기도 한다.
예시:FDEC:0:7::BBFF:2310:FFFF
물론 2310의 0은 생략 불가하다.
점-10진법과 16진법을 같이 쓰는 혼합 표기법과 CIDR 표기법이란것도 있다.
CIDR 표기법은 서브네팅을 설명하며 끼워넣겠다.
IPv6는 2의 128승, 약 340간(약 340조 X 1조 X 1조) 개의 IP 주소를 사용할 수 있습니다.고갈되지 않는다고 봐도 무방하다.
IPv6 주소는 크게 유니캐스트(유일한 주소), 애니캐스트(가장 가까운 주소), 멀티캐스트(여러 목적지 주소)로 구분됩니다. 각 주소 유형의 특징을 아래에 설명드리겠습니다.
1. 유니캐스트(Unicast)
- 정의: 유니캐스트 주소는 하나의 송신자에서 하나의 수신자에게 데이터를 전송하는 방식입니다.
- 형식: IPv6의 유니캐스트 주소는 128비트로 구성되어 있으며, 일반적으로 2000::/3 범위 내에서 할당됩니다.
- 사용 예: 유니캐스트는 한 장치에서 다른 장치로 직접 데이터를 보내는 데 사용됩니다. 예를 들어, 특정 서버에 데이터를 보내거나, 클라이언트와 서버 간의 통신에서 사용됩니다.
2. 애니캐스트(Anycast)
- 정의: 애니캐스트 주소는 네트워크에서 여러 개의 장치가 같은 주소를 가지지만, 데이터가 가장 가까운 장치로 전달되는 방식입니다.
- 형식: 애니캐스트 주소는 유니캐스트 주소와 같은 형식이지만, 동일한 주소를 여러 장치가 사용할 수 있도록 관리됩니다. 실제로 라우터는 이 주소가 여러 장치에 할당되어 있을 때, 가장 가까운 장치로 데이터를 전송합니다.
- 사용 예: 애니캐스트는 주로 서버 클러스터나, 글로벌 DNS 서버에서 사용됩니다. 예를 들어, 여러 지역에 분산된 DNS 서버 중 가장 가까운 서버로 요청을 보내는 데 사용됩니다.
3. 멀티캐스트(Multicast)
- 정의: 멀티캐스트 주소는 하나의 송신자가 여러 수신자에게 데이터를 동시에 전송하는 방식입니다. 유니캐스트와는 달리, 송신자가 여러 수신자에게 한 번에 데이터를 보낼 수 있습니다.
- 형식: IPv6 멀티캐스트 주소는 FF00::/8 범위 내에 할당됩니다. 이 범위 내에서 멀티캐스트 그룹을 정의하며, 그룹별로 여러 수신자에게 데이터를 전달할 수 있습니다.
- 사용 예: 멀티캐스트는 비디오 스트리밍, IP 전화, 실시간 데이터 전송 등에 사용됩니다. 예를 들어, 한 번에 여러 사용자에게 실시간 방송을 송출할 때 사용됩니다.
더 파고 들어가면 끝이 없으니 여기까지만 하겠다.
서브넷 마스크
서브넷 마스크는 32비트의 이진수로 구성되며, 1로 된 비트는 네트워크 주소를 나타내고, 0으로 된 비트는 호스트 주소를 나타냅니다. 즉, 서브넷 마스크는 네트워크를 식별하는 데 사용되는 부분과, 호스트를 식별하는 데 사용되는 부분을 구분합니다. 네트워크 내에서 동일한 서브넷 마스크를 사용하는 모든 장치는 같은 네트워크에 속하고 각 호스트(장치)는 고유한 호스트 주소를 가집니다.
예시) 클래스C의 서브넷 마스크 = 11111111.11111111.11111111.00000000 = 255.255.255.0
그래서 이 서브넷 마스크란 친구로 뭘 하느냐? IP주소에 서브넷 마스크를 적용(AND연산)해서 네트워크 주소를 찾는다.
AND연산을 하는 이유는 서브넷 마스크에서 1인 비트는 IP 주소의 해당 비트와 그대로 일치시켜서 네트워크 주소의 일부를 구성하고, 0인 비트는 호스트 부분을 모두 0으로 만들어 호스트의 범위를 제한합니다
IP 주소: 11000000.10101000.00000001.00001010
서브넷 마스크: 11111111.11111111.11111111.00000000
---------------------------------------------------
네트워크 주소: 11000000.10101000.00000001.00000000
IP 주소 범위: 192.168.1.10/24 (CIDR표기법)
192.168.1.0은 IPv4주소 / 24는 서브넷 마스크에 32비트중 상위 24비트가 네트워크 부분 나머지가 호스트라는 뜻이다.
네트워크 주소: 192.168.1.0
브로드캐스트 주소: 192.168.1.255
호스트 주소: 192.168.1.1부터 192.168.1.254까지
서브네팅
하나의 네트워크 안에는 클래스에 따라 수 만개 이상의 호스트가 가지게 되는데, 단일 네트워크의 크기가 너무 큰 경우 특정 기기와의 통신을 시도할 때 브로드캐스트의 영향이 너무 크기 때문에 서브넷 마스크를 사용해 네트워크를 쪼개어 브로드 캐스트 영역을 보다 작은 네트워크(서브넷)으로 나눌 수 있습니다 이 행위를 서브네팅이라고 합니다. 이를 통해 작은 그룹으로 네트워크를 조직화하고 관리하여 효율적인 IP주소 관리가 가능하고 유지 관리가 쉬우며 트래픽이 줄어 성능향상을 기대할 수 있습니다. 또한 서브넷 간에 보안적인 경계를 설정하여 (부서 간에 트래픽을 분리하여 보안성을 높이듯) 보안 강화를 할 수 있습니다.
서브네팅을 하려면 서브넷 마스크를 사용하여 네트워크 주소와 호스트 주소를 구분합니다. 서브넷 마스크는 IP 주소의 어느 부분이 네트워크 주소인지, 어느 부분이 호스트 주소인지를 정의하는데 사용됩니다.
192.168.1.0/24라는 네트워크를 서브네팅한다고 가정해 봅시다.
- 서브넷 마스크: /24는 24비트가 네트워크 주소를 나타낸다는 뜻입니다. 서브넷 마스크는 255.255.255.0으로 나타낼 수 있습니다.
- 서브넷 나누기: 서브네팅을 통해 더 작은 네트워크로 나눌 수 있습니다. 예를 들어, 이 네트워크를 2개의 서브넷으로 나누고 싶다면 /25로 서브네팅할 수 있습니다. 서브넷 마스크는 255.255.255.128이 됩니다.
- 서브넷 주소 범위:
첫 번째 서브넷: 192.168.1.0/25 (주소 범위: 192.168.1.0부터 192.168.1.127까지)
두 번째 서브넷: 192.168.1.128/25 (주소 범위: 192.168.1.128부터 192.168.1.255까지)
이렇게 하면, 원래 하나의 네트워크였던 192.168.1.0/24 네트워크가 두 개의 서브넷으로 나뉘게 됩니다.
라우팅 프로토콜을 이용한 서브네팅들도 있는데 이건 나중에 라우터와 라우팅에 대해 알아볼때 엮어보겠다
'TIL(Today I Learned)' 카테고리의 다른 글
라우터와 라우팅 (0) | 2024.12.13 |
---|---|
DNS, 3-way Handshake, SSL/TLS (0) | 2024.12.12 |
CDN이란? (0) | 2024.12.10 |
OSI 데이터링크계층 (0) | 2024.12.09 |
OSI물리계층 (0) | 2024.12.06 |