1. IP addressing
IP주소가 어떻게 할당되고, IP주소 갖는 의미에 대해서 알아보도록 하겠습니다.
우선 지난 시간 배웠던 인터페이스를 살짝 다시 들춰보겠습니다.
1-1. IP4 addressing : interface
LAN카드, 이더넷포트 등을 인터페이스라고 합니다. 호스트 라우터와 피지컬 링크 사이의 연결점입니다.
호스트가 링크랑 연결하기 위한 네트워크 카드가 있을텐데 이것을 인터페이스라고 합니다.
wireless LAN 카드 / 이더넷 카드 = 인터페이스
라우터는 여러 링크를 연결시켜주는 역할을 하기 때문에 굉장히 많은 인터페이스를 가지고 있습니다. 아래 구멍들이 전부 인터페이스가 되는 겁니다.
링크레이어에서 맥 어드레스라는 주소 체계를 사용합니다. 그러면 네트워크에서 사용하는 주소체계도 있겠죠?!
네, 네트워크에서 사용하는 주소체계는 바로 IP주소체계 입니다 ^^
1-2. IP주소 체계
IP주소 체계는 IP버전 4 기준으로 32비트로 이루어져 있습니다. 2의 32승 즉 42억개의 주소를 만들 수 있습니다. 현재는 42억개의 주소는 전세계 사람들이 이용하기엔 턱없이 부족해졌죠. 그래서 인터넷 주소를 아껴쓰기 위한 다양한 기술들이 만들어지고 있습니다.
우리는 nat이라는 기술을 통해서 인터넷 주소를 아껴쓰고 있는데요. 이 nat이 없는 상태에서는 42억개의 주소는 1개의 디바이스에게만 고유하게 부여됩니다. 즉, 각각의 인터페이스(=네트워크 카드)는 유니크한 IP주소를 할당받아야 합니다.
IP주소는 호스트에 고유하게 할당되는 것이 아닌 내 호스트에 존재하는 인터페이스에 고유하게 할당되어야 하는 것입니다.
2. Subnets
subnet 아이디라는 것은 네트워크를 구분하기 위한 섹션입니다.
host는 동일한 네트워크 내에서 호스트를 구분하기 위한 섹션입니다.
subnet 파트가 정해지면 (색깔 숫자), 그 나머지가 host 파트(검은 숫자)로 정해집니다.
subnet은 high order bit입니다. 즉, 왼쪽에서부터 차지가 됩니다. (색깔 숫자)
빨강, 초록으로 서로 같은 색깔로 즉, 서로 같은 숫자로 이루어진 subnet에 경우 같은 subnet에 있기 때문에 서로 주소가 같은 것 입니다. (=같은 네트워크)
같은 subnet에 있는 경우는 반드시 라우터를 거치지 않고 연결이 되어있어야 합니다. 라우터를 거쳐나가는 순간 다른 네트워크로 이동한다고 생각하면 됩니다.
즉, 라우터로 거치지 않고 연결되어있는 디바이스들을 subnet이라고 합니다.
하지만, subnet 길이는 고정이 아닙니다. 현재는 3칸 잡고 있어서 24비트를 차지하고 있지만(1칸당 8비트), 4칸을 잡고 있다면, 32비트겠죠.
이렇게 subnet파트의 길이를 알기위해 223.1.3.0/24라고 명시하게 됩니다. 이 뜻은 24비트가 subnet 파트라는 것을 알려주는 겁니다.
24bit를 서브넷 마스크라고도 합니다.
서브넷마스크는 바이너리로 위와 같이 표현할 수도 있습니다.
2-1. 서브넷은 몇개가 있을까?
위의 그림에서 subnet은 6개입니다. 라우터를 빼보면 고립된 섬이 3개에 고립된 링크가 3개이기 때문에 총 6개입니다.
라우터의 역할은 subnet을 바꿔줍니다. 즉, input포트의 서브넷과 output포트의 서브넷은 다릅니다.
2-2. CIDR (Classless InterDomain Routing) : cider
서브넷을 동적으로 운영하는 기술을 CIDR이라고 합니다.
내가 얼만큼 subnet파트를 쓸 것인지 슬래쉬에서 명시해주면 됩니다. 슬래쉬 뒤의 숫자는 network prefix라고도 불립니다.
ipconfig/all을 치시면, 다음과 같이 이더넷 상태를 볼 수 있습니다.
서브넷 마스크가 명시되어 있는 것을 볼 수 있습니다. 내가 어떤 네트워크에 속해있는지 서브넷 마스크를 추출해낼 수 있습니다.
기본 게이트웨이는 내가 처음으로 만날 라우터를 뜻합니다.
DNS 서버 주소는 내가 처음으로 접속해야하는 로컬 DNS서버 주소가 됩니다. 주소가 2개가 있는데 1개는 프라이머리이고, 나머지 1개는 백업 주소 입니다. 프라이머리 주소가 죽었을 때 백업으로 보낼 수 있도록 셋팅되어 있습니다.
prefix는 라우팅할 때 중요한 정보가 됩니다. 라우팅 알고리즘은 subnet 주소를 가지고, 라우팅 알고리즘을 수행합니다. 구지 host 파트까지 라우팅 알고리즘을 쓸 필요가 없습니다.
223.1.1.4가 라우터에 도착했다고 확인하면, 호스트를 볼 것도 없이 포워딩 테이블을 보게 됩니다. 포워딩 테이블에는 223.1.1이라는 주소를 가진 애들은 위로보내라 라고 포워딩 테이블에 써있을 겁니다.
즉, 라우터에 저장되어 있는 포워딩 테이블은 subnet을 기준으로 prefix 정보만 기억해 생성됩니다. 테이블 크기를 줄이기 위함입니다.
3. host ID
host ID는 동일한 네트워크 안에 있는 애들 중에서 각각의 디바이스를 구분하는 데 사용이 됩니다.
subnet까지 도착을 했다면 host 파트를 통해 최종 목적지를 가리는데 사용합니다.
host는 동일한 네트워크 내에서 호스트를 구분하기 위한 섹션입니다. host는 low order bit입니다.
subnet에 길이에 따라 host id가 결정이 되는데, 그럼 subnet 길이를 어떻게 정하는 것이 좋을까요?
10개의 주소만 필요하다고 한다면, subnet 파트로 28비트를 쓰고, 4비트는 총 16개의 ip주소가 생성이 되는데, 10개를 커버치면 됩니다.
ip주소가 200개 필요하다면, 24비트를 서브넷으로 취하고, 나머지 8비트를 2^8=256개의 ip주소를 생성할 수 있어 200개를 커버치면 됩니다. 500개가 필요하다면 23개, 1000개면 22개, 4000개 필요하다면 20개를 subnet으로 취하고 나머지를 host 파트로 취하면 됩니다. 좋은 점은 ip주소의 낭비가 없어진다는 것입니다.
과거에는 위의 그림처럼 class 단위로 고정적으로 사용했지만, 현재는 길이가 고정되어 있지않습니다.
4. DHCP( Dynamic Host Configuration Protocol)
우리가 인터넷에 처음으로 접속하게 되면 어떤 절차가 필요할까요?
일단 IP주소가 필요합니다. IP주소를 할당할 수 있는 방법으로는 2가지 방법이 있습니다.
1) 직접 IP주소를 입력(고정 IP 필요, 단체에서는 IP를 미리 사놓습니다.)
2) 동적으로 ip주소를 받아오는 프로토콜 DHCP 프로토콜을 이용합니다.
DHCP가 자동적으로 IP주소를 할당해줍니다. 인터넷 접속할 때 따로 IP주소를 셋팅하지 않아도 따로 자동적으로 IP주소를 할당받은 것입니다.
"다음 IP 주소 사용" 부분에 우리가 쓸 IP주소를 입력할 수 있습니다. 고정 IP가 있다면, 해당 칸에 입력해주면 됩니다. 그게 아니면 "자동으로 IP 주소 받기"를 체크하면 됩니다. 이는 DHCP 서버가 자동적으로 할당해주는 주소를 쓰겠다는 의미입니다. 하지만, 영구적으로 사용하는 ip주소는 아닙니다. 왜냐하면 잠깐 쓰고 반납하는 것의 연속이기 때문이죠. (임대 아이피 같은 느낌)
DHCP서버는 일반적으로 게이트웨이의 붙어서 우리와 함께하고 있습니다.
DHCP는 DHCP discover 메세지를 서브넷에 브로드캐스트 합니다.
DHCP 서버만 이 메세지를 들을 수 있습니다. 즉 IP주소가 필요하다고 외치는 겁니다.
DHCP offer를 통해서 해당 메세지에 응답하게 됩니다.
host는 DHCP 서버가 존재하는 것을 인지하고, IP주소를 할당해달라고 요청하는 메세지를 보냅니다.
그러면, DHCP ack을 보내면서 주소를 할당하게 됩니다.
255.255.255.255 전체 브로드 캐스트하기 위한 용도로 존재하는 주소입니다.
DHCP 서버 자체도 브로드캐스트해서 자기가 여기있다는 것을 알립니다.
처음에는 0.0.0.0으로 셋팅되어 있다가 IP를 할당받는 것입니다.
게이트웨이 주소나 DNS 서버 주소도 필수적으로 필요합니다. 때문에 DHCP에서는 IP주소 할당 뿐만이 아니라 게이트웨이 주소나 DNS 서버도 할당합니다.
인터넷에 연결되는 모든 절차 중 하나라도 문제가 생기면 인터넷 전체가 안되는 겁니다.
+아마존에서도 DNS 서버가 죽어서 아마존 서버를 사용하는 업체와 소송을 벌인 적이 있다고 하네요 : )
DHCP가 할당에주는 IP주소는 사용 기간이 있습니다. 하지만 사용 기간보다 인터넷이 ON 상태면은 계속 쓸 수 있게 갱신을 해줍니다. OFF 되면 자동 반납 (expire)를 해줍니다.
DHCP는 DNS처럼 어플리케이션 레이어 프로토콜이고, UDP를 사용합니다.
그렇다면 왜 UDP를 사용할까요?
TCP는 3 way hand shake를 거쳐야합니다. DHCP는 단발적으로 빨리 끝나야하기 때문에 3 way hand shake를 거치면, 너무 느리게 동작할 수 있습니다. 또한 네트워크 단에서는 loss가 빈번하게 발생하니까 TCP메세지나 DHCP는 서브넷 안에서 데이터 전송이 일어납니다. 서브넷 안에서는 loss가 일어날 확률이 조금 적다고 보기 때문에 UDP를 사용합니다. loss가 일어나면 메세지를 재전송하기 때문에 괜찮고요. 빨리 던져서 빨리 받는 게 이득이라는 것이죠.
5. NAT( network address translation )
42억개의 IP주소가 부족한 가운데, NAT이라는 기술이 도입되어 현재까지 IP주소를 잘 할당받아 쓰고 있는데요.
IP는 자원인데, 와이파이 접속 기기는 10대면 3대보다 비용을 더받아야할 것 같지만, 그렇지 않습니다. 왜냐하면 와이파이 기기에 NAT 기능이 들어가 있기 때문입니다.
NAT 기능은 하나의 external IP주소로 하나의 네트워크를 커버하게 해주는 기술을 말합니다.
하나의 external IP주소는 전세계에서 유니크하게 구별되어야하는 IP주소입니다.
external IP는 하나의 로컬 네트워크에 있는 모든 디바이스들이 공유할 수 있는 IP주소입니다. 이와 같이 로컬 네트워크에서도 사용할 IP주소가 필요한데요. (=internal, private IP주소) 이 주소들은 겹쳐도 됩니다. 다른 로컬에서도 사용할 수 있는 아이피 주소라는 겁니다.
예를 들자면, 학교 학생들은 학번으로 구분하지만, 전세계 학생들을 구분하기 위해선 주민등록번호같은 체계를 써야한다는 겁니다.
내부 ID(private IP 주소)와 외부 ID(external IP 주소)가 다르다는 것이죠.
우리는 external IP 주소를 아껴써야 하는 것입니다. private 주소는 겹쳐도 되기 때문에 상관 없죠.
문제는 private 아이피 주소와 external 아이피 주소를 맵핑시켜줘야 합니다. 1 to N 맵핑인 것이죠. 때문에 유니크한 맵핑이 될 수 없습니다. 1 to N 맵핑을 어떻게 하면 1 to 1 맵핑으로 바꿀 수 있을까 고민하게 되는 것 입니다.
1 to N으로 맵핑하면, 나갈 때는 상관없는데, 들어올 때 로컬 디바이스를 찾아갈 때 문제가 됩니다. 최종 목적지까지 찾아가기는 어려운 것이죠.
5-1. 1 to 1 맵핑
NAT 디바이스는 장비가 되기도 하지만, 소프트웨어 측면이 강합니다. 무선 공유기나 라우터 같은데 탑재가 되어있습니다.
무선 라우터는 NAT 기능을 탑재하고 있다고 가정하고, 무선 라우터는 138.76.29.7(중복 불가)이라는 external IP를 사용하고, 10.0.0.4(중복 가능)라는 private IP를 사용하고 있습니다.
여기서 트래픽이 발생하면, destination IP, source IP 주소가 필요합니다. 로컬 네트워크에서 발생하는 트래픽은 항상 소스 아이피 주소는 외부 아이피 주소로 변환되어 나갑니다. 이런 변환 정보는 NAT translation table에 기록합니다.
외부 입장에선 로컬 디바이스는 하나의 아이피 주소를 갖고있는 애로 보입니다. 외부 입장에서는 external IP주소만 보이는 것입니다. 즉, 단말 입장에선 external인지 private 아이피인지 모른다는 겁니다.
서버가 다시 메세지를 보낼 땐 138.76.29.7을 가지고, external까지는 잘 갑니다. 그 후에는 포트 정보(5001)를 사용해 private 아이피로 변환되어 들어가게 됩니다.
NAT은 로컬 네트워크가 하나의 external IP주소를 사용할 수 있도록 해주는 겁니다. IP주소를 아끼기 위함이죠.
로컬 디바이스 안에는 여러 개의 네트워크를 사용할 수 있게 허용합니다. 대신에 로컬 디바이스 안에 있는 디바이스들은 private 아이피주소를 사용해서 자기 자신들을 구분하게 됩니다.
NAT은 private 아이피주소를 external 아이피주소로 맵핑해주는 기능이죠.
위의 이미지를 보시면, 이들은 같은 인터넷 아이피 주소를 쓰지만 소스포트번호로 구분되는 것을 알 수 있습니다.
NAT에서는 소스포트번호도 활용한다는 것이 중요하네요 ^^
5-2. NAT기능을 구현할 때 필요한 기능
1. outgoing, 나가는 패킷에 대해 replace하는 기능이 필요합니다.
소스 아이피 주소와 포트 넘버를 NAT 아이피주소와 new port number로 변환해주는 기능입니다.
2. remember 즉 테이블을 만드는 기능을 구현해야합니다.
소스 아이피 주소와 포트 넘버를 NAT 아이피주소와 new port number로 변환해주고 그것을 기록하는 테이블이 필요합니다.
3. incomming, 들어오는 패킷에 대해 replace하는 기능이 필요합니다.
external IP주소를 private IP주소로 translation해주는 기능이 필요합니다.
5-3. 32bit 주소 체계, private IP
32 bit 주소 체계에서는 private IP주소만 쓰는 것으로 reserve해두었습니다.
위의 대역은 extenal로는 못쓰는 것입니다. 우리가 사용하는 노트북은 대부분 private IP를 사용할텐데요. NAT 뒤에 숨어서 private IP를 할당받았다고 생각하면 됩니다. 일반적으로 로컬 디바이스가 external IP 주소를 할당받는 것은 굉장히 드뭅니다.
NAT은 얼만큼의 IP주소를 sava할 수 있을까요?
포트 번호는 16비트이기 때문에 이론적으론 약 6만 개의 조합을 만들 수 있습니다. 1개의 external에 약 6만 개의 IP를 조합할 수 있습니다.
엄청나게 저장을 할 수 있는 것이죠. 실제론 이렇게 크게 쓰진 않습니다.
NAT이나 DHCP는 일반적으로 함께 운영이되는 경우가 많습니다.
DHCP를 통해서 private IP 주소를 할당하고, 네트워킹 할 때는 NAT을 통해서 external로 IP주소가 변환되어 나갑니다.
NAT은 보안쪽으로도 좋습니다. 해커들이 공격하기 쉬운 IP주소 대신 private IP가 NAT을 통해 external IP주소로 나가기 때문에 IP주소를 숨길 수 있습니다.
5-4. NAT의 문제점 : NAT traversal problem
peer to peer 어플리케이션에서 복잡한 문제가 생깁니다.
우리는 이것을 NAT traversal problem이라고 부릅니다.
클라이언트-서버가 아닌 peer to peer로 소통하게 되면, 애도 private 나도 private 주소를 쓰고, 중간에 NAT이 껴있으면, 맵핑이 안되는 겁니다.
NAT traversal problem 해결하기 위해 다양한 기술들이 개발이 되었는데요. 과제로 나올 예정이라고 하네요 하하
솔루션은 굉장히 상식적인 선입니다.
6. IPv6
개념 자체는 버전 4가 고갈될 것이다하고 해서 아주 옛날에 나왔고, 주소 체계도 나왔다고 합니다. 실제론 많이 쓰진 않는다고 하네요.
128비트 주소 체계입니다. 2^128=엄청나게 큰 숫자 ^^ 이건 입력하는 것도 일입니다.
IPv6는 subnet prefix(네트워크 나타내는 파트)와 interface identifier(like host파트)로 구분됩니다.
6-1. auto configuration
IPv6는 auto configuration을 기본적으로 사용합니다.
IPv6는 automatic configuration을 사용하기 때문에 no static configuration입니다.
STEP 1.
맥주소와 link local prefix를 사용해 이니셜로 아이피주소를 받아옵니다.
IPv4는 서브넷이 호스트 아이디로 구분되었습니다. 이 친구는 호스트 아이디 대신 인터페이스 아이디라는 이름을 쓰는데요. 인터페이스 아이디에 맥주소를 활용하기 때문입니다.
맥주소는 디바이스마다 고유하게 부여되는 주소입니다. 마치 우리도 주민번호, 운전면허번호가 따로 있는 것 처럼 각 레이어에서 다른 주소를 사용하죠. 하지만 IPv6에서는 고유한 맥주소를 활용해 어찌보면 IP주소에 편입시킨 것입니다.
IP주소에서 호스트 파트 따로 할당할 필요 없이 맥주소 자체를 호스트 아이디로 쓰자는 아이디어 입니다. 다만 주소가 길어질 수 밖에 없네요.
맥주소가 64비트이기 때문에 남은 주소에 할당이 되고, 나머지가 서브넷 파트가 됩니다. 이렇게 고유한 아이피주소가 생성되는 것입니다.
STEP 2.
라우터에서는 global prefix를 제공합니다. DHCP 기능으로 빨간색 부분을 제공해줍니다. 채워지면 IP주소가 완성되게 되는 것입니다.
6-2. 잠시 리마인드!
어플리케이션에서 헤더인 메세지가 붙어 트랜스포트 레이어로 내려갑니다.
트랜스포트 레이어에서 헤더인 세그먼트가 붙어 네트워크 레이어로 내려갑니다.
네트워크 레이어에서 헤더인 데이타그램이 붙어 링크 레이어로 내려갑니다.
링크레이어에서 헤더인 프레임이 붙어 피지컬 레이어로 내려갑니다.
피지컬 레이어에서 전파형태로 목적지까지 전달되게 됩니다.
이 과정에서 우리가 생각해볼 수 있는 것이 무엇이냐면, IPv6가 주소 문제도 해결해주고 괜찮은데 네트워크 단에서는 새로운 기술이 도입되는 게 생각보다 어렵습니다. 이미 전세계에서 디바이스가 기존 버전으로 깔려있고, 전세계 시차도 있는데, IP주소를 바꾸려고 동시에 업데이트하기에는 힘듭니다. 때문에 IPv6가 제한된 이후에도 아직까지 도입이 못되고 있습니다.
이런 과정에서 우리는 IPv4와 IPv6 혼합시켜볼 순 없을까 생각하게 됩니다. IPv4를 조금씩 버전 6로 대체해나가면, IPv6가 열리지 않을까 하는 생각을 갖고 있습니다. 실제로 IPv6로 사용 포지션을 늘려나가고 있다고 합니다.
IPv4는 IPv6를 해석할 수 없습니다. IPv4만 해석하도록 하드웨어적으로 구현해서 라우터는 소프트웨어로 업그레이드할 수 없고 하드웨어적으로만 사용하고 있기 때문입니다.
그러면 어떻게 IPv6를 해석하고 연동시킬 수 있을까요?
IPv4는 바꿀 수 없지만, IPv6는 새로 만드는 장비니까 통역하는 기능을 넣을 수 있을 것입니다. 이처럼 네트워크에서는 번역하는 기능을 번역한다고 하지 않고, tunneling이라고 합니다.
6-3. tunneling
터널링은 IPv6 데이터그램을 IPv4로 바꿔주는 일을 합니다.
IPv4 페이로드에 IPv6의 데이터그램이 들어갈 수도 있습니다. 어쳐피 이건 데이터로 취급하기 때문입니다. IPv6를 그냥 페이로드 취급하고, IPv4 헤더를 붙여주면, 그냥 IPv4 데이터가 되는 겁니다. 또한 이것은 IPv4 라우터가 해석할 수도 있습니다.
다음과 같이 IPv6라우터에 IPv4 라우터가 껴있다면, IPv6끼리 할 때는 IPv6 라우터로 라우팅하면 됩니다. 근데, IPv6로는 옆에있는 IPv4 해석을 못합니다. 때문에 IPv4의 헤더로 인캡슐레이션하게 됩니다. 이렇게 되면 IPv6인지 모르게 되는 겁니다.
"IPv4 데이터로군!"
동일하게 IPv4에서 IPv6로 넘어갈 때 해석이 불가능하기 때문에 IPv4 헤더를 떼어내고, IPv6로 라우팅하게 됩니다.
마치 버전 6와 버전 6 사이에 터널이 생긴 것 같은 효과를 줍니다. 그래서 이것을 터널링이라고 하는 겁니다.
터널링은 네트워킹에서 많이 사용되는 언어인데요. 이전 장비와 새로운 장비가 혼용되는 상황에서 새로운 장비에서 이전 장비를 통과할 수 있도록 만드는 기능을 터널링이라고 합니다.
6-4. IPv6 채택
IPv6는 현재 어떻게 되고 있을까요? 2013년 기준으로 약 3%가 산업 아이피 라우터로 사용되고 있습니다.
정부에서는 보안때문에 산업 네트워크와 정부망과 분리시킵니다. 이렇게 분리시키면 페이로드가 좀 용이합니다.
미국에서도 이런 정부가 사용하는 네트워크들은 IPv6로 빠르게 교체하고 있습니다.
하지만 민간이 쓰는 네트워크는 이해관계도 다르고, 플레이어들도 굉장히 다양하기 때문에 바꾸기 어려워 점유율이 굉장히 낮습니다.
2015년도 기준에서는 구글에서 데이터센터 전용 네트워크로 8% 가량 IPv6로 바꿨습니다. 미국에서는 정부에서도 33%정도 교체를 진행했습니다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
컴퓨터 네트워크 20일차 : 라우팅 알고리즘, 다익스트라 알고리즘, link state, distance vector (0) | 2021.11.16 |
---|---|
컴퓨터 네트워크 19일차 : 라우터 기능, 방화벽 (0) | 2021.11.09 |
컴퓨터 네트워크 17일차 : Network layer (0) | 2021.11.03 |
컴퓨터 네트워크 16일차 : TCP congestion control (0) | 2021.10.31 |
컴퓨터 네트워크 14일차 : fast retransmit / flow control / connection management (0) | 2021.10.18 |