[그림으로 쉽게 이해하는 웹/HTTP/네트워트를 읽고 정리합니다.]
IP와 패킷
IP(Internet Protocol)은 패킷을 정해진 목적지까지 운반하는데 사용되는 통신 규약이다.
인터넷의 모든 데이터는 패킷(packet)이라는 조각으로 나뉘어 이동한다.
패킷은 소포를 의미하는 단어로, 데이터를 전송하기 쉽게 쪼갠 모습이 소포와 비슷해 붙여진 이름이다.
데이터를 패킷으로 쪼개 정보를 교환하는 방식을 패킷 교환 방식이라고 한다.
만약 무거운 데이터를 통째로 보내려고 하면 회선에 문제가 생길 시 다시 전송해야 하는 번거로움이 있다.
따라서 패킷으로 쪼개 정보를 전달한다면 전송 중에 잘못된 부분만 다시 보내면 되어 자원 낭비를 줄일 수 있다.
또, 패킷은 최적의 경로를 찾아가기에 특정 경로에 문제가 생기면 다른 경로로 이동하고, 다양한 회선을 효율적으로 이용한다.
IP에서 다루는 패킷의 최대 크기는 65KB로, 매우 작다.
IP의 특징
IP는 패킷을 정해진 목적지까지 '전달'하는 일을 한다.
즉 '전달'만 책임지는 프로토콜이기 때문에 패킷의 손실이나 중복과 같은 상태 이상은 확인하지 않는다.
따라서 IP는 비신뢰성과 비연결성이라는 특징을 가지고 있다. (패킷의 손실을 보장하지 않음, 수신자의 존재 여부를 고려하지 않음)
전달 이후 TCP 프로토콜이 수신자가 패킷을 잘 받았는지, 패킷이 멀쩡한지 확인하는 역할을 한다.
IP 주소
IP가 패킷을 목적지까지 전달하기 위해서는 목적지를 구분지을 수 있는 구분자 (=IP 주소)가 필요하다.
IP 주소는 192.168.0.1처럼 긴 숫자 사이에 점이 들어간 형태인데, IP 버전에 따라 주소의 구조가 다르다.
IP 버전은 IPv4와 비교적 최신 버전인 IPv6 2가지가 있는데, 우리가 자주 접하는 주소 체계는 IPv4다.
IPv4는 점을 기준으로 4부분으로 나눈다.
각 자리는 0부터 255까지의 숫자로 구성되어 있다.
IP 주소는 2진수지만 2진수로는 웹 사이트 주소를 찾기 불편해 보통 10진수로 표현한다.
이진법의 한 자릿수를 비트라고 부를 때, IPv4의 비트는 총 32개로 32비트 길이를 가진다.
점을 기준으로 비트가 8개씩 나뉘는 데 이를 옥텟(octet)이라고 한다.
즉 IPv4 주소는 4개의 옥텟으로 구성되어 있고, 각 옥텟은 점으로 구분한다.
각 옥텟은 00000000부터 11111111까지 표현할 수 있는데 이를 10진수로 변환하면 0부터 255다.
네트워크 주소와 호스트 주소
IP 주소는 네트워크 부분과 호스트 부분으로 나뉜다.
인터넷에서 데이터를 받을 때, 요청한 컴퓨터로 직접 데이터가 들어오는 게 아니라 컴퓨터가 연결된 공유기에 전달 된다.
공유기는 자신과 연결된 컴퓨터 중 데이터를 요청한 컴퓨터를 확인하고, 해당 컴퓨터에 데이터를 전달한다.
여기서 네트워크는 데이터를 통신하는 과정에서 '같은 공유기를 사용하는 범위'를 말하고,
이 네트워크에 연결된 각각의 장치를 호스트라고 부른다.
192.168.123.132 라는 IP 주소가 있을 때, 192.168.123까지가 네트워크 부분이라면 .132는 호스트 부분이라고 볼 수 있다.
이 때 각 옥텟은 0부터 255까지의 값을 쓸 수 있기 때문에, 네트워크 192.168.123에는 0부터 255까지의 공간이 있다.
즉 192.168.123.132는 192.168.123 네트워크의 132번째 공간이라고 볼 수 있다.
이 때 주의할 점은, IP 주소 중 맨 첫 번째 주소인 0과 맨 마지막 주소인 255는 호스트 주소로 사용할 수 없다는 것이다.
사회적으로 첫 번째는 네트워크 그 자체의 주소이고, 마지막은 브로드캐스트를 위한 주소이기 때문이다.
브로드캐스트 주소란 특정 네트워크 주소에 속한 모든 호스트에게 패킷을 전달해야 할 때 사용하는 주소를 말한다.
이는 IP 통신에서 중요한 역할을 하기 때문에 네트워트의 맨 마지막 IP 주소는 브로드캐스트 주소로 사용하기로 약속되어 있다.
따라서 192.168.123이라는 네트워크에서 사용할 수 있는 IP 주소는
192.168.123.1 부터 192.168.123.254까지다.
클래스
예제를 보면 4번째 옥텟이 호스트 부분 같지만, 사실 IP 주소에서 네트워트 부분과 호스트 부분을 구분하는 경계점은 고정되어 있지 않다.
192.168.123에서 192까지가 네트워크일 수도 있고, 192.168까지가 네트워크일 수도 있다.
IPv4에서 만들 수 있는 IP 주소의 개수는 한정적이기에, IP 주소당 호스트 주소의 개수를 고정하게 되면
호스트가 많은 경우 한 개의 IP 주소만으로는 충분하지 않아 여러 IP 주소를 사용하게 된다.
반면 가정집과 같이 호스트가 적은 경우에는 사용하지 않아 낭비되는 호스트 주소가 발생하게 된다.
즉 호스트가 많고 적은 경우에 IP 주소가 부족, 낭비되는 문제점을 줄이기 위해
네트워크 부분과 호스트 부분을 유동적으로 조절할 수 있는 클래스가 도입되게 되었다.
클래스(class)는 하나의 IP 주소에서 네트워크 부분과 호스트 부분을 나누는 방법이자 약속이다.
A 클래스는 1개의 옥텟이 네트워크 / 3개의 옥텟이 호스트 영역을 나타낸다. (하나의 네트워크가 갖는 호스트 수: 약 1600만개)
B 클래스는 2개의 옥텟이 네트워크 / 2개의 옥텟이 호스트 영역을 나타낸다. (하나의 네트워크가 갖는 호스트 수: 약 6만 5천개)
C 클래스는 3개의 옥텟이 네트워크 / 1개의 옥텟이 호스트 영역을 나타낸다. (하나의 네트워크가 갖는 호스트 수: 약 250개)
클래스가 다른지는 IP 주소의 첫 번째 옥텟을 보면 알 수 있다.
A 클래스는 첫 번째 옥텟이 0~127 범위다.
IP 주소를 2진수로 표현할 때 맨 앞이 무조건 0으로 시작해 최대 0111111까지 올 수 있는데 10진수로 변환하면 0과 127이 된다.
단, IP 주소가 127로 시작하면 자기 자신을 의미하는 루프백 주소이기 때문에 실질적으로 A 클래스에서 쓰는 옥텟 범위는 0~126이다.
B 클래스는 첫 번째 옥텟이 128~191 범위다.
2진수로 표현할 때 B 클래스는 10으로 시작하기 때문에 10000000부터 최대 1011111까지 올 수 있다.
10진수로 변환하면 128, 191이 나온다.
C 클래스는 첫 번째 옥텟이 192~223 범위다.
2진수로 표현할 때 C 클래스는 110으로 시작하기 때문에 1100000부터 최대 11011111까지 올 수 있다.
10진수로 변환하면 192, 223이 나온다.
즉 130.101.12.124 라는 IP 주소가 있을 때, B 클래스로 볼 수 있다.
B 클래스는 2개의 옥텟이 네트워크이기 때문에 네트워크 주소는 130.101, 호스트 주소는 12.124로 나눌 수 있다.
다만 클래스의 종류가 실질적으로 3개만 있고, 클래스 별로 할당하는 호스트의 개수 차이가 컸기 때문에 (B 클래스가 급격 소진)
오늘날에는 클래스로 네트워크를 구분하지 않고 CIDR 등 새로운 구분 방식을 도입했다.
IP 고갈
전 세계적으로 IPv4가 고갈되는 현상이 이어지고 있다. (우리나라의 경우 미리 할당받은 IPv4의 여분이 남아 있음)
IPv4로 사용할 수 있는 IP 주소는 약 43억 개로 꽤 많지만, 가정 내 PC, 스마트폰, 태블릿 PC, IoT의 보급으로 IP 주소가 고갈되고 있다.
IANA에서 IP 주소가 고갈되었다고 (2011) 발표했음에도 큰 불편이 없는 이유는,
알게 모르게 IPv4를 아껴 쓰도록 다양한 대책이 마련, 적용되어 있기 때문이다.
1. CIDR(Classless Inter-Domain R)과 서브넷 마스크(subnet mask)
사이더는 클래스 없는 도메인 간 라우팅 기법으로, 클래스 없이도 IP 주소를 할당할 수 있는 새로운 방식이다.
클래스 기반 할당 방식과 달리 네트워크/호스트 부분의 구분점을 1비트 단위까지 가능하게 해 호스트 주소를 유연하게 할당한다.
192.168.10.1 이라는 IP 주소가 있을 때, 맨 앞의 옥텟이 192이기 때문에 C 클래스(네트워크 3, 호스트 1)라고 유추할 수 있지만,
사이더에서는 비트 단위로 네트워크/호스트를 구분하기 때문에 0001까지, 1010.00000001까지 호스트 부분이 될 수 있다.
사이더에서 네트워크/호스트를 구분해주는 역할은 서브넷 마스크가 해준다.
클래스 기반 할당 방식에서도 있었던 개념인데, 사이더로 넘어 오면서 더 중요해졌다.
서브넷 마스크와 IP 주소를 2진수로 바꿔 놓았을 때,
서브넷 마스크의 1이 연속한 자릿수가 네트워크, 0이 있는 자릿수가 호스트다.
이를 더 간단하게 표기하기 위해 192.168.10.1/24 와 같이 표현한다. (11111111 11111111 11111111 = 연속된 1)
2. DHCP
IP 주소는 상황에 따라 바뀐다. 통신이 필요할 때 IP 주소를 받고 더 사용하지 않거나 대여 기간이 만료되면 반납하는 식이다.
이처럼 상황에 따라 바뀌는 IP를 유동 IP(dynamic IP)라고 부르고, 반대로 고정된 IP를 고정 IP(static IP)라고 부른다.
우리가 일상에서 사용하는 IP 주소는 대부분 ISP(Internet Service Provider)에서 제공하는 유동 IP다.
서버를 운영하는 등 특수한 상황일 때 내가 사용하는 통신사의 ISP에 별도로 신청해야 고정 IP를 받을 수 있다.
DHCP(Dynamic Host Configuration Protocol)은 IP가 필요한 컴퓨터에 자동으로 IP 주소를 할당해 주고,
사용하지 않는 IP 주소를 반환 받아 다른 컴퓨터가 사용할 수 있도록 IP 주소를 적절하게 할당하는 프로토콜이다.
이 프로토콜은 주로 공유기처럼 IP 주소를 관리하는 기기에 자동으로 추가되어 있다.
1. IP 주소에 대한 요청이 들어오면 DHCP는 할당할 수 있는 IP 주소를 찾는다.
2. 찾은 IP 주소를 빌려준다. (일반적으로 임대 기간은 8일이며 유동 인구, 고정 IP 이용 기기에 따라 유동적으로 설정)
3. 임대 기간이 끝나기 전에 갱신 요청을 할 수 있다. (갱신 요청 시점부터 임대 기간이 늘어남)
4. 임대 기간이 끝나거나 IP 주소를 더 이상 사용하지 않으면 컴퓨터가 DHCP 서버에 IP 주소를 반환한다.
이렇게 IP 주소를 빌려주고, 돌려 받아도 주소가 한정되어 있다는 점은 변함 없다.
3. 사설 IP와 NAT
그래서 아예 IP 주소를 늘려 버렸다.
모든 컴퓨터마다 IP 주소를 가지면 금방 소진될 위험이 있기 때문에,
집이나 회사 등 특정 네트워크별로 우리가 알고 있는 고유한 IP 주소를 한 개씩만 가지되
그 네트워크 안에 있는 호스트들은 따로 가상 IP 주소를 할당해 서로 구분할 수 있게 한다.
ISP에서 공식으로 할당한 주소를 공인 IP, 특정 네트워크 내에서 사적으로 이용하는 주소를 사설 IP라고 부른다.
공인 IP는 전세계에서 고유하며, 인터넷에서 직접 접근할 수 있다.
반면 사설 IP는 특정 네트워크 내에서 사용되어 인터넷에서 직접 접근할 수도 없다. 또 다른 사설 네트워크에서 중복해 사용할 수 있다.
(단, 같은 네트워크 내에서는 중복 사용 불가)
또 공인 IP 주소의 범위는 ISP에서 할당하기 떄문에 한정된 개수만큼 존재하지만,
사설 IP 주소의 범위는 특정 범위 내에서 자유롭다.
10.0.0.0부터 10.255.255.255,
172.16.0.0부터 172.31.255.255,
192.168.0.0부터 192.168.255.255의 범위에 할당된다.
이 때 중복된 사설 IP 주소로 다른 컴퓨터와 통신할 수 있게 해주는 게 네트워크 주소 변환 (NAT)이다.
NAT(Network Address Translation)은 네트워크 주소를 변환하는 기술로 공유기에 자동 탑재 되어 있다.
공인에서 사설로, 사설에서 다른 사설로 변환하는 등 IP 주소라면 NAT으로 다양하게 전환할 수 있다.
우리가 많이 사용하는 것은 사설에서 공인으로 변환하는 경우다.
1. 사용자 컴퓨터에서 어떤 사이트로 요청을 보낸다.
2. 공유기는 이 요청을 확인해 NAT으로 사설 IP였던 요청지의 수신지 주소를 공인 IP로 변경한다.
3. 이 때 원래 어떤 사설 IP 였는지를 기록하기 위해 NAT 테이블에 기록한 뒤 공인 IP로 어떤 사이트에게 요청을 전달한다.
4. 어떤 사이트는 공인 IP로 요청 받은 데이터를 보내준다.
5. NAT은 도착한 데이터를 확인하고, 공인 IP와 일치하는 사설 IP를 테이블에서 찾아 데이터를 전송한다.
이처럼 NAT을 통해 필요한 곳에서만 공인/사설 IP를 사용한다.
또 NAT은 외부에서 내부 네트워크 주소 체계를 알 수 없기에 보안 측면에서도 사용된다.
IPv4와 IPv6
IPv4의 주소 길이는 32비트로, 주소 개수는 2의 32승, 즉 약 43억 개다.
반면 IPv6의 주소 길이는 4배 더 큰 128비트로, 주소 개수는 2의 128승으로 거의 무한대에 가깝다.
IPv6의 표기법은 16진수로, 알파벳이 들어가 있고 2옥텟 단위마다 콜론으로 구분한다.
연속되는 0을 축약해서 표기해 이중 콜론을 쓰기도 한다.
(2001:0db8:0000:0000:0000:0000:1428:57ab) => (2001:db8::1428:57ab)
또 주소 고갈을 위해 사용하는 기술이 필요하지 않기에 NAT을 지원하지 않는다.
비교적 새로운 주소 체계지만 아직 사용률은 저조한 편이다.
이유는 IPv4와 같은 IP여도 엄연히 다른 체계이기에 IPv6을 지원하려면 새로운 네트워크를 구축해야 하기 때문이다.
이는 기업 측의 비용적 측면에서 부담이 되는데, 그럼에도 전 세계적으로 IPv6의 사용을 장려하고 있기는 하다.
'🖥️ CS & Network & Web > 🕸️ Network' 카테고리의 다른 글
[Network] 6. HTTP (1) | 2023.12.20 |
---|---|
[Network] 5. TCP (0) | 2023.12.19 |
[Network] 3. URL (0) | 2023.07.03 |
[Network] 2. 네트워크 개념 (0) | 2023.07.02 |
[Network] 1. 웹 (0) | 2023.06.30 |