[cs50]네트워크_IP(IPv4, IPv6 ) , DNS, DHCP

Laptop ->(wifi 혹은 유선)-> AP(Access Point) -> swtich ->
router ( switch와 router: 내 서버에 접속) ->(유선 혹은 무선)-> cloud
IP 주소
인터넷 프로토콜은 인터넷의 정보들이 어떻게 전송되는지를 정의하기 위한 규칙들입니다. 프로토콜이란, 규칙들의 집합을 말합니다. 인터넷 프로토콜 중 일부는 인터넷 상에 있는 각 장치에 대해 IP 주소를 할당해주는 것과 관련 있습니다. IP 주소는 인터넷 상의 장치들을 식별할 수 있게끔 해줍니다. IP(인터넷 프로토콜)은 여러 버전을 거쳐왔습니다. 가장 최근 버전은 IPv6로, 기존의 IPv4 프로토콜을 대체하기 위한 것입니다.
IPv4 주소와 IPv6 주소
IPv4 시스템에서, IP 주소는 마침표로 구분된 4개의 10진수로 표현되곤 합니다. 각 숫자는 0부터 255까지의 10진수입니다(8bit공간). 결과적으로, 각 IPv4 주소는 32bit이며, 최대 2^32개의 주소가 존재할 수 있습니다. 이는 약 43억 개의 주소입니다.
그러나 인터넷이 발달하면서, 43억 개의 주소로는 인터넷에 연결하려는 모든 장치들을 더 이상 수용할 수가 없게 되었습니다. 그 결과, 사용 가능한 IP 주소를 늘리기 위해 IPv6 표준이 개발되었습니다.
IPv6에서, IP 주소는 콜론으로 구분된 8개의 숫자로 구성됩니다. 각 숫자를 10진수로 표현하지 않고, 16bit 숫자를 0000부터 fffff까지의 16진수로 표현했습니다.

각각 16bit 정보를 갖고 있는 8개의 숫자로 구성되므로, 각 IPv6주소는 128bit를 저장하며, 이는 340 × 10억 × 10억 × 10억 × 10억 개보다도 더 많은 IP 주소를 만들 수 있습니다. 현재 쓰이는 주소들의 개수보다 훨씬 더 많기 때문에, 많은 IPv6 주소들은 8개의 구성 숫자들 사이에 0들을 포함하고 있습니다. 축약해서 쓰는 경우, IPv6 주소는 16진수 앞에 오는 0들을 생략하고 0이 연속으로 오게 되면 그것들을 생략하면서 ‘::’을 씁니다. 예를 들어, IP 주소 28aa:0000:0000:0000:0000:0000:0018:a5b2는 앞의 0들을 생략하고 연속으로 오는 0들을 ::으로 대체하여 28aa::18:a5b2로 축약할 수 있습니다. 축약할 때 각 주소마다 ::은 하나만 있어야 합니다.
사설 IP 주소
인터넷 상의 모든 IP 주소들이 다 접근 가능한 것은 아닙니다. 사설 IP 주소라고 알려진 어떤 주소들은 특정 로컬 네트워크 내에서 사용되도록 따로 떼어놓습니다. 로컬 네트워크에 있는 컴퓨터들은 사설 IP 주소를 이용하여 다른 컴퓨터와 통신할 수 있지만, 이 네트워크 밖에 있는 컴퓨터들이 접근할 수는 없습니다. 보통, 사설 IP 주소를 갖는 장치들은 공인 IP 주소를 공유합니다. 이렇게 하면 IPv4 표준에서 필요한 공용 IP 주소의 개수를 줄일 수 있습니다. 10.#.#.#, 172.16.#.# - 172.31.#.#, 192.168.#.# 의 형태를 같은 주소들은 사설 IP 주소로 쓰기 위해 따로 떼어놓은 것입니다.
IP 주소 127.0.0.1은 다른 장치에 연결하는 것이 아니라, 사용자가 현재 사용하고 있는 장치에 연결하는 주소입니다. 이러한 이유로, 이 주소를 로컬호스트(localhost)라고 부릅니다.
DNS와 DHCP
인터넷상에 있는 장치들이 IP 주소를 효과적으로 사용할 수 있도록 하는 두 가지 중요한 시스템이 마련되어 있습니다. 도메인 이름 시스템(Domain Name System) 혹은 DNS는 구글 크롬이나 인터넷 익스플로러 같은 웹 브라우저 주소창에 치는 텍스트를 IP 주소로 변환해줍니다. 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol) 혹은 DHCP는 각 장치에 IP 주소를 할당하는 것을 도와줍니다.

DNS
대부분의 사람들은 웹 페이지에 접속하려 할 때 IP 주소를 치지 않습니다. 그 대신에 URL을 입력합니다. URL, 즉 도메인 주소는 IP 주소보다도 사람이 읽기 쉽고 기억하기 쉬운 웹 주소입니다.
사용자가 기억하기 쉬운 URL을 사용하더라도 궁극적으로는 접근하려는 장치의 IP주소를 알아야 합니다. 그래서 DNS가 필요한 것입니다. DNS는 google.com이나 facebook.com 같이 식별자 역할을 하는 도메인을 그와 대응하는 IP 주소로 바꿔줍니다.
웹 브라우저에 URL을 치면, 컴퓨터는 DNS 서버에 접속합니다. DNS 서버는 어느 도메인 이름이 어떤 IP 주소와 대응하는지에 대한 정보를 저장하고 있습니다. DNS 서버는 여러 개가 있습니다. 어느 도메인 이름이 어떤 IP 주소와 대응하는지에 대한 정보가 바뀔 때 모든 DNS 서버들에 들어있는 정보가 같은 시간에 업데이트되는 것은 아닙니다. 그렇기 때문에 DNS 시스템의 변경 사항이 인터넷상의 모든 DNS 서버로 전달되는데 시간이 걸리더라도, DNS 서버끼리는 서로 변경된 사항에 대해 공유해야 합니다.

DNS에서 관리하는 도메인은 <그림 1>과 같이 트리 형태의 계층 구조로 이루어져 있습니다. 기본 최상위 도메인(TLD) 집합이 있는데, TLD는 여러분들이 익숙한 웹 사이트 주소 마지막 부분입니다(com, net, org, edu 등). 웹 사이트 URL들은 이러한 최상위 도메인들 중 하나로부터 가지를 뻗어나갑니다. 예를 들어 “google.com”은 최상위 도메인 “com”에서부터 가지를 뻗어나갑니다. 어떤 웹사이트는 더 멀리 뻗어나가기도 합니다. 이러한 가지들을 서브 도메인이라 합니다. “image.google.com”과 “maps.google.com”은 서브 도메인의 예입니다.
DHCP
컴퓨터는 IP 주소를 할당 받는 방법이 있어야 합니다. 예전에는 네트워크 관리자가 일일이 컴퓨터에 IP 주소를 할당하는 일을 했었습니다. 지금은 동적 호스트 구성 프로토콜 혹은 DHCP가 이 일을 자동으로 해줍니다. 컴퓨터가 네트워크에 연결할 때, 컴퓨터는 한 DHCP 서버에 연결할 것입니다. DHCP 서버는 사용 가능한 IP 주소 풀에 접근할 수 있고, 네트워크상에 있는 컴퓨터 각각에 고유한 IP 주소를 할당하는 일을 합니다.
DNS와 DHCP를 사용하면 인터넷상의 장치들은 자기 자신의 IP 주소를 받을 수 있고, 장치들은 사용자가 방문하려는 웹 사이트가 어느 IP 주소와 대응하는지 알 수 있습니다. 이러한 과정은 인터넷 프로토콜이 인터넷을 통해 효과적으로 통신하도록 해 주는 중요한 단계들입니다.