[kocw 이미정]15. IP: Internet Protocol

이건회·2022년 2월 11일
0

네트워크

목록 보기
15/24

  • 어떻게 호스트나 서브넷이 ip 주소를 할당받을 수 있을까? 첫 번째는 시스템 관리자에 의해 ip주소를 하드코드(할당) 하는 것이다. 윈도우 시스템의 제어판에 들어가 ip를 타이핑하는 것과 같다. 이런 경우는 시스템이 같은 장소에 있는한 ip주소가 잘 바뀌지 않는다.
  • 다른 방법은 DHCP라는 어플리케이션 계층의 프로토콜로 서버로부터 네트워크에 연결할때마다 그때그때 ip주소를 할당받는 것이다.(plug and play)

  • DHCP를 사용하면 호스트가 네트워크에 있는 동안만 특정ip주소를 할당하고 그 호스트가 종료하면 바로 다른 호스트에게 그 주소를 넘기며 주소를 재사용하기 때문에 ip주소의 활용도가 높아져 효율적이다.
  • DHCP는 호스트가 DHCP서버를 발견하기 위해 서브넷에 브로드캐스트하는 DHCP discover 메세지, DHCP t서버가 자신을 서브넷에 알리기 위한 DHCP offer 메세지, 호스트가 ip주소를 요청하는 DHCP request 메세지와, 이에 응답하는 DHCP ack 메세지가 있다.

  • DHCP가 동작하는 방식이다. 각 메세지가 보내지는 과정을 보여준다. discover에서 src에는 아직 ip주소를 얻지 않았으므로 0.0.0.68로 되어있다. 그 다음 dest에는 목적지 주소를 나타내고 있다.dhcp는 웰노운 포트번호인 67번을 사용한다. yiaddr에는 클라이언트를 위해 할당하는 ip주소를 의미한다. transactions에서는 id를 기입하여 어느 메세지에 대한 응답인지를 기록하게 한다. 다음 offer로 가면 lifetime이 추가되는데 이는 클라이언트가 이 주소를 사용할수 있는 시간을 나타낸다.

  • dhcp는 서브넷에 ip주소 할당 이외에도 몇가지 중요한 기능을 하는데,
    1) 첫 홉 라우터의 주소를 알려준다(패킷을 처음으로 어딜로 내보낼지)
    2) 로컬 DNS서버의 이름과 ip주소를 클라이언트에게 알려준다
    3) 서버가 할당하는 ip주소에서 서브넷 포션이 얼마만큼인지 알려준다

  • 서브넷에 들어온 랩탑이 dhcp 서버로부터 통신을 받는 예이다. 먼저 랩탑이 켜지면 dhcp 클라이언트가 구동되어 리퀘스트를 생성하고 생성된 리퀘스트는 랩탑의 프로토콜 스택을 따라 내려가면서 udp 세그먼트에 동봉되고 역시 차례로 동봉된다. 이후 서브넷에 브로트캐스트 되며, 이 이더넷 프레임을 dhcp 서버가 받아 dhcp의 링크 계층인 이더넷 서버에서 demux가 일어나 ip 계층으로 가고, 차례로 올라가 dhcp 서버 프로세스까지 도착한다.

  • dhcp 서버 프로세스에서는 ack 메세지를 생성해서 ack 메세지가 역시 laptop에서 차례로 Demux되어 클라이언트 프로세스가 그것을 받게 됨으로서 랩탑이 ip주소, 첫 홉, dns 서버를 알 수 있다.

  • 서브넷을 어떻게 그것에서 사용할 ip주소를 얻게될까? 서브넷은 서브넷을 인터넷에 연결시키는 isp로부터 그 일련의 주소 블록을 할당받는다. 위 isp's block이 그것이다. 이 블록이 총 8개의 기관을 위해 인터넷 접속 기능을 제공하기 위해 사용된다면, isp는 추가적인(위 연두색으로 칠해진) 3비트를 사용해 각 기관을 식별한다. 그리고 앞의 밑줄 친 부분을 각 기관의 서브넷 아이디로 할당하게 된다.

  • ip주소가 계층적인 것이 어떤 영향을 미칠까? 위의 두 isp 중 flybynight는 첫 20비트가 200.23.16.0이고 r-us는 첫 16비트가 199.31.0.0이다. 포워딩 테이블을 만들기 위해 각 라우터들은 ip주소를 알아야 하는데, isp들은 자기가 사용하는 ip주소를 인터넷에 알려야 하는데, 계층적인 특성 때문에 flybynight에서는 목적지 주소가 200.23.16.0 으로 시작하면 모두 내게 보내라는 알림을 보내고, r-us의 경우도 마찬가지다. 이런 식으로 알려져야 하는 정보의 양을 크게 줄일 수 있다.

  • 만약 어떤 기관이 isp를 변경하면, 그 isp에 속하는 ip 주소로 모든 시스템의 주소를 바꿀 필요가 없다. 대신 그림처럼 org 1이 r-us로 올 떄 org1에 해당하는 서브넷 주소를 추가로 advertise 하면 된다.

  • 인터넷은 서브넷 prefix에 대해서 루트를 advertise한다. 라우터는 가까울 수록 더 자세한 포워딩 테이블을 가지고 지리적으로 먼 목적지일 수록 크게 라우트 aggregation을 한다, 즉 더 짧은 prefix에 대한 포워딩 테이블을 둔다. 그러므로 더 긴 address prefix를 가진 주소로 prefix 매칭이 이루어진다.

  • isp는 위 기관에서 address block을 할당 받는다.

  • NAT는 위와 같은 약자로, ip주소를 효율적으로 사용하려는 것이다. 이는 서브넷 전체가 하나의 ip주소를 사용하는 방식이다. 그림 처럼 로컬 서브넷 내에서는 임의의 prefix를 사용해 각 엔드 시스템에 ip를 할당 하는데, 이 서브넷을 바깥 세상인 인터넷에 연결하는 라우터쪽에서는 하나의 ip주소가 할당되어 있다. 그림 가운데 있는 라우터가 NAT역할을 하는데 서버에서 외부로 나가는 모든 주소는 하나의 고정된 주소를 달고 나가게 된다.

  • NAT를 사용함으로서 한 개의 ip주소만 필요하게 될 정도로 효율 적인데, 또 여러가지 기능이 있다.
    1) 로컬 네트워크 내에서 ip변경이 자유롭고
    2) isp가 변경 되어도 로컬 네트워크 내에는 영향이 없어 외부와 로컬 네트워크의 관리가 독립적이다.
    3) 로컬 네트워크 장치가 외부에 보이지 않으므로 보안적인 측면에서 우수하다

  • 내부에서 외부로 나가는 데이터그램은 자신의 사설ip 주소와 포트번호를 적어서 나가는데, NAT 라우터는 이 두 가지를 새로운 주소와 포트번호로 변경한다. 그럼으로써 외부의 파트너가 데이터그램을 받아 갔을 때 사설에서 보낸 것이 아닌 NAT가 보낸 것으로 응답하며 응답을 보낼 때도 NAT로 보낸다. NAT라우터가 이 응답을 받는데, NAT라우터는 NAT translation table을 통해 나가는 데이터의 주소와 포트번호의 매핑 정보를 기록하며, 외부에서 응답이 들어오면 그 정보를 테이블에서 찾아 로컬 디바이스에 전달한다.


  • 위는 NAT를 통해 로컬 네트워크가 외부와 정보를 주고받는 과정이다. 사설 ip주소와 포트번호가 나트를 지나며 고정 주소와 번호로 변경되는 것을 확인할 수 있다. 이 변경 정보를 나트가 나트 translation 테이블에 기록한다.

  • 응답 데이터그램은 NAT의 ip 주소와 포트번호로 도착한다.

  • 그럼 나트는 테이블을 참조하여 본래 사설 주소와 포트번호로 변경하여 로컬 네트워크 목적지로 전달한다.

  • 나트는 약 6만 여개의 커뮤니케이트 커넥션을 동시에 지원할 수 있다. 그러나 네트워크 계층 까지만 탑재하는 장비이며 어플리케이케이션 디자인 과정에서 제약이 있다.

  • 서버가 나트를 통해 클라이언트와 연결되려면 나트의 트랜스레이션 테이블이 있어야 하는데, 이 테이블은 내부 서버가 외부 클라이언트에 데이터를 내보내야만 만들어 진다. 그러나 서버는 클라이언트의 컨택 없이는 데이터가 나가지 않는데, 그러나 외부 클라이언트는 내부 서버 주소를 알 수 없어 컨택할 수 없어 테이블이 만들어지지 않는 문제가 생긴다.
  • 이를 해결하기 위한 첫 번째 방법으로는 특정 서버 프로세스를 위해 관리자가 미리 직접 테이블에 매핑 엔트리를 명시한다.
  • 또한 위 방법을 자동적으로 수행해주는 프로토콜인 UPNP가 있다.

  • UPNP 과정을 설명하자면, 나트 뒤의 로컬 네트워크에서 서버 프로세스가 탄생하면, 서버프로세스는 UPNP를 이용해 public ip address를 습득하고, 나트 라우터에게 자신의 ip와 포트번호에 매핑되는 새로운 포트번호를 일정 시간 동안 리스해 달라는 요청을 보내 테이블에 매핑 정보가 등록되도록 한다.
profile
하마드

0개의 댓글