-
메시지를 주고받고자 하는 대상을 식별하는 방법
네트워크의 어떤 호스트를 특정하기 위해 IP 주소를 사용한다. 하지만 IP 주소는 숫자의 조합이라 기억하기도 어렵고, 언제든 바뀔 수 있다는 문제가 있다. 그래서 도메인 네임(domain name)이 사용된다. 도메인 네임은 IP 주소와 대응되는 문자열이다.
수많은 호스트의 도메인 네임과 IP 주소를 관리할 방법이 필요한데, 네임 서버(name server)가 바로 그 역할을 수행한다. 클라이언트가 접속하려는 호스트의 도메인 네임을 네임 서버에 물어보면 네임 서버는 그에 해당하는 IP 주소를 알려주는 것이다.
네임 서버는 계층적 구조를 가지고 있다. 이는 도메인 네임이 계층적인 형태를 띠고 있기 때문인데, 크게 네 가지로 나눠볼 수 있다.
- 로컬 네임 서버
- 루트 네임 서버
- TLD(최상위 도메인) 네임 서버
- 책임 네임 서버
로컬 네임 서버는 클라이언트가 가장 먼저 찾게 되는 네임 서버다. 보통 ISP에서 로컬 네임 서버의 주소를 할당해 주는데, 공개 DNS 서버를 이용할 수도 있다. 클라이언트가 요청한 도메임 네임에 대응되는 IP 주소를 알고 있다면 해당 IP 주소를 알려주고, 모른다면 루트 네임 서버(root name server)에게 요청한다. 루트 네임 서버는 루트 도메인을 관장하며, 클라이언트의 요청에 대해 TLD 네임 서버의 IP 주소를 반환할 수 있다. TLD 네임 서버는 TLD를 관리하며, 요청에 대해 TLD의 하위 도메인 네임을 관리하는 네임 서버 주소를 반환할 수 있다. 하위 도메인 네임을 관리하는 네임 서버는 또 그보다 하위 도메인 네임을 관리하는 네임 서버 주소를 반환할 수 있다.
송수신하고자 하는 자원을 식별하는 방법
자원(resource)은 네트워크상에서 메시지를 통해 주고받는 HTML, 이미지, 동영상과 같은 대상이다. 특히 현대 인터넷 환경 대부분의 통신은 HTTP 기반이므로, 'HTTP 요청 메시지의 대상'이라고도 한다. 네트워크 상에서 자원을 식별하는 정보를 URI(Uniform Resource Identifier)라 한다. 이는 위치 기반의 URL과 이름 기반의 URN으로 나뉘는데, 일반적으로는 URL이 많이 쓰인다.
- scheme: 자원에 접근하는 방법을 의미한다. 일반적으로 사용할 프로토콜이 명시된다(http, https...)
- authority: 호스트를 특정할 수 있는 정보, 즉 IP 주소 또는 도메인 네임이 명시된다
- path: 자원이 위치한 경로가 명시된다
- query: 필요한 특정 자원을 서버로 요청할 때 사용하는 정보가 명시된다
- fragment: HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용된다
HTTP(Hypertext Transfer Protocol)
HTTP는 응용 계층에서 정보를 주고받는 데 사용되는 대표적인 프로토콜이다. HTTP의 네 가지 주요 특성은 아래와 같다
- 요청-응답 기반 프로토콜
- 미디어 독릭접 프로토콜
- 스테이스리스 프로토콜
- 지속 연결 프로토콜
HTTP는 '클라이언트와 서버' 구조 기반의 요청, 응답 프로토콜이다. 클라이언트와 서버가 서로 요청 메시지와 응답 메시지를 주고받는 구조로 동작한다. 이때 주고받는 자원의 종류를 미디어 타입(또는 MIME 타입)이라 하는데, 여기에 특별한 제한을 두지 않아 미디어 타입과 독립적으로 동작이 가능하다. HTTP는 상태를 유지하지 않기 때문에 클라이언트의 모든 요청은 독립적인 것으로 간주된다. 이는 특정 클라이언트가 특정 서버에 종속되는 것을 방지하기 위한 것으로, 서버에 문제가 생겼을 때 쉽게 추가할 수 있고(확장성), 또는 쉽게 다른 서버로 대체가 가능하다.(견고성) 초기의 HTTP는 매번 요청-응답이 일어날 때마다 TCP 연결을 해야 했는데, 이런 방식을 지속 연결 프로토콜이라 한다. 이제는 발전을 거듭해 HTTP 1.1 버전 이상부터는 지속 연결(persistent connection)을 사용한다. 한 번 TCP 연결을 수립한 후 여러 요청-응답을 주고받을 수 있다.
HTTP 메시지는 아래 그림과 같이 구성되어있다.
start-line은 요청 메시지의 경우 '요청 라인'이 되고, 응답 메시지라면 '상태 라인'이 된다.
요청 라인의 형식은 메서드 (공백) 요청 대상 (공백) HTTP 버전 (줄 바꿈)으로 구성된다. 위 예시로 보면 POST 메서드로 /(루트 경로)에 HTTP 1.1 버전의 요청을 보낸다. 상태 라인은 HTTP 버전 (공백) 상태 코드 (공백) 이유 구문 (줄 바꿈)의 형식을 띤다. 위 예제 기준으로는 HTTP 1.1 버전으로 403 에러 코드가 난 상태이며, 이유(Forbidden)가 명시되어 있다. start-line 아래로 HTTP 통신에 필요한 부가 정보들이 들어가며, 콜론(:)을 기준으로 헤더 이름과 헤더 값으로 구성되는 헤더(Header)들이 들어간다. HTTP 요청 또는 응답 메시지에서 본문이 필요할 경우에는 더 아래쪽의 body에 명시된다.
과제
1. www.example.com에서 루트 도메인은 com아 아니라 생략된 .(점)이다. com은 최상위 도메인에 해당한다.
2. HTTP 상태 코드 중 300번대는 리다이렉션 상태 코드로, 요청한 자원의 경로가 변경되어 추가적인 조치가 필요한 상태를 나타낸다.
'네트워크' 카테고리의 다른 글
전송 계층 (0) 2024.08.11 네트워크 계층 (6) 2024.07.23 물리 계층과 데이터 링크 계층 (0) 2024.07.10 컴퓨터 네트워크 시작하기 (0) 2024.07.02