![[네트워크] IP(Internet Protocol)와 관련된 것들 톺아보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyDxz9%2FbtsvjglTOuz%2Ff77kWB8n4JfMPkr9tutvf0%2Fimg.png)
목표
OSI 7 계층에서, 3 계층인 Network 계층의 대표적인 프로토콜, IP(Internet Protocol)에 대해서 톺아보겠습니다.
전체적인 구조와 흐름을 복습할 예정입니다.
개요
통신을 위해서는 많은 절차와 작업이 필요합니다. 이에, ISO(국제 표준화 기구)에서는 7 단계로 나눴고, 다들 잘 알고 계실 OSI 7 계층입니다.
복잡한 통신 과정과 흐름을 쉽게 확인할 수 있고, 문제가 발생했을 때 비교적 수월하게 해결할 수 있기 때문입니다.
다른 계층에서 어떤 작업을 하는지 신경 쓸 필요 없이 내가 맡은 일만 잘 해내면 됩니다.
이번 포스팅에서는 7 계층 중, 3 계층인 Network 계층을 중심으로 확인하려고 합니다.
Network 계층의 목적을 간략히 말씀드리면 다음과 같습니다.
- 데이터를 적당한 크기로 나눠서, (
단편화) - 적절한 경로를 결정해, (
라우팅) - 정상적으로 전달. (
오류 검출)
IP *Datagram에 포함된 다양한 정보를 통해 목적을 달성합니다.
이번 포스팅에서는 경로를 결정하는데 중요한 역할을 하는 IP(Internet Protocol)를 중심으로 알아보려 합니다.
IP는 Network 계층에서 사용하는 대표적인 프로토콜입니다.
IP는 IP 주소를 바탕으로 발신지에서 수신지까지 데이터를 전송하는 역할을 합니다.
데이터가 전달되는 과정을 택배에 비유하면 다음과 같은 순서로 진행된다고 할 수 있습니다.
- 발신자는 발신지/수신지 주소를 적어서 택배를 발송합니다.
- 수신지까지 도착하는 과정에서, 곤지암과 같은 여러 센터를 거치다가, 결국 수신지 동네까지 전달됩니다.
- 만약, 물건이 마음에 안들면 발신지를 보고 다시 반송하는 과정을 거칠 수도 있습니다.
여기서 발신지/수신지 주소는 IP 주소라고 할 수 있습니다. 사실, 택배는 물건을 전달하는 과정에서 신경 써야 할 것들이 많습니다.
취급 주의 물품은 조심이 다루기도 해야하고, 신선 제품은 냉동 센터만을 거쳐야 한다던지, 다양한 변수가 존재합니다.
마찬가지로, 네트워크 레이어에서도 데이터가 유실되진 않았는지, 최적의 경로는 어디인지 판단하는 등 다양한 기능을 제공하고 있습니다.
각 계층의 프로토콜이 어떠한 역할을 하는지 확실히 아는 것이 중요합니다.
이 포스팅에서는 전반적인 내용을 얕게 확인하고, 이후 포스팅에서 각 프로토콜 및 기능을 자세히 살펴보도록 하겠습니다.
✔ Datagram
IP 프로토콜에서 데이터가 전달되는 기본 단위입니다.
흔히 '패킷(Packet)'이라고 많이 부르는데, 이는 더 범용적인 표현으로 데이터그램이 더 정확한 표현입니다.
IP 주소의 구조
먼저 사람을 중심으로 생각했을 때, 우리가 보는 IP는 4개의 그룹으로 이루어진 10진수입니다.
각각의 그룹은 0~255까지의 숫자를 가질 수 있습니다.
예를 들면, 다음과 같이 생겼습니다.
192.168.10.20
하지만, 컴퓨터가 해당 IP를 이해하려면 2진수로 변환해야 합니다. 따라서, 0~255까지 표기하기 위해 8bits (1byte)씩 필요합니다.
예시로 든 IP를 2진수로 변환하면 다음과 같습니다.
11000000.10101000.00001010.00010100
따라서, 실제 우리가 사용할 수 있는 IP의 개수는 2^32개로, 약 42억 개입니다.
이렇게 생긴 IP 주소가 의미하는 것은 어떤 네트워크에 속한 어떤 호스트인지에 대한 정보입니다.
즉, 일정 부분까지는 네트워크에 대한 주소를, 일정 부분부터는 호스트에 대한 주소를 나타내고 있습니다.
자세한 내용은 다음 포스팅에서 다루고, 이번 포스팅에서는 Network 레이어의 역할과 IP를 할당받는 것을 중심으로 확인해 보겠습니다.
IP Header
OSI 7 계층은 각 역할과 책임에 맞게 계층이 적절히 분리되어 있습니다.
각각의 역할을 수행하기 위해 필요한 데이터를 헤더에 담아 다음 계층으로 전달하는데, 이를 캡슐화라고 합니다.
반대로 데이터를 수신하는 쪽에서는 역순으로 데이터를 열어보고, 잘못된 것이 없는지 검증하는데, 이를 역캡슐화라고 합니다.
Network 계층에서 중요한 역할 중 하나는 라우팅, 즉 경로를 결정하는 것입니다.
라우팅을 풀어서 말하면, 다른 네트워크에 있는 목적지로 전송하기 위한 경로를 설정합니다.
경로를 결정하기 위해 어떤 데이터가 필요한지 다음 그림으로 확인해 보겠습니다.
각 필드가 어떤 의미를 가지는지 살펴보겠습니다.
Version, IHL
Version은 IP의 버전을 의미합니다. 현재 주로 사용하고 있는 프로토콜은 IPv4입니다.
IHL(IP Header Length)은 헤더의 길이입니다. 그림을 보시면 Options의 범위가 0-40 bytes로 잡혀있습니다.
즉, IP Header의 크기는 20-60 bytes가 될 수 있습니다. 데이터를 제외한 헤더의 크기를 나타내는 필드입니다.
TOS (Type Of Service)
서비스의 형태를 알리는 필드입니다.
상위 계층에서 사용하는 프로토콜이나, 데이터 패킷의 성격에 따라서 중요하게 생각하는 요소(비용, 속도, 처리량 등)가 다릅니다.
어떤 프로토콜은 비용이 적게 드는 게 좋을 것이고, 어떤 것은 비용이 더 들더라도 안정적인 게 중요할 것입니다.
이렇게 네트워크 트래픽의 품질을 관리하는 것을 QoS(Quality Of Service)라고 하는데, 해당 필드에서 이를 결정합니다.
Identification, Flags, Fragment offset
해당 필드들은 IP Datagram의 단편화와 관련된 필드입니다.
거대한 IP Datagram은 한 번에 전달하면 네트워크에 부하가 발생할 수 있습니다. 그래서 각 네트워크는 최대 전송 단위가 정해져 있습니다.
이를 최대 전송 단위(MTU, Maximum Transmission Unit)이라고 합니다. 일반적으로 1500 bytes로 전달됩니다. (헤더 포함)
따라서, MTU보다 큰 Datagram은 조각내서 전달하는데, 이를 단편화라고 합니다.
데이터를 나눠서 보내는 것은 좋지만, 데이터가 유실되거나 순서가 변경되지 않도록 주의해야 합니다.
특히, 나뿐만 아니라 다른 곳에서도 데이터를 전달할 수 있으므로, 해당 조각이 어느 Datagram에 속한 건지 알아야 합니다.
이러한 정보를 Identification, Flags, Fragment offset 필드에서 전달하고 있습니다.
필드명 | 내용 |
Flags | 단편화가 발생했는지 알려주는 필드. |
Identification | 조각이 어느 Datagram에 속해있는지 알려주는 필드. |
Fragment Offset | 조각의 순서를 알려주는 필드. |
TTL, Protocol, Header Checksum
TTL (Time To Live)는 패킷이 라우터를 최대 몇 번까지 전달될 수 있는지 나타내는 필드입니다.
라우터에 전달될 때마다 값이 1씩 감소하며, 0이 되면 해당 패킷은 버려집니다.
Protocol은 상위 계층에서 어떤 프로토콜이 사용되었는지 알려주는 필드입니다.
4 계층에서 TCP를 사용했는지, UDP를 사용했는지 등등에 대한 값을 해당 값으로 알 수 있습니다.
Header Checksum은 필드의 오류가 있는지 확인하는 필드입니다.
각 라우터를 거칠 때마다 계산식을 통해 데이터가 손상되었는지 확인하고, 만약 데이터가 손상되었으면 해당 패킷은 버려집니다.
IP(Internet Protocol)는 오류 보정을 하지 않으므로, 실제 오류를 보정하는 작업은 다른 프로토콜이나 다른 계층에서 해야 합니다.
대표적으로 데이터 전송에서 발생한 문제를 처리하는 ICMP 프로토콜이 있겠네요.
Source Address, Destination Address
Header에 담긴 필드 중 가장 중요한 필드입니다.
말 그대로, 어디서 출발했고(Source) 어디로 가는지(Destination)에 대한 IP 주소값을 나타내는 필드입니다.
IP 주소 할당하기
Header에 있는 다양한 정보를 활용해서 데이터를 전달하는 것을 확인했습니다.
결국 Network 계층의 궁극적인 목적은 출발지로부터 도착지까지 적절한 경로로 전달하는 것인데요.
이를 위해서, 가장 먼저 해야 할 것은 각 장치(컴퓨터 등)에 IP 주소를 할당하는 것입니다.
IP 주소를 할당하는 방법은 크게 정적 할당과 동적 할당이 있습니다.
정적 할당
정적 할당은 IP 주소를 수동으로 설정하는 것을 의미합니다. 연결되어 있는 라우터 내에서 고정된 IP를 설정하는 것입니다.
웹 서버나 메일 서버 등이 IP가 계속 바뀌면, 클라이언트는 연결할 때마다 새로운 주소를 찾거나 DNS 업데이트를 기다려야 합니다.
혹은, 보안 카메라와 같은 IoT 장비도 원활하게 원격으로 접속해서 사용하려면 장비의 IP 주소가 변하지 않아야 합니다.
고정된 IP를 할당함으로써, 네트워크 상에서 특정 장치에 대한 일관성을 제공하며 장치들의 구성 및 관리를 수월하게 해 줍니다.
IP 주소가 일관성을 가진다면 보안 정책을 수립하는데 용이하겠죠?
동적 할당
정적 할당과 대조되는 개념으로, 네트워크에 연결된 장치들에게 적절한 IP 주소를 자동으로 배분하는 것을 의미합니다.
제 맥북을 포함한 대부분의 개인 네트워크는 동적 할당 방식으로 IP 주소를 할당받습니다.
이를 위한 BOOTP(Bootstrap Protocol) 등 다양한 프로토콜이 존재하지만, 대표적으로 DHCP를 대부분 사용합니다.
✔ DHCP(Dynamic Host Configuration Protocol)
DHCP는 대부분의 홈 네트워크나 기업 네트워크에서 활용하는 프로토콜입니다. 지금도 맥북, 핸드폰 둘 다 DHCP로 IP를 할당받았네요.
동적 할당은 사용자가 아닌, 어디선가 IP 주소를 "할당받는" 프로토콜입니다. 그렇다면, IP를 할당해 주는 주체를 알아야겠지요.
DHCP에서 IP를 할당해 주는 역할을 DHCP 서버가 하고 있습니다.
DHCP 서버는 미리 정의된 IP 주소를 풀(Pool)로 관리하다가, 요청이 들어오면 IP 하나를 꺼내 일정 기간 동안 사용할 수 있도록 대여해 줍니다.
일정 기간만 대여하는 이유는 IP 주소 풀을 관리하면서 IP가 부족할 수 있기 때문에, 사용하지 않는 IP는 수거하기 때문입니다.
유효기간이 만료되기 전에 갱신하거나 새로 발급받을 수 있습니다. 혹은 더 이상 필요 없다면 IP 주소를 반납하는 절차를 밟게 됩니다.
실제로, 컴퓨터를 켰을 때 DHCP를 활용해 IP를 발급받는 과정을 간략하게 확인해 보겠습니다.
DHCP Discover
PC가 켜지면 본인의 IP는 물론, DHCP 서버의 IP도 모르는 상태입니다.
IP를 할당받기 위해 DHCP 서버를 찾아야 합니다. 따라서, 브로드캐스팅을 통해 DHCP 서버를 찾습니다.
DHCP Offer
요청을 받은 DHCP 서버가 응답해 주는 과정입니다.
DHCP 서버와 관련한 정보와 할당 가능한 IP 정보, 게이트웨이 등 다양한 네트워크 정보를 함께 전달합니다.
DHCP Request
네트워크 정보를 받은 PC가 할당받을 IP를 요청하는 단계입니다.
그림에서는 DHCP 서버가 한 개 밖에 없지만, 여러 개의 DHCP 에게서 응답이 왔을 수 있습니다.
PC가 사용할 IP 정보를 담아서 Request를 보내면, 해당 IP를 관리하고 있는 DHCP서버에서 할당하는 작업을 진행하게 됩니다.
DHCP ACK
IP 할당이 끝난 후, 응답하는 단계입니다. 이 때도 Offer 단계에서 제공한 네트워크 정보를 함께 전달합니다.
여기서 함께 전달한 Flag는 요청을 보낼 때, Unicast인지 Broadcast인지를 나타냅니다. (0인 경우 Unicast)
쉽게 말하면, Unicast는 한 개의 PC를 대상으로 요청을 보낸 거고, Broadcast는 연결된 모든 PC에게 전달한 것입니다.
게임으로 생각하면 Unicast는 귓속말, Broadcast는 전체 채팅 정도로 볼 수 있습니다.
IP를 할당받는 과정에서, 통신에 필요한 네트워크 정보를 함께 전달받았습니다. 이를 활용해 통신이 가능한 것입니다.
IP 할당 과정을 보시면 아시겠지만 DNS 정보, 기본 게이트웨이 등 다양한 정보를 관리하고 있습니다.
DHCP 서버는 DNS를 업데이트하며 관리하고, 통신을 위한 게이트웨이 등 다양한 역할을 수행하고 있습니다.
덕분에 사용자(관리자)는 복잡한 설정 없이 연결된 장치에 IP 주소를 쉽게 할당할 수 있습니다.
하지만, DHCP 서버에 문제가 발생하면 IP가 정상적으로 할당되지 않는다는 문제가 있습니다.
이 경우에 다양한 대처 방안이 있지만, Windows OS에서 사용하는 APIPA를 알아보겠습니다.
✔APIPA(Automatic Private IP Protocol Addressing)
Windows OS의 경우 APIPA(Automatic Private IP Protocol Addressing)이라는 프로토콜도 존재합니다.
DHCP 서버가 응답하지 않을 때, 자동으로 169.254.0.1 - 169.254.255.254 범위 내의 IP를 할당해 주는 것입니다.
하지만, 임의로 IP를 할당하면 다른 장치와 중복돼 문제를 일으킬 수 있습니다. DHCP 서버가 응답하지 않는데, 어떻게 IP를 할당해 줄까요?
APIPA 프로토콜은 ARP(Address Resolution Protocol)을 활용해 IP 주소가 중복되지 않도록 확인하여 주소를 할당합니다.
사실, APIPA에 의해 할당된 IP는 인터넷 접속(공개망)에는 적합하지 않습니다.
해당 범위는 IETF(국제 인터넷 표준화 기구)에 의해 특정 네트워크 내에서만 유효하다고 정의했기 때문입니다.
즉, 해당 네트워크를 벗어나 라우팅 될 수 없습니다.
대신 해당 범위의 IP 주소를 갖고 있으면 네트워크에 문제가 있음을 인지할 수 있고, 알맞게 대응하는데 활용할 수 있습니다.
✔ ARP(Address Resolution Protocol)
ARP 프로토콜은 2 계층인 Data Link 계층의 프로토콜입니다.
IP 주소는 아는데, MAC 주소를 모를 때 사용되는 프로토콜로, IP 주소를 MAC 주소로 변환하는 데 사용하는 프로토콜입니다.
MAC 주소는 IP 주소에 대응되는 물리 주소로, 각 장치마다 고유한 값을 갖고 있습니다.
네트워크 내에 Broadcast로(전체 장치에 보내는 것) ARP 요청을 보냅니다.
각 장치는 자신의 IP 주소와 동일한지 확인하고, 동일하면 MAC 주소를 응답해 줍니다.
ARP Table을 활용해 IP 주소를 물리 주소인 MAC 주소를 갖고 있고, 요청이 들어오면 반환해 주는 역할을 합니다.
참고로, 위에선 생략했지만 DHCP 서버에서도 동시성 문제나 충돌을 방지하기 위해 ARP를 함께 활용합니다.
정리
IP와 관련한 전반적인 내용을 톺아봤습니다.
전반적으로 IPv4를 기준으로 예시를 들었지만, 요즘에 다양한 장치들(스마트 워치, IoT 단말 등)이 많이 나와서 IP 주소가 부족해지고 있습니다.
다양한 기법을 통해 IP를 효율적으로 사용하고 있지만, 절대적인 크기를 늘리는 것이 불가피해졌습니다.
이에 IPv6가 나왔지만, 현재 깔려있는 인프라를 한 번에 바꿀 수 없어 터널링 등의 기법을 활용하며 IPv4, IPv6를 함께 사용합니다.
다음 포스팅에서는 IP를 효율적으로 활용하기 위한 방법에 대해 알아보겠습니다.
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] IP 주소 체계, 클래스와 CIDR 표기법 (1) | 2024.10.28 |
---|