IP 패킷의 헤더 필드를 모두 합하면 총 20바이트이다.
TCP 세그먼트의 헤더 필드 역시 총 20바이트이다.
인터넷 상에서 존재하는 대부분의 패킷들은 TCP 세그먼트를 담은 패킷이다. 그래서 쉽게 TCP 패킷이라고 한다.
TCP 패킷 안에는 TCP 헤더, IP 헤더 각각 20바이트 씩 들어있으니 기본적으로 인터넷 상의 패킷들은 40바이트 씩 차지한다.
32비트 짜리의 주소 체계를 가진 고유한 숫자이다. 따라서 2^32
만큼의 주소를 가질 수 있다.
IP 주소는 특정 호스트 안에 들어있는 네트워크 인터페이스 카드 즉, 네트워크 인터페이스 자체를 지칭하는 주소이다.
라우터는 여러 개의 네트워크 인터페이스 카드를 갖고 있고, 각각 다른 네트워크에 연결되어있으며, 각각 고유의 IP 주소를 갖고 있다.
현재 우리가 읽고 있는 IP 주소는, 2진수의 IP 주소를 8비트 씩 끊은 후 각각 10진수로 변경한 것이다.
Internet이란 풀어서 얘기하면 Inter-Network로써, 두 개 이상의 네트워크가 연결되어있는 상태를 의미한다.
주목할 점은 호스트끼리 연결하는 것이 아니라 네트워크 끼리 연결한다는 점이다. 따라서 네트워크의 주소를 지정할 필요가 있다.
IP 주소가 마구잡이로 배정된다면 각각의 라우터 안에 있는 포워딩 테이블은 기하급수적으로 커질 것이며 포워딩 속도가 매우 느려질 것이다. 마구잡이로 배정된 IP 주소를 전부 엔트리에 반영시켜야하기 때문이다.
이러한 문제점을 Scalability Challenge라고 한다. (스케일이 커짐으로 인한 문제점)
따라서 IP 주소는 계층화되어 구성된다.
32비트의 IP 공간을 임의로 2개의 공간으로 나눈 후,
따라서 네트워크 ID는 즉, 서브넷 ID라고도 하며, 프리픽스라고도 한다.
같은 네트워크 상에 속해있는 호스트들은 같은 프리픽스를 갖게 되므로 포워딩 테이블 구성이 한층 더 단순해진다.
그림에서처럼 1.2.3 의 프리픽스를 가진 호스트들은 왼쪽으로, 5.6.7 의 프리픽스를 가진 호스트들은 오른쪽으로 모을 수 있다.
새로운 호스트를 추가할 때 역시 프리픽스가 같으므로 포워딩 테이블에 새로운 엔트리를 추가할 필요가 없다.
이처럼 계층화는 Scalability (확장성)에 있어서 필수적이다. 현대 인터넷에는 약 400,000개의 네트워크 프리픽스가 사용되고 있다.
서브넷 마스크
네트워크 ID를 기계가 이해할 수 있도록 비트맵으로 표현한 것이다.
서브넷 마스크는 단순히 IP 주소 중에서 어디까지가 서브넷 ID (= 네트워크 ID = 프리픽스) 인지를 나타내는 것이다.
예전에는 IP 주소를 클래스로 나눠서 분리했다. /8, /16, /24
등등으로 8비트씩 고정해서 나눴다. 하지만 이 방식은 8비트 만으로는 부족할 경우 등을 대비하기 어려워서 개선안이 등장했다.
8비트 씩 고정해서 끊는 것이 아니라 네트워크 크기에 맞게 유동적으로 끊을 수 있다.
서브넷 (Subnets)
같은 프리픽스 (서브넷 ID)를 가진 디바이스들의 집합
서브넷 안에 있는 호스트들끼리는 라우터를 거치지 않고 서로 접근할 수 있다.
또한 라우터는 여러 개의 IP 주소를 갖고 있는데, 이는 즉 라우터는 하나의 서브넷에만 포함되어있는 것이 아니라 여러 개의 서브넷에 걸쳐있는 존재임을 의미한다.
NAT가 등장한 상황을 간략하게 살펴보면 다음과 같다.
IPv4는 32비트의 주소 체계를 갖고 있으며 총 2^32
개의 호스트들이 사용할 수 있다. 하지만 90년대 초반에 들어서면서 많은 사람들이 인터넷을 사용하기 시작했고 곧 IPv4의 한계가 나타났다.
1996년 제안된 IPv6는 128비트의 주소 체계로 인해 총 2^128
개의 호스트들이 사용할 수 있다. 하지만 아직 본격적으로 사용되고있지는 못하고 있다. 왜냐하면 기존에 IPv4를 사용하고 있던 라우터들을 모두 IPv6로 교체해줘야하는데 말처럼 쉬운 일이 아니기 때문이다.
그렇다면 한정된 IPv4를 어떻게 효율적으로 사용할 수 있을까?
바로 IPv4의 주소 공간 하나를 한 명만 쓰는게 아니라, 하나의 주소 공간을 여러 명이 공유하면서 사용하도록 일종의 트릭을 통해 IPv4를 효율적으로 사용할 수 있다.
이러한 트릭을 Network Address Translation (NAT) 라고 한다.
NAT의 동작 방식은 그림과 같다.
- 서브넷 안에 있는 호스트들은 고유한 사설 IP 주소를 사용한다. (그림의 10.0.0.1, 10.0.0.2)
- 이때 내부의 IP 주소들은 외부와의 통신에 사용될 수 없다.
- 서브넷 너머에 있는 외부와 통신할 때는 NAT 역할을 하는 게이트웨이 라우터를 거쳐서 전세계적으로 고유한 IP 주소 (공인 IP 주소)로 변경된다.
- 외부와 통신이 끝나고 다시 서브넷 안으로 들어올 때 역시 게이트웨이 라우터를 거쳐서 내부만의 사설 IP 주소로 변경되어 들어온다.
가운데에 있는 게이트웨이 라우터를 기준으로 왼쪽은 외부 인터넷이고, 오른쪽은 내부의 Local Network이다.