티스토리 뷰

  TCP/IP의 IP(Internet Protocol)만으로 패킷을 목적지까지 전달하는 것은 가능하지만, 이것만으로 통신을 하기에는 부족하다. 실제 패킷을 전달하는 데이터링크에서 통신하기 위해서는 MAC을 알아야 하는데 이때 상대방의 MAC을 알아내기 위한 프로토콜인 ARP, 패킷 전송에 문제가 있을 경우 감지하기 위한 ICMP, Host명 만으로 상대방의 IP를 알기 위한 DNS와 같은 기능들이 IP를 보조한다. 그리고 마지막으로 IP주소를 사용자가 직접 설정하지 않아도 네트워크에 연결만 하면 사용할 IP가 정해지는 응용계층의 DHCP(UDP 포트번호: 67, 68)에 대해 알아보도록 하자.



  1. DHCP(Dynamic Host Configuration Protocol)

  우리가 인터넷을 사용할 때를 상상해보자. PC를 켜고 랜선을 꽂으면 별다른 설정없이 인터넷 사용이 가능하다. 물론, 내가 ISP(Internet Service Provider)의 인터넷 상품에 가입이 되어있을 때 그렇다. 이렇게 PC에 IP주소와 서브넷마스크, 게이트웨이, 그리고 앞장에서 배운 DNS 주소를 직접 설정하지 않고도 손쉽게 인터넷을 사용할 수 있는 건 모두 DHCP 덕분이다. DHCP는 IP를 서버에서 할당함으로써 클라이언트의 IP설정을 자동화 시켜 "플러그 앤 플레이(Plug and Play)"가 가능하도록 해준다.


  네트워크 연결설정에서 Internet Protocol Version 4 (TCP/IPv4) 속성에 가보면 아래와 같이 자동으로 IP 주소를 받도록 설정되어 있는 것을 확인할 수 있다.


[그림1. Windows에서의 IPv4 속성: 자동으로 IP 주소 받기]



  DHCP에서 클라이언트가 서버로부터 IP를 할당받는 과정을 살펴보도록 하자.


[그림2. DHCP에서의 IP 할당과정]

- DHCP Offer는 일반적으로 Broadcast로 보내지고 Broadcast Flag가 0이면 unicast로 보낸다고 한다. 아직 단말이 IP를 모르기 때문에 Unicast로 보낼 수 없음


  IP를 할당하기 이전에, DHCP 서버 관리자는 서버에 할당할 IP주소와 서브넷마스크, Default 게이트웨이를 설정한다. 클라이언트는 처음 네트워크에 연결되면 DHCP Discover(UDP, 목적지 포트번호: 67)를 Broadcast를 날려 서버를 찾는다. 앞장에서 배운 ARP Request에서 Broadcast가 쓰인 것과 유사하다. 패킷을 받은 서버는 본인의 IP주소 정보가 포함된 DHCP Offer(UDP, 목적지 포트번호: 68)를 통해 클라이언트에게 사용해도 좋을 네트워크 설정을 제안한다. 단, 다른 서버가 같은 IP주소를 이미 할당했을 수도 있기 때문에 주소를 배포하기 전 ICMP 에코 요청 패킷을 보내 기존에 사용 중인 IP가 아닌지 확인한다.

  클라이언트 역시 Offer 받은 IP주소에 대해 ARP Request를 Broadcast로 보내 중복 사용여부를 체크한 후 DHCP Request(UDP, 목적지 포트번호: 67)를 Broadcast로 보낸다. 최종적으로 서버가 DHCP Request에 대한 응답인 DHCP ACK(UDP, 목적지 포트번호: 68)를 보내게 되면 IP할당이 끝나며, 클라이언트는 ACK 메시지에 포함된 IP Lease Time만큼 IP주소를 임대하여 사용할 수 있게 된다.


  * DHCP의 IP할당이 두 번에 걸쳐 이루어지는 이유: DHCP 서버가 2대 이상일 경우에도 정상 동작하기 위해서다.

  * DHCP Request를 Broadcast 방식으로 보내는 이유: DHCP 서버가 2대 이상일 경우, 클라이언트로부터 선택되지 않은 DHCP 서버에서는 자신이 Offer했던 정보들을 지워야하기 때문이다. 그래야 다른 클라이언트들에게 그 IP주소를 새롭게 할당할 수 있을테니까~


  DHCP에 의해 네트워크 설정이 완료된 클라이언트는 TCP/IP 통신이 가능해진다. 그렇게 인터넷을 사용하다가 IP주소를 그만 사용하고 싶을 땐 서버에게 DHCP Release 패킷을 Unicast로 보내 IP를 반납한다. 또, DHCP Lease Time의 50%(Lease Time이 3시간 이라면 1시간 30분 후에)가 지나면 클라이언트는 서버에게 다시 DHCP Request를 보내 임대기간 연장을 요청한다. 이 때 클라이언트는 이미 자신의 IP주소를 가지고 있고 서버의 IP를 알고 있기 때문에 Unicast로 패킷을 보낸다. DHCP Request를 받은 서버는 클라이언트에게 임대기간을 포함한 네트워크 설정 정보를 다시 Unicast로 보내준다.


[그림3. (참조용) DHCP 메시지 포맷 - 출처: 정보통신기술용어해설]

- 옵션필드는 서브넷마스크, Default Gateway(라우터), DNS, Lease Time 등 추가정보를 전달하기 위해 응답(OFFER, ACK) 메시지에만 사용되며, Magic cookie+Tag(Code)+Length+Data로 이루어진다. Option code 53번은 DISCOVER, OFFER, ..., NACK, RELEASE 등 DHCP 메시지에 특화되어있고, 0번은 패딩, 255번은 End Of List를 의미한다. 그밖에 1: 서브넷마스크, 3: 라우터, 6: DNS, 51: IP Lease Time, 54: DHCP Server Identifier 등이 있다.



2. DHCP Relay Agent

  DHCP에서 클라이언트는 서버를 찾기 위해 Broadcast를 사용한다. 다시 말해, 서버가 클라이언트와 같은 이더넷 세그먼트(LAN) 상에 위치해야지만 DHCP 동작이 가능하다는 것이다. 하지만 DHCP 서버를 각 서브넷마다 위치 시키려면 무수히 많은 서버가 필요할 것이다. 예를 들면 아파트 단위마다 DHCP 서버가 한 대씩 있어야 한다. 이를 해결하기 위해 등장한 게 'DHCP Relay Agent'이다.

  각 세그먼트마다 서버를 위치시키는 대신에 여러 서브넷이 집중되는 라우터에 DHCP Relay Agent를 설정하면 서로 다른 IP대역끼리도 DHCP 패킷을 주고받을 수 있게 된다. DHCP Relay Agent가 설정된 라우터가 Host(클라이언트)로부터 DHCP 패킷을 받으면 라우터는 Broadcast 패킷을 Unicast로 변환하여 DHCP 서버에게 전달한다.(DHCP Relay Agent에는 서버의 IP주소가 설정되어 있다.) 반대로 DHCP Relay Agent가 서버로부터 Unicast로 받은 응답을 클라이언트에게 전송할 때는 아직 단말에 IP주소가 설정되어 있지 않기 때문에 Broadcast를 사용하여 단말 MAC을 기준으로 패킷을 보내게 된다.



3. NAT(Network Address Translation)

  NAT는 사설IP 주소를 공인IP로 변환해주는 기술로, TCP와 UDP의 포트번호도 변환해주는 NAPT(Network Address PortS Translation)과 함께 사용함으로써 하나의 공인IP 주소만 가지고도 여러 대의 Host들이 통신할 수 있게 되었다. NAT를 사용하면 공인IP 사용을 획기적으로 줄일 수는 있지만 IP주소 고갈의 근본적인 해결책은 아니라고 다룬 적이 있다.


* 참고: NAT의 기술과 IP부족 현상에 대한 지난 포스팅 - [TCP/IP] 4. 인터넷 계층의 모든 것(2): IP주소, CIDR/VLSM, NAT


  DHCP가 우리 일상에서 늘 쓰이는 것처럼 NAT 역시 항상 우리가 접하고 있는 기술 중 하나이다. Windows 시작메뉴에서 cmd를 치고 들어가서 도스창에 "ipconfig"를 치면 내 네트워크 설정내역을 볼 수 있다.


[그림4. Windows 시작메뉴로 cmd 들어가기]


  지금 나는 KT 유선인터넷에 사설 무선AP(공유기)를 물려 무선랜을 사용중인데, 아래와 같이 C클래스의 사설IP 대역인 192.168.0.0에 속하는 IP주소(192.168.0.6/24)을 NAT로 할당받은 듯 하다. (Default Gateway: 192.168.0.1/24)


[그림5. NAT를 통해 할당받은 사설IP 주소]



  오늘은 TCP/IP 섹션에서 마지막으로 DHCP에 대해 다뤄보았다. 아직은 갈길이 멀지만 TCP/IP에 대해 공부하는 동안 한층 성장하지 않았나 싶다. 내일부터는 다음 섹션인 스위칭에 대해 공부할 예정이다. 화이팅!!



[지난 글 보기]

[TCP/IP] 1. 네트워크 접근 계층, 그리고 데이터링크층과 MTU

[TCP/IP] 2. 가장 널리 보급된 데이터링크인 이더넷, 1000BASE-T의 의미는?

[TCP/IP] 3. 인터넷 계층의 모든 것(1): IP프로토콜, IP패킷, IP헤더의 구조

[TCP/IP] 4. 인터넷 계층의 모든 것(2): IP주소, CIDR/VLSM, NAT

[TCP/IP] 5. TCP/UDP 개념알기: TCP헤더, UDP헤더, 포트번호

[TCP/IP] 6. TCP/UDP 추가개념: 3-Way Handshake, TFTP, 소켓

[TCP/IP] 7. TCP/IP의 기능(1): ICMP, ARP, DNS

댓글