티스토리 뷰

   TCP/IP Protocol Suite의 계층구조는 앞서 얘기한 것처럼 OSI 7계층 모델과는 정확하게 맞아 떨어지지 않는다. OSI는 프로토콜의 기능에, TCP/IP는 이를 어떻게 프로그래밍할지(적용시킬지)에 집중했기 때문이다. 예를 들면 OSI에서는 세션/표현/응용과 같이 역할별로 계층을 나누었지만 TCP/IP에서는 대화제어/동기화/암호화 등이 하나의 Application으로 동작해 불필요한 개발시간을 줄임으로써 효율이 높아진다.

 

  TCP/IP의 인터넷 계층에는 Host 주소를 지정하는 IP 프로토콜, 주소를 변환하는 ARP/RARP, 신뢰성 없는 IP를 대신하여 네트워크의 상태를 알리는 ICMP, 멀티캐스트 프로토콜인 IGMP, 라우팅 프로토콜인 BGP/OSPF 등이 있다. 전송계층에는 상대가 있어야지만 데이터를 보내는 TCP와 상대가 있든 없든 데이터를 보내는 Connection-less형의 UDP가 있다. 응용층에는 앞서 배운 파일전송을 위한 FTP와 가상터미널 서비스를 제공하는 TELNET, 도메인(tistory.com)을 IP로 변환시켜 편리하게 사이트에 접속하게 해주는 DNS, 동적으로 IP주소를 할당해주는 DHCP 등이 있다.

 

  이 중 듣기에 익숙한 ARP/RARP, ICMP, DNS, DHCP에 대해 알아보도록 하자. (IGMP, BGP, OSPF 등은 뒤에서 다룰 예정이다.)

 

 

1. ARP, Reverse ARP, Proxy ARP, Gratuitous ARP

  먼저 ARP(Address Resolution Protocol)는 같은 네트워크 상에서 목적지 IP주소와 매핑된 하위계층 프로토콜의 MAC주소를 알아내기 위해 사용된다. 즉, 논리주소를 물리주소로 변환해주는 프로토콜인데, RARP(Reverse ARP)는 반대로 물리주소를 논리주소로 변환시켜준다.

 

[그림1. 동일 네트워크 상에서의 ARP Request(요청)]

 

  * ARP는 IPv4에서만 쓰이고 IPv6에서는 쓰이지 않는다. ARP는 Broadcast를 사용하기 때문에 ARP를 지원하지 않는 기기에도 패킷이 도달한다. IPv6에서는 ICMP Neighbor Discovery(인접 탐색 메시지)를 통해 MAC주소를 알아낸다.

 

[그림2. 동일 네트워크 상에서의 ARP Reply(응답)]

 

  이렇게 ARP를 통해 얻어진 MAC 주소는 매번 패킷을 보낼 때마다 ARP 요청(심지어 Broadcast임)을 보낼 필요가 없도록 일정 시간동안 캐시 테이블에 보관된다. 또 목적지 IP가 동일 네트워크 상에 없는 경우에는 Next hop 라우터(게이트웨이)의 MAC 주소를 ARP를 통해 알아낸다.(←게이트웨이 IP는 알고 있을 때) 만일 ARP가 없었더라면 동일 네트워크 상에서 여러 Host를 구분할 수 없기 때문에(누가 그 IP를 가졌는지 모르니까~) ARP Request하는 시점과 동일하게 네트워크 상에 모든 Host에게 Broadcast를 보내야 할 것이다.

  이와는 반대로 ARP 요청을 받은 Host나 라우터도 마찬가지로 ARP 캐시 테이블에 MAC을 등록한다. 그리고 이를 기반으로 "1.1.1.1"에게 바로(Unicast로) 응답 패킷을 전송할 수 있다.

 

  RARP(Reverse ARP)는 ARP와 반대로 MAC주소로 IP주소를 알아낸다. 클라이언트가 Broadcast로 본인 MAC을 뿌리면서 IP를 알려달라고 하면 서버가 그가 사용할 IP주소를 알려준다. DHCP와 유사하기는 하지만, 클라이언트(디스크가 없는 시스템)의 부팅 시 IP가 저장되어 있지 않기 때문에 서버(원격지)로부터 지정된 IP를 받아오는 것이다. (RARP 서버가 뻗으면 클라이언트가 지속적으로 Broadcast를 보내기 때문에 예비 서버가 필요하다.)

 

  Proxy ARP는 일반적인 ARP 패킷이 라우터에서 차단되는 것과 다르게 ARP 패킷을 인접한 세그먼트로 보낼 수 있다. 게이트웨이가 설정돼있지 않은 어떤 Host가 라우터를 기점으로 반대편에 위치한 IP주소에 대해 ARP 요청을 하면, 라우터는 자신의 MAC 주소로 응답을 하게 된다. (라우터 관점에서는 ARP 요청을 받았을 때 해당 IP 네트워크가 자신의 라우팅 테이블에 있으면 자신의 MAC을 알려준다.)

 

  GARP(Gratuitous ARP)란 자신의 IP주소를 목적지로 하여 ARP 요청(송수신지 IP주소가 동일)을 보내는 ARP로, 다른 누군가의 MAC주소를 알기 위한 게 아니다. 주로 같은 네트워크 상에서 IP주소가 중복되는지 확인(자기 IP에 대해 요청했는데 응답이 있다면 중복이니까~)하고, 또 MAC주소가 변경된 Host가 GARP 패킷을 보내면 Broadcast 도메인 상에 있는 Host들은 ARP 캐시 테이블을 갱신하게 된다.

  * Gratuitous의 사전적 의미: "불필요한, 쓸데없는"

 

 

2. ICMP(Internet Control Message Protocol)

  ICMP는 인터넷 환경에서 오류처리를 지원하며, IP패킷의 데이터 부분에 캡슐화되어 목적지에 전달된다. ICMP 헤더의 위치를 IP패킷에 함께 표시하면 아래와 같다. ICMP 헤더의 Type 필드는 메시지의 종류를 나타내며 Code 필드는 메시지에 대한 더 자세한 정보를 알려준다.

 

[그림3. IP패킷에서 ICMP 헤더의 위치]

 

  * IP패킷의 데이터 부분에는 다음 상위계층(전송층) 헤더와 실제 데이터가 캡슐화 되어있다. ICMP 헤더 역시 IP패킷의 데이터에 속하지만 전송층이 아닌 인터넷 계층의 역할을 한다.

  * IP헤더의 Protocol(8-bit) 필드 값으로 다음 상위계층 프로토콜이 무엇인지 알 수 있다. 즉, 패킷의 데이터 부분이 어떤 프로토콜인지를 나타내는데 ICMP는 프로토콜 번호가 1이다.

  * 참고: IP헤더와 다음 상위계층 프로토콜 간의 관계 알아보기 - [TCP/IP] 3. 인터넷 계층의 모든 것(1): IP프로토콜, IP패킷, IP헤더의 구조

 

[그림4. ICMP 메시지의 종류와 Destination Unreachable 메시지 코드]

 

  라우터가 IP패킷을 목적지로 보낼 수 없는 경우 송신host에게 ICMP Destination Unreachable Message(type: 3)를 보내면, 송신host는 이를 바탕으로 ICMP 오류를 파악하고 정정한다. 이때 실제로 자주 발생하는 오류코드는 "0: Network unreachable error"과 "1: Host unreachable error"다. 코드 0번은 말 그대로 네트웍에 도달할 수 없다, 즉 해당 IP주소에 대한 경로정보를 알 수 없다는 뜻이고 코드 1번은 해당 Host(목적지)가 네트웍에 연결되어 있지 않다는 것을 의미한다.

 

  Type 0과 8은 통신하고 싶은 상대에게 IP패킷이 도달하는지 여부를 알기 위해 사용한다. Type 8번으로 에코요청을 했을 때 상대방으로부터 Type 0번으로 에코응답이 오면 IP패킷이 도달하는 것이다. 흔히들 네트워크를 구성하고 Ping(Packet InterNetwork Grouper) Command를 통해 정상여부를 확인한다.

  Type 5 ICMP Redirect 메시지로 송신host가 최적이 아닌 경로를 사용하고 있을 때 라우터가 이를 송신측에 알리기 위해 사용된다. 이 메시지에는 최적경로에 대한 정보까지 포함된다. Redirect 메시지를 받은 송신host는 경로 제어표에 이 경로를 추가하고 다음 패킷부터 새로이 알게 된 경로로 보내게 된다.

  Type 11 Time exceeded Message로 IP패킷의 TTL(Time To Live) 필드가 0이 될 때 라우터가 Type 11과 Code 0의 메시지를 송신측에 반환하여 패킷이 파기되었음을 알린다.

  * TTL: 패킷이 라우터를 하나 거칠 때마다 1씩 줄어들다가 0이 되면 데이터그램이 파기된다.

 

  그 밖에도 혼잡억제, 라우터 탐색, Host의 Subnet Mask 조사 등을 위해 사용하는 Type 4, 9, 10, 17, 18 메시지가 있다.

 

  IPv4에서의 ICMP는 부수적인 역할을 하기 때문에 ICMP 없이도 IP 통신이 가능하다. 하지만 IPv6에서는 ICMPv6가 없으면 IPv6 통신이 불가능한데, IPv6에서는 위에서 언급한 것처럼 ARP 대신 ICMP Neighbor Discovery(인접 탐색 메시지)를 사용해 IP 주소로부터 MAC 주소를 조사하기 때문이다. 이 메시지는 IPv4의 ARP 기능과 ICMPv4의 Redirect(Type 5) 등의 기능을 조합한 것으로 IP 주소를 자동으로 설정하는 기능도 제공한다.

  * ICMPv6에는 DNS 서버를 알리는 기능이 없기 때문에 실제로는 DHCPv6와 조합하여 사용해야 한다.

 

 

3. DNS(Domain Name System)

  TCP/IP에서는 네트웍에 연결된 각 host를 식별하기 위해 고유한 IP주소를 설정하고 이를 바탕으로 통신한다. 하지만 특정 사이트에 접근하기 위해 IP주소를 외워 사용하는 것은 어렵기 때문에 host명과 IP주소의 대응관계를 관리하는 DNS가 등장하였다. DNS에서는 사용자가 host명(Domain Name)을 입력하면 host명과 IP주소가 매핑된 데이터베이스를 조회(Query)하여 접근하고자 하는 상대의 IP주소를 얻을 수 있다.

 

[그림5. Windows에서의 NSLOOKUP 명령어 사용]

 

  그림5에서 168.126.63.1은 KT의 DNS 서버 주소이고, tistory.com의 IP주소는 61.251.98.169이다. (권한 없는 응답은 등록된 DNS 서버가 다른 DNS 서버에게 물어보고 가져온 결과를 뜻한다고 함)

 

 

[그림6. 도메인명의 계층적 구조]

 

  DNS의 동작과정을 알기에 앞서 도메인명의 계층적인 구조를 알아야 하는데, 그림6과 같이 루트도메인을 정점으로 해 Top 레벨, 제2레벨, 제3레벨 도메인이 계층화 되어있다. 각 도메인에서는 자신의 바로 하위레벨 도메인 정보(IP주소)를 관리/유지한다. 예를 들면 .com Domain을 관리하는 Top 레벨 도메인 네임서버에서는 tistory.com과 naver.com 등의 도메인 정보를 관리한다. 또 tistory.com을 관리하는 제2레벨 네임서버에서는 ddooooki.tistory.com이라는 호스트(나ㅋㅋ)에 대한 정보를 관리한다. 이런 방식을 통해 도메인의 계층적/수평적 관리가 가능하다.

 

  * 예전에는 ASCII(American Standard Code for Information Interchange, 아스키) 코드에 해당하는 영문, 숫자, 기호(!, @, # 등)만 도메인명으로 사용할 수 있었지만 현재는 한글과 같은 다국어를 지원한다.

  * tistory.com(2단계): 기관명.generic Top Level Domain(.com, .net, .org, .edu 등 일반도메인) / ddooooki.tistory.com(3단계): 호스트명.기관명.gTLD

  * google.co.kr(3단계): 기관명.기관종류.country code Top Level Domain(.kr, .jp 등 국가도메인) / mail.google.co.kr(4단계): 호스트명.기관명.기관종류.ccTLD

  * 루트네임서버는 전세계에 13대(미국 10, 유럽 2, 일본 1) 뿐이라고 한다. 하지만 112로 신고하면 지역에서 접수되는 것처럼 애니캐스트(Anycast)를 활용해 각국에 설치된 서버가 루트네임서버를 대신하여 패킷을 받아 응답한다고 한다. 즉, 같은 Anycast IP를 가진 각국의 여러 특정한 서버들 중 제일 괜찮은(가까운) 서버를 택해 패킷을 보내는 개념이다. 애니캐스트를 이용한 루트 DNS 미러서버는 2002년 DDoS 공격 이후 우리나라를 포함하여 전세계에 67대 도입(2003년 기준)되었다고 한다.

 

[그림7. DNS의 동작과정]

 

  그림7에서 DNS의 동작과정에 대해 살펴보자. 뚜깅이(리졸버)가 ddooooki.tistory.com에 접속하기 위해서는 IP주소를 알아야 한다. 아래는 뚜깅이가 내 블로그의 IP주소를 알아내는 과정이다.

 

① 로컬 DNS 서버인 KT DNS 서버(168.126.63.1)에 ddooooki.tistory.com의 IP주소 조회를 의뢰한다.

② KT DNS 서버는 ddooooki.tistory.com의 IP주소를 모르기 때문에 루트네임서버에게 다시 의뢰한다.

③ 루트네임서버는 Top 레벨 도메인(.com)의 네임서버 IP주소를 반환한다.

④ KT DNS 서버는 다시 .com 도메인의 네임서버에게 ddooooki.tistory.com의 IP주소를 의뢰하면,

   .com의 DNS 서버는 자신의 하위계층(tistory.com)의 네임서버 IP주소를 알기 때문에 tistory.com의 DNS 서버 IP주소를 반환한다.

⑤ KT DNS 서버는 마지막으로 tistory.com 도메인의 네임서버에게 다시 의뢰하여, 결국 ddooooki.tistory.com의 IP주소를 받아낸다.

⑥ KT DNS 서버는 뚜깅이에게 이제서야 ddooooki.tistory.com의 IP주소를 알려준다.

⑦ 뚜깅이가 드디어 ddooooki.tistory.com의 IP주소로 직접 접근한다.

 

  뚜깅이는 이렇게 힘들 게 내 블로그에 들어올 수 있었다고 한다.. (응?)

 

 

  오늘은 TCP/IP의 인터넷계층에서 자주 사용되는 프로토콜인 ICMP와 ARP, 그리고 응용층에서 쓰이는 DNS에 대해 알아보았다. 아주 기본적이면서 중요한 개념들이므로 꼭 숙지하도록 하자(나한테 하는 말..ㅋㅎㅎ...)!! 다음 시간에는 응용층에서의 DHCP의 기능과 그 동작과정에 대해 학습하겠슴미다~~ (DHCP까지 하기엔 너무 빡신 관계로..ㅠㅠ)



[지난 글 보기]

[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, 소켓


댓글