티스토리 뷰

Transport Layer (전송계층)

  • 전송계층은 사용자 데이터를 상대 호스트의 상대 프로세스까지 전댈해주는 역활을 한다.
  • 프로세스는 여러개가 동시에 실행될 수 있는데 Web 서버의 프로세스 <- -> 클라이언트의 프로세스가 데이터를 주고 받기 위한 책임을 진다.
  • 여러 프로세스 중 원하는 프로세스를 특정하기 위해서는 식별자를 통해 프로세스를 구별해야 하는데 이를 위해 사용하는 것이 Port Number (포트 번호)이다.
Port Number 포트번호
실제 이름대로 항구의 번호를 의미한다. 원하는 도착지 (ex. 부산항)까지는 잘 왔으니 자신이 전달해줄 선착장을 구별해주는 용도이다.

Port Number (Transport Layer 주소)

  • Port 번호는 16bit로 2^16개가 존재한다. (65536개)
  • 0 ~ 1023번까지는 Well-Known port라고 부르며, 잘 알려진 application의 Server에 할당된다.
    예를들어 80포트는 HTTP server, 443 포트는 HTTPS server, 53포트는 DNS에 할당이 된다.
  • 1024 ~ 49151번은 Registered Port이며, 이 부분은 IANA에서 관리한다. 기관에서 요청하는 경우 정해진 절차에 따라 할당해주고 이를 알리게 된다.
    예를들어 특정 게임 업체의 port번호를 1492번으로 할당할 수 있다.
    이 구간은 일반 클라이언트가 자유롭게 사용할 수 없는 구간이지만 정확하게 지켜지고 있지는 않은 상황이다.
  • 제한없이 Client가 마음대로 사용할 수 있는 port번호의 범위는 41952 ~ 65535이며 ephemeral port (dynamic port) 라고 한다.

URL (Application Layer 주소)

  • 인터넷에서 무엇이든지 서비스를 받고자 하면 Web 주소를 적어야 한다. 이 Web 주소를 URL (Universal Resource Locator)라고 한다. 7계층의 응용 계층의 애플리케이션에 서비스를 요청하기 위해 사용자가 직접 주소를 명시하는 것이 URL이다.
  • URL을 기억하기도 쉽고 보기도 좋은 이름으로 등록해 놓는데 이것이 도메인 명(Domain name)이다.
    예를들어 EC2의 서버를 올리면 IP주소를 할당 받는데 IP주소를 URL에 입력하여 바로 접속할 수도 있지만 원하는 Domain을 구입/등록하여 해당 도메인 명으로 접속할 수 있다.

계층 간 주소 연결 : DNS

  • 응용 계층에서 필요로 하는 주소는 URL(도메인 명)이고 이는 우리가 직접 제공한다. (www.naver.com 을 입력하므로서)

Q. 그렇다면 해당 정보로 네트워크 계층과 전송 계층에서 어떻게 사용할 수 있을까?

A. 3, 4계층은 IP주소와 Port번호가 필요하다. 이때 Port 번호는 서비스의 종류에 따라 Well-Konow 포트번호를 통해 미리 정해지므로 어려움 없이 얻을 수 있다.

하지만 IP주소는 그렇지 않는데 이를 위해서 URL을 통해서 IP 주소를 알려주는 시스템이 필요하게 된다. 이것이 DNS (Domain Name System) 이다.

 

1차적으로 URL이나 호스트 이름은 사용자의 컴퓨터가 먼저 운영체제가 관리하는 hosts파일에서 IP주소를 검색하여 사용한다. 해당 hosts 파일에 존재하지 않는 URL이나 호스트 이름의 경우 DNS를 통해 IP주소로 변환된다.

 

DNS는 기본적으로 IP 주소 <->  URL/host name 쌍의 매핑 테이블을 유지/관리/제공 하는 시스템이다. 이러한 매핑 테이블은 인터넷 전번에 계층적으로 분산되어 저장되어 있다. DNS 덕분에 사용자가 수많은 IP 주소를 외우지 않고 서비스에 접속할 수 있는 것.

DNS 구조 - Domain name space

역-트리 형태의 최대 128 level의 계층적인 구조이다.

 

Root를 제외한 모든 Level에는 고유의 이름(label)이 있고, Domain name은 subtree의 최상위 노드의 label부터 root까지 모든 노드의 label을 포함하는 이름으로 결정된다. 각 노드의 label은 점으로 구분된다.

 

예를들어 edu, fdha.edu, atc.fhda.edu, chal.atc.fdha.edu 모두 서브트리를 나타내고 Domain의 이름인 것이다. 참고로 www.naver.com의 경우는 트리 구조상으론 com의 자식노드 naver의 자식노드 www가 있는 구조인 것이다.

 

com, kr, net, gov 등 Root level 바로 아래 노드의 도메인을 TLD (Top Level Domain)이라고 하고 TLD는 gTLD(generic)와 ccTLD(country-code)로 나뉜다.

Local DNS name server

DNS가 트리 구조의 계층 구조를 이루고 있다고 했는데 Local DNS name server는 이 계층 구조에 속하지 않는 DNS 서버이다.

Host가 DNS 쿼리를 만들면 일단 쿼리는 먼저 Local DNS 서버로 전달이 된다. 대부분 99%의 DNS는 이곳에 존재하여 바로 IP주소를 돌려받게 된다.

하지만 DNS는 정보의 관리를 위해 일정 시간(TTL)이 지나면 해당 정보를 지우게 되므로 이럴경우 Local 서버는 root DNS server & TLD DNS server & authoritative DNS server와 통신을 해서 IP 주소를 가져오게 된다.

 

과정

  1. Local 서버에 요청이 왔을 때 해당 쿼리에 대한 정보가 전혀 없다면 먼저 root 서버에 쿼리를 보낸다.
  2. root에서는 해당 쿼리의 도메인을 확인해서 맞는 TLD 서버의 정보를 응답한다.
  3. Local 서버에서는 다시 그 TLD 서버로 요청을 보낸다.
  4. TLD서버에서 해당 도메인을 관리하는 authoritative DNS 서버 정보를 응답한다.
  5. Local에서 해당 서버로 요청을 보내고 IP 주소를 응답받고 요청이 왔던 host에게 IP주소를 응답해준다.

이렇게 root, TLD, authoritative 서버와 통신하여 IP주소를 알아내는 과정을 Iterative query라고 한다.

위 과정을 통해 통신됐던 정보들은 각 서버에 캐시메모리로 저장된다.

DNS resource record

DNS가 분산, 관리, 저장하는 데이터를 resource record라하고 rr이라고도 한다.

// RR format : (name, value, type, ttl)
  • type에 따라 name, value의 역활이 달라진다.

type = A (가장 흔한 경우, ip, domain 쌍)

  • name : host name
  • value : ip address

type = NS

  • name : domain
  • value : authoritative name server

type = CNAME

  • cname == canonical name (실제 이름)
  • name : alias name (별칭)
  • value : canonical name (진짜 이름)
CNAME의 실제 사용

Q. CNAME을 어디에 사용할까?

A. www.naver.com에 접속하기 위해서는 "www.naver.com", "naver.com"로 접속하면 된다. 이때 두개의 도메인을 A레코드로서 하나씩 IP주소에 매핑했다면 IP주소가 변경되었을 때 두개의 레코드를 모두 변경해줘야 한다.
하지만 "www.naver.com"만 A 레코드로 등록하고 "naver.com"을 CNAME 레코드로서 "www.naver.com"에 등록해 놓는다면 IP가 변경되더라도 "www.naver.com"의 IP주소만 변경해주면 된다.

DNS protocol, message

Message header

  • identification
    • 쿼리를 위한 16bit ID
    • 같은 ID를 사용한 쿼리에 응답한다
  • flags
    • query / reply
    • recursion desired
    • recursion available
    • reply authoritative 여부 (Local DNS server 응답 / root server 응답 구별)

DNS 패킷

해당 패킷은 DNS 응답 패킷이다.

  • UDP로 DNS 통신이 이뤄지는 것을 알 수 있다.
  • ID와 FLAG가 명시되어 있고, 그외의 정보도 같이 있는 것을 볼 수 있다.
  • Query로 다시 한번더 명시해주고 Answer를 알려주고 있는 것이다.
  • Type은 A로 왔고 응답은 CNAME을 통해 canonical 이름을 얻고 이것으로 A타입 요청에 응답해주고 있다.
    • CNAME을 보면 katalk.kakao.com은 별칭이고 해당 canonical (진짜) name은 katalk.gl.kakao.com이라고 알려주고 있다.
    • Type A의 경우 Domain에 해당하는 IP 주소를 알려주는데 katalk.gl.kakao.com 도메인을 통해 IP Address를 구해서 응답해주고 있다.
      (도메인 명:  katalk.gl.kakao.com <-> IP 주소 : 211.249.219.27)

 

 

반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday