IPv4, ICMP, IPv6

장서연·2021년 4월 17일
0


223.1.1 이 네트워크 주소인 것을 알 수 있다. 앞의 세부분이 네트워크 주소이므로 이 네트워크는 C 클래스이다.

서브넷 == 네트워크 라고 생각해도 된다

223.1.1 을 쓰는 애들은 같은 네트워크의 컴퓨터들이다. 각각 하늘색 부분들


위 그림의 하단 오른쪽의 라우터는 네트워크 인터페이스가 3개이다. 각각 ip주소가 다르다. 서브넷이란, 네트워크 인터페이스 카드를 분리하고,

각 컴퓨터도 네트워크 인퍼페이스 카드를 분리하여 만든 고립된 네트워크가 서브넷이다.

라우터끼리도 마찬가지이다. 왼쪽 라우터의 네트워크 인터페이스분리, 오른쪽 라우터의 네트워크 인터페이스 분리하여 하나의 서브넷을 구성할 수 있다.

네트워크 인터페이스를 분리하여 고립된 네트워크로 만드는 것이 서브넷이다.

각 서브넷은 라우터 없이 서로 통신이 가능하다. 왜냐, 서로 연결되어있으니까. 서브넷 내에서는 같은 네트워크 주소를 사용한다.

한 서브넷 내에서는 같은 네트워크 주소를 사용

이말은, 라우터를 거치지 않는다는 말! 라우터는 서로 다른 네트워크를 연결시켜줄 때 라우터를 사용. 서브넷에서는 같은 네트워크를 사용하므로 라우터 기능이 필요없음

위 그림에서 서브넷의 개수는, 네트워크 주소가 같은 애들이 각 6개가 있으므로, 서브넷이 6개 존재하고 있다.

지금까지, Ipv4 주소를 클래스 A-E까지 구분해서 사용하는 것을 공부했다. 주로 A,B,C사용. 그런데, 이제는 더이상 클래스로 구분하지 않는다. 왜?

클래스 B를 할당받았는데, 2의 16승 만큼의 호스트가 없는 경우가 있음. 소중한 주소를 주었는데도, 활용을 못하고 있는 비효율적인 상황이 발생한다.

그래서, ip의 낭비를 막기 위해 더이상 너 클래스 A 가져, 너는 B가져, 너는 C 가져... 이렇게 하지 않는다. 지금까지 공부했던건 옛날 얘기이다.(5년전 ,, 10년전..)

최근에는 CIDR(Classes InterDomain Routing) 이라는 기법으로 ip를 분배한다.

예를 들어, 숭실대야, 너는 200.23.16.0/23 을 가지렴! 23비트가 네트워크 주소.
앞부분의 23비트는 네트워크, 나머지 부분을 호스트로 쓰렴!

앞으로 클래스 A,B,C이런 말 안쓰고, 네트워크 주소가 뭐냐고 물어보면 200.23.16.0/23 이런식으로 씀

147.46.52.5 라는 클래스 B네트워크도, 146.46.52.5/16 이렇게 표현한다. 16은 네트워크 주소가 16비트를 차지한다는 뜻이다.

클래스를 사용했었을 때는, 클래스 B는 16비트로 고정이 되어있었다. 그런데, 이제 더이상 클래스 A, B, C... 를 따지지 않기 때문에 16비트를 줄수도 있고, 17비트를 줄수도 있고, 18비트를 줄 수도 있다.


라우터는 앞의 23비트만 보고 네트워크를 판단하여 라우팅하게 된다.

내 ip가 뭔지 신경 안써도 공유기(AP)에 접속할 수 있는 이유는?
자동으로 할당되기 때문이다. 바로 DHCP(Dynamic Host Configuration Protocol)프로토콜을 통해! 다이나믹하게 호스트에게 주소를 주는 것이다.


내가 어떤 서브넷에 들어갔다. 이 안에는 always DHCP 서버가 존재한다. 보통 DHCP의 기능이 라우터에 포함되어있다.
집에서는, Acess Pointer에 DHCP의 기능이 포함되어있다. 그냥 독립적으로 있는 경우도 있는데, 그게 DHCP서버이다.

DHCP는 어떤 애가 새로 들어왔을 때, 새로 들어온 애에게 ip를 자동으로 할당해주는 서버이다. DHCP는 현재 네트워크 번호가 몇인지를 알고있고, 호스트 번호도 관리 하고있다. 어떤애가 쓰다가 나갔으면 그거 회수해서 재사용



현재 DHCP 서버의 ip 주소가 223.1.2.5 이고, 클래스는 C라고 가정해보자. 네트워크 주소는 24bit 이다. 223.1.2.5/24

위 그림처럼 몇비트가 네트워크 주소인지 나와있지 않으면, 보통은 예전의 클래스의 기준을 디폴트로 하고있다는 것을 알자.



DHCP서버는 ip를 주는 것 외에도, Gateway 라우터가 어디인지에 대한 정보도 함께 제공한다. (first-hop router)

DNS Server : 도메인 네임을 ip로 바꿔주는 역할을 하는 서버

ip주소, 서브넷(=network mask), DNS, Gateway 이 정보들을 DHCP서버가 제공한다.


첫번째 처럼 통째로 사용할 수도, 아니면 네트워크를 더 쪼개서(3비트) 사용할 수도 ! 라우터가 3비트 보고 8개 네트워크 중 어디인지 구분해서 알려줌

200.23.16.0/20 과 200.23.18.0/23 을 같이 받게 됨. 더 길게 주소가 맞는 쪽으로 보냄!

라우터에 여러 정보가 있을 때, 더 길게 맵핑이 되는 쪽으로 라우팅을 한다. (Longest prepix matching)


다시한번 설명하자면, 한 데이터가 라우터에 20비트까지는 같은 주소가 왔다. 이때 더 길게 매칭되는 주소로 보내는 것이다.

NAT

내부네트워크에서는 사설 네트워크를 사용한다. 클래스 A에서의 사설 네트워크 주소는 10.--- 즉 10으로 시작하는 주소를 가지며, 클래스 C에서는 192.168 -- 로 시작하는 주소를 가진다.

사설네트워크 주소를 주고, 공적인 ip는 138.76.29.7 하나만 준다.

이렇게 되면, 사설네트워크 안에서는 속한 자기들끼리구분이 가능하지만 공적 ip는 하나 딱 주어진다. 이말은 즉, 외부에서 내부의 ip들을 알수가 없게 된다.

이를 해결하기 위해 NAT가 있다.

NAT란, 사설네트워크에서 내보낸 정보를 공인 ip로 바꿔서 내보내는 기능을 한다. 액세스 포인터(라우터)에 구현되어있다.



이런 기능을 NAT 가 한다. 공유기는 NAT 기능을 제공하고 있다!

나갈때는 공인 ip로 바꿔주는 기능, 들어올때는 적당한 애를 찾아 전달하는 기능
사설 ip주소를 공인 ip주소로 바꿔서 내보내는
공인 ip주소를 받아서 사설 ip주소로 변환하는

왜 필요한가?
공인 ip개수에 한계가 있기 때문이다.

Ipv6가 나왔음에도 불구하고, v4로 현재도 아주 잘 살고 있는 이유는, 사설 네트워크를 구성하고있기 때문이다. 사설네트워크를 구성하고 있으면, 위 그림처럼 138.76.29.7 이라는 네트워크 주소(공인 ip) 하나만 있어도 호스트 몇개를 커버할 수 있다.

ip ver4가 아직도 존재하는 이유는 NAT때문이다.


NAT translation table을 항상 기록해 둔다는 것이 핵심이다.

근데 만약, 외부에 있는 컴퓨터가 사설네트워크 안에 있는 내 컴퓨터로 접속하려면 어떻게 하는가?

바로 port forwarding 이라는 기법을 사용한다.

vmwware나, virtual box를 사용할 때 포트포워딩을 하는데, 여기서 들어봤다.

즉, 2500번으로 오는 건 , 10.0.0.1:2500 으로 보내줘! 라는 뜻임
공인 ip 138.76.29.7:2500으로 오는 건 10.0.0.1:2500 으로 가게 하라는 뜻임!이런 기록을 미리 해놓는 것이다. NAT를 제공하는 디바이스의 포트포워딩 테이블에 위와 같은 내용을 미리 기록해놓는 것! 그러면 2500번 포트로 접속이 들어왔을 때 바로 데이터를 전달할 수 있음

ICMP (internet control message protocol)

패킷이 라우터를 돌다가, TTL 이 0이 되면 그 패킷을 버려버린다고 배웠었다. 이때 , 버린다는 내용을 보낸 컴퓨터에게 알려주어야 하는데 그것이 바로 ICMP이다. type과 code의 형태로 알려준다.

문제가 생긴 라우터에서 데이터를 보낸 최초 컴에게 메시지를 전달하는 것

이를 위해서는 패킷을 하나 만들어야 한다. 소스의 주소에는 라우터의 주소를 적고, 타겟 주소는 원래 보낸 애의 주소를 적어서 ICMP 에 맞게 보낸다. 11번을 보내면, TTL이 만료되어서 패킷을 버렸다는 메시지이다.

라우터에서 패킷을 전달할 때 문제가 발생했을 때, 원래 패킷을 보낸 호스트에게 어떤 문제때문에 패킷을 전달하지 못했다는 것을 알려주는 것이 ICMP. 컨트롤 메시지.


도착 호스트에서는, TTL이 0이 되어도 ICMP를 보내지 않음. 라우터가 아니기때문에. 그래서 ICMP 메시지를 받기 위해 데이터를 보낼 때 일부러 포트번호를 틀리게 해서 보내 ICMP를 받음

IPv6

IPv6에 대해서는 터널링 하나만 알면 된다.

헤더를 까서 upper layer를 확인해보면, tcp도 아니고 udp도 아닌 값이 들어있으면 ipv6임을 알게 되고, 헤더를 벗기고 라우팅 시작

이것을 터널링이라 한다. 터널링을 통해 IPv4와 IPv6의 공존이 가능하다!

0개의 댓글