[네트워크] 웹과 네트워크 기본
Reference
그림으로 배우는 Http & Network Basic, 영진닷컴, 우에노 센 지음
📌 웹은 HTTP로 통신한다
- 웹 브라우저는 주소 입력란에 지정된 URL에 의지해서 웹 서버로부터 리소스(resource)라고 불리는 파일 등의 정보를 얻고 있다.
- 클라이언트(client): 서버에 의뢰를 하는 웹 브라우저 등, 요청을 하는 쪽
- 서버(server): 클라이언트의 요청에 맞는 응답을 내보내주는 쪽
- HTTP(HyperText Transfer Protocol): 클라이언트에서 서버까지 일련의 흐름을 결정
- HypterText: 참조(URL, HyperLink)를 통해 한 문서에서 다른 문서로 접근할 수 있는 텍스트
- Protocol: 규약(약속), 메시지를 주고 받는 양식과 규칙의 체계. 네트워크 기기가 상호간 통신하기 위해서는 서로 같은 방법으로 통신해야 하고, 이런 모든 요소에 필요한 규칙.
- 즉 웹은 HTTP라 불리는 규약을 통해 통신한다.
📌 HTTP는 어떻게 탄생했나?
- WWW(World Wide Web, W3): 세계 각지에 있는 연구자들의 지식 공유를 지원하기 위해서 제안되고 탄생했다.
- W3는 여러 문서를 상호간 관련 짓는 하이퍼텍스트(HyperText)에 의해 서로 참조할 수 있도록 고안되었다.
- 문서 기술 언어로는 HTML(HyperText Markup Language), 문서 전송 프로토콜로는 HTTP, 문서의 주소를 지정하는 방법은 URL(Uniform Resource Locator) 총 세가지가 제안되었다.
- 즉 W3는 하이퍼텍스트를 열람할 수 있는 클라이언트 애플리케이션으로 시작하였다. 이것이 현재에는 시스템의 명칭으로 사용되어 흔히 웹(Web)이라 불리고 있다.
HTTP의 역사
- HTTP/0.9: 1990년 처음 등장한 HTTP, 당시 정식 사양서는 아니었고 정식 사양으로 공개 되기 이전이라는 의미로 0.9로 불리고 있다.
- HTTP/1.0: 1996년 정식 사양으로 공개된 버전. RFC1945가 발행되었고 아직까지 많은 서버에서 가동되고 있는 프로토콜 사양
- (RFC1945: HyperText Transfer Protocol, HTTP/1.0)[https://www.ietf.org/rfc/rfc1945.txt]
- HTTP 헤더 개념이 도입됨
- HTTP/1.1: 1997년 공개된 버전. 현재 가장 많이 사용되는 버전으로 RFC2068이 발행되었고, 개정판으로 발행된 RFC2616, RFC7230 ~ 7235 가 존재한다.
- 대부분 HTTP/1.1 을 표준으로 함
- RFC7230 ~ 7235 문서를 보는 것이 좋음
- HTTP/2.0: 2015년 공개된 버전. (차세대 HTTP 버전)
- 기존 HTTP/1.X 버전의 성능 향상에 초점을 맞춘 버전
- 대체 버전이 아닌 HTTP/1.1의 확장 버전
📌 TCP / IP
- HTTP를 이해하기 위해서는 TCP / IP 프로토콜을 이해하고 있어야 한다.
- HTTP는 TCP / IP 프로토콜 중 하나
TCP / IP 의 개념
-
TCP / IP: 인터넷 통신에서 사용되는 프로토콜의 집합으로, TCP와 IP가 결합된 형태로 TCP가 IP 위에서 동작하여 신뢰성 있는 데이터 전송을 보장한다.
- TCP(Transmission Control Protocol): 데이터 전송 제어 프로토콜로 연결 지향형, 신뢰성 있는 데이터 전송을 담당(패킷 전송 완료 여부와 전송 순서 유지)
- 패킷 통신은 데이터를 작은 단위로 나누어 전송하기 때문에 데이터가 유실되거나 섞일 수 있다. 이러한 문제를 해결하는 것이 TCP
- 데이터를 3-웨이 핸드셰이크를 통해 신뢰성 있게 전송하며, 전송 중 데이터가 유실되거나 송신 순서가 바뀌면 재전송 요청(ACK)을 통해 재전송
- 3-웨이 핸드셰이크: 정확한 전송을 보장하기 위한 사전 과정
- Client → Server: TCP SYN, 접속 요청
- Server → Client: TCP SYN ACK, 요청 수락(접속 허가)
- Client → Server: TCP ACK, 접속 허가 확인
- 흐름제어(flow control)를 통해 수신측이 처리할 수 있는 양만큼 데이터를 송신하여 버퍼 오버플로우를 방지
- IP(Internet Protocol): 네트워크 상에서 패킷을 전달하는 역할
- 패킷 전송 완료 여부나 순서를 보증해주지 않음 → 빨리 전송하는 것이 목적
- 인터넷의 기본 통신규약이며, 웹, 이메일, 파일전송 등 인터넷에서 이루어지는 모든 통신에 사용
- TCP(Transmission Control Protocol): 데이터 전송 제어 프로토콜로 연결 지향형, 신뢰성 있는 데이터 전송을 담당(패킷 전송 완료 여부와 전송 순서 유지)
4개의 계층으로 관리되는 TCP / IP
- 총 4개의 계층(Layer)으로 나뉘어 관리되는 이유
- 하나의 사양이 변경되었을 때 전체를 바꾸지 않고, 변경된 계층만 바꾸면 된다. (객체 지향의 단일 책임 원칙(SRP)을 생각하면 됨)
- 계층이 연결되어 있는 부분만 결정되어 있어 내부를 자유롭게 설계할 수 있다.
- 단일 책임 원칙, 각 계층은 자기 자신이 담당하는 부분만 고려하면 된다. → 설계가 편해짐
애플리케이션 계층 (Application Layer)
- 4 계층이라 불리며 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정(유저와 가장 가까운 계층)
- 애플리케이션 실행을 위한 데이터 형식이 작성되는 계층
- 여러 가지의 공통 애플리케이션이 존재
- ex: FTP, DNS, SSH 등
- HTTP(HTTPS) 도 애플리케이션 계층에 포함
트랜스포트 계층 (Transport Layer)
- 애플리케이션 계층에 접속되어 있는 통신 노드 사이의 데이터 흐름을 제공한다. 즉, 통신 노드 간 신뢰성 있는 데이터 전송을 보장하는 계층
- Port 번호를 통해 데이터를 목적지의 애플리케이션에 전달
- 서로 다른 성질을 가진 TCP, UDP 가 대표적으로 존재한다.
- UDP(User Data Protocol): 신뢰성이 보장되지 않는 빠른 데이터 전송이 필요한 경우 사용되는 프로토콜
- TCP와 달리 연결 지향형이 아닌 비연결 지향형이므로 패킷 전송 완료 여부나 순서 보증을 하지 않는다.
- 무상실 데이터(VoIP, 실시간 게임) 전송에 적합하다.
- 헤더 사이즈가 작고 처리 속도가 빠르다.
- IP 주소 + Port 번호로 구성된다.
- UDP(User Data Protocol): 신뢰성이 보장되지 않는 빠른 데이터 전송이 필요한 경우 사용되는 프로토콜
네트워크 계층 (Network Layer, Internet Layer)
- 네트워크 상에서 패킷의 이동을 다루는 계층, 어떠한 경로(절차)를 거쳐 상대방에게 패킷을 보낼지를 결정. (패킷의 네비게이션 역할)
- 패킷(Packet): 전송하는 데이터의 최소 단위
- 패킷을 목적지 까지 전달하는 여러 가지 선택지 중 하나의 선택을 결정하는 역할
- IP, ARP, ICMP 등이 프로토콜로 사용됨
데이터 링크 계층(Data Link Layer, Network Interface Layer)
- 네트워크에 접속하는 하드웨어적인 측면을 다루는 계층
- OS가 하드웨어를 제어하기 때문에 디바이스 드라이버, 네트워크 인터페이스 카드(NIC)를 포함
- 케이블 등과 같은 물리적으로 보이는 부분(여러 전송 매체)도 포함하는 계층
- 하드웨어적 측면은 모두 데이터 링크 계층의 역할
- 즉, 실질적으로 데이터를 전송하는 계층
TCP / IP 통신의 흐름
TCP / IP 통신의 흐름은 계층을 순서대로 거쳐 상대와 통신을 한다.
- 송신측: 애플리케이션 계층에서부터 내려감
- 수신측: 애플리케이션 계층으로 올라감
HTTP 통신의 예제
- 송신측 클라이언트의 애플리케이션 계층에서 어느 웹 페이지를 보고 싶다는 요청(HTTP Message)을 HTTP Request로 지시한다.
- 송신측 트랜스포트 계층에서 애플리케이션 계층에게 받은 요청(HTTP Message)을 통신하기 쉽게 조각내어(패킷) 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달한다.
- 송신측 네트워크 계층에서 수신지 MAC 주소를 추가해 링크 계층에 전달
- 링크 계층에서 네트워크를 통해 송신할 준비를 하고, 수신측 네트워크에 송신
- 수신측 서버는 링크 계층에서 데이터를 받아 순서대로 위 계층에 전달하여 클라이언트가 보낸 HTTP Rquest 내용을 서버의 애플리케이션 계층으로 보낸다.
- 수신측 서버가 송신측의 역할이 되어 위 과정을 통해 수신측이 된 클라이언트 에게 리소스를 전송한다.
- HTTP 통신에서 송신측은 각 계층을 거칠 때마다 헤더와 필요한 데이터가 추가되고(캡슐화), 수신측은 각 계층을 거칠 때마다 해당 계층에서 사용한 헤더를 삭제(역 캡슐화)한다.
- HTTP Message: 서버와 클라이언트 간 데이터가 교환되는 방식.
- 요청: 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지
- 응답: 요청에 대한 서버의 답변
📌 HTTP와 관계가 깊은 프로토콜
IP (Internet Protocol)
- 네트워크 계층에 해당되는 프로토콜
- 인터넷을 활용하는 거의 대부분의 시스템이 이용
- IP의 역할은 각각의 패킷을 상대방에게 전달하는 역할, 상대방에게 패킷을 전달하기 위해 필요한 요소들 중 IP 주소와 MAC(Media Access Control)주소가 중요한 역할을 한다.
- ‘IP’ 와 ‘IP 주소’를 혼동하지 말자
- IP 주소: 각 노드에 부여된 주소, 변경 가능
- MAC 주소: 각 네트워크 카드에 할당된 고유의 주소, 변경 불가능
통신은 ARP를 이용해 MAC 주소에서 한다
- IP 통신은 MAC 주소에 의존해서 통신을 한다.
- 인터넷은 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착하게 한다. 인터넷이 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용해 목적지를 찾고, 이때 사용하는 프로토콜이 ARP(Address Resolution Protocol)
- ARP: 주소를 해결하기 위한 프로토콜, 수신지의 IP 주소를 바탕으로 MAC 주소를 조사
- 목적지까지 중계를 하는 도중 네트워크 기기(컴퓨터, 라우터)는 목적지에 도착하기까지 대략적인 목적지만을 알고 있다. 즉, 어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세히 파악하고 있지는 않다.
- 이 시스템을 라우팅이라 한다.
- 택배 시스템과 비슷하다. 보내는 사람이 주소를 적어 보내면, 허브는 지역 허브 까지, 지역 허브는 배송 집배소 까지, 집배소는 목적지집만 알고 있으면 된다.
TCP (Transmission control Protocol)
-
트랜스포트 계층에 해당하는 프로토콜, 신뢰성 있는 바이트 스트림 서비스를 제공하는 역할
- 바이트 스트림: 큰 데이터를 보내게 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것
- 신뢰성 있는 서비스: 정보가 목적지에 잘 도착했는지 확인(보증)
-
즉, TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대방에게 보내고, 잘 도착했는지 확인하는 역할을 한다.
-
신뢰성 있는 서비스를 제공하기 위해 3-way handshaking 을 사용한다. (SYN, ACK 라는 TCP 플래그를 사용)
- 송신측이 최초 SYN 플래그로 상대에게 접속함과 동시에 패킷을 보냄
- 수신측이 SYN/ACK 플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 보냄
- 송신측이 ACK 플래그를 보내 패킷 교환이 완료되었음을 보냄
- 과정 중 패킷이 손실되거나 통신이 끊어지면 TCP는 다시 같은 순서로 패킷을 재전송한다.
DNS (Domain Name System)
- 애플리케이션 계층에서 도메인 이름과 IP 주소 이름 확인을 제공하는 역할
- 컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있는데 주로 사용자는 IP 주소 대신 이름을 이용해 상대의 컴퓨터를 지정한다.
- 사용자와 반대로 컴퓨터는 IP 주소를 선호한다. 이런 반대되는 문제를 해결하기 위해 DNS가 존재한다.
- DNS는 도메인명을 바탕으로 IP 주소를 조사하고, IP 주소를 바탕으로 도메인명을 조사한다.
HTTP를 이용한 통신 과정
- 클라이언트(송신측)가 DNS 에게 도메인명을 알려주고 IP 주소를 요청한다.
- DNS가 요청된 도메인명의 IP 주소를 클라이언트에게 응답한다.
- HTTP 담당 웹 서버에 보낼 HTTP 메시지를 작성한다. (ex: www.google.com의 리소스를 알려줘)
- TCP가 통신하기 쉽도록 HTTP 메시지를 패킷으로 분해해 상대방에게 패킷을 보낸다.
- IP 가 목적지에 보내기 위해 라우팅 과정을 진행한다.
- 목적지에 패킷들이 도착하고, 목적지의 TCP가 도착한 패킷들을 조립한다. (이때, 일려번호를 보고 패킷을 조립)
- HTTP 가 웹 서버에 대한 요청 내용을 처리한다.
- 처리한 결과를 마찬가지로 위 과정을 반복해 순차적으로 클라이언트에게 반환한다.
📌 URI & URL
URL은 URI의 subset(부분집합)
- URL(Uniform Resource Locator): 웹 브라우저 등에서 웹 페이지를 표시하기 위해 입력하는 주소
- ex: https://www.google.com
- URI(Uniform Resource Identifiers): 리소스를 식별하는 통합 자원 식별자
- Uniform: 통일된 서식을 결정하는 것으로, 여러 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 한다. 또 새로운 스키마 도입을 용이하게 한다.
- 스키마: http:, ftp 등과 같은 네트워크 연결 방법에 이름을 붙인 것
- Resource: 식별 가능한 모든 것, 문서 파일뿐만 아니라 이미지, 서비스등 다른 것과 구별할 수 있는 모든 것을 의미함. (RFC2396)
- Identifier: 식별 가능한 것을 참조하는 오브젝트. (RFC2396)
- Uniform: 통일된 서식을 결정하는 것으로, 여러 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 한다. 또 새로운 스키마 도입을 용이하게 한다.
- URI는 스키마를 나타내는 리소스를 식별하기 위한 식별자
- URI는 리소스를 식별하기 위해 문자열 전반을 나타내고, URL은 리소스의 장소(네트워크 상 위치)를 나타낸다.
URL(URI) 포맷
-
절대 URL(URI): 필요한 정보 전체를 지정하는 완전 수식
http://user:pass@www.google.com:80/dir/index.htm?uid=1#ch1
http://
: 스키마, 리소스를 얻기 위해 사용하는 프로토콜을 지시user:pass
: 자격정보(credential), 서버로부터 리소스를 취득하기 위해 필요한 정보. 유저명과 패스워드를 지정할 수 있고 옵션임.www.google.com
: 서버주소, DNS 이름(www.google.com)이나 192.0.12.34 와 같은 IPv4 주소나 IPv6 주소를 대괄호로 묶어서 지정.80
: 서버 포트, 서버의 접속 대상이 되는 네트워크 포트 번호, 옵션이며 생략 하면 default port가 사용됨.dir/index.htm
: 계층적 파일 패스, 특정 리소스를 식별하기 위해 서버 상의 파일 패스를 지정?uid=1
: 쿼리, 파일 패스로 지정된 리소스에 파라미터를 넘겨주기 위해 사용ch1
: 프래그먼트 식별자, 취득한 리소스에서 서브 리스트를 가리키기 위해서 사용
-
상대 URL(URI): 현재 작성하는 문서를 기준으로 리소스의 경로를 지정
댓글남기기