HTTP
포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따릅니다. 대표적으로는 TCP와 UDP가 있습니다.
TCP로 데이터를 전송하려는 서비스에 UDP클라이언트가 접근하면, 데이터가 교환되지 않습니다. 반대의 경우도 마찬가지 입니다. 그래서 서비스 포트를 표기할 때는 서비스가 사용하는 전송 계층 프로토콜을 같이 표기하기도 합니다.
예를 들어 HTTP의 서비스 포트가 TCP/80이라고 하면, HTTP서비스를 80번 포트에서 TCP를 제공하고 있다는 뜻입니다.
HTTP 요청
HTTP 요청은 서버에게 특정 동작을 요구하는 메시지입니다. 서버는 해당 동작이 실현 가능한지. 클라리언트가 그러한 동작을 요청할 권한이 있는지 등을 검토하고, 적절할 때만 이를 처리합니다.
HTTP 메시지의 구조는 다음과 같고, 헤드의 각 줄은 CRLF으로 구분되며, 첫 줄은 시작 줄, 나머지 줄은 헤더라고 부릅니다. 헤드의 끝은 CRLF한 줄로 나타냅니다.
다시 넘어와서 HTTP요청입니다.
HTTP 요청의 시작 줄은 메소드, 요청 URL, HTTP버전으로 구성됩니다.
메소드는 URL가 가리키는 리로스를 대상으로, 서버가 수행하길 바라는 동작을 나타냅니다. 그리고 요청 URL은 메소드의 대상을, HTTPㅂ전은 클라이언트가 사용하는 HTTP프로토콜의 버전을 나타냅니다.
다음과 같이 POST요청에서는 request body도 넣을 수 있습니다.
HTTP 응답
HTTP응답은 HTTP요청에 대한 결과를 반환하는 메시지입니다. 요청을 수행했는지, 하지 않았는지, 안했다면 이유는 무엇인지와 같은 상태 정보, 그리고 클라이언트에게 전송할 리소스가 응답에 포함됩니다.
위 GET요청에 대한 응답이 다음과 같다고 합시다.
HTTP응답의 첫 줄은 HTTP버전, 상태 코드, 그리고 처리 사유로 구성됩니다
HTTPS
HTTP의 응답과 요청은 평문으로 전달됩니다. 만약 누군가 이를 가로챈다면 중요한 정보가 유출될 수 있습니다. 예를 들어, 로그인할 때 전송한 POST요청에는 대개 이용자의 ID와 비밀번호가 포함됩니다. 공격자가 중간이 이를 가로채면 이용자의 계정이 탈취당할 수 있습니다.
HTTPS(HTTP over Secure Socker layer)는 TLS(Transport Layer Security)프로토콜을 도입하여 이런 문제점을 보완합니다. TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP메시지를 암호화합니다. 공격자가 중간에 메시지를 탈취하더라도 이를 해석하는 것은 불가능하며, 결과적으로 HTTP통신이 도청과 변조로부터 보호됩니다.
다음과 같이 전자가 HTTP, 후자가 HTTPS인데 확연한 차이가 있는 것을 보실 수 있습니다.
OSL 7 Layer별 Protocol과 기능
- OSI 7계층에서 PDU(Process Data Unit)이란 각 계층에서 전송되는 단위입니다.
- 계층 별 PDU
- 1계층 : Bits
- 2계층 : Frames
- 3계층 : Packets
- 4계층 : Segments
- 5 ~ 7계층 : Data
- 각 계층별 프로토콜 기능
- 분할 : 큰 용량의 데이터를 전송하기 위해 데이터를 나누는 기능
- 재조립 : 분할된 데이터를 사용하기 위해 재조립 하는 기능
- 캡슐화 : 각 계층을 거칠 때 마다 각 계층의 헤더가 계층별로 붙으며, 캡슐화가 진행
- 순서 제어 : 전송되는 데이터의 순서를 조율하고 이를 통해 데이터가 중복되거나 유실되는지 체크
- 흐름 제어 : 송신되어 데이터의 양과 전송률을 제한하는 기능
- 오류 제어 : 데이터가 올바르게 수신되었는지 에러 검출 코드를 통해 체크하는 기능
1 계층 - 물리 계층 (Physical Layer)
- 전기적, 기계적 특성을 이용하여 통신 케이블로 전기적 신호를 전송합니다.
- 단지 데이터의 전달의 역할만 수행합니다.
- 1계층 장비 : 케이블, 리피터, 허브
2계층 - 데이터 링크 계층(Data Link Layer)
- 리적인 연결을 통하여 인접한 두 장치의 신뢰성 있는 정보 전송을 담당합니다.
- 2계층 장비 : 브릿지, 스위치
...
브라우저
웹은 인터넷이라는 글로벌 네트워크 위에 구현되어 있으며, 정해진 프로토콜을 기반으로 통신합니다. 개발자가 아닌 일반 이용자가 이러한 규칙을 이해하고 인터넷을 사용하기는 매우 어렵습니다. 만약 그랬다면 지금처럼 SNS와 커뮤니티가 활성화되지는 못했을 것입니다. 20세기에 등장한 웹 브라우저는 서버와 HTTP 통신을 대신해주고, 수신한 리소스를 시각화하여 위와 같은 문제를 해결하였습니다.
웹 브라우저는 뛰어난 이용자 경험(User eXperience, UX)을 제공하는 소프트웨어 중 하나입니다. 이용자는 브라우저를 이용하여 쉽게 정보를 검색하고, 동영상을 보고, 파일을 내려받지만 내부에서 어떠한 연산이 일어나는지는 전혀 알지 못합니다.
오른쪽은 이용자가 주소창에 dreamhack.io를 입력했을 때 웹 브라우저가 하게 되는 기본적인 동작을 나열한 것입니다.
- 웹 브라우저의 주소창에 입력된 주소(dremhack.io)를 해석
- dreamhack.io에 해당하는 주소 탐색(DNS 요청)
- HTTP를 통해 dreamhack.io에 요청
- dreamhack.io의 HTTP응답 수신
- 리소스 다운로드 및 웹 렌더링(HTML, CSS, JS)
URL
URL은 Uniform Resource Loader의 약자로, 웹에 있는 리소스의 위치를 표현하는 문자열입니다. URL은 Scheme, Authority (Userinfo, Host, Port), Path, Query, Fragment등으로 구성됩니다.
웹 렌더링
웹 렌더링은 서버로부터 받은 리소스를 이요자에게 시각화하는 행위를 말합니다. 서버의 응답을 받은 웹 브라우저는 리소스의 타입을 확인하고, 적절한 방식으로 이용자에게 전달합니다. 예를 들어, 서버로부터 HTML과 CSS를 받으면 브라우저는 HTML을 파싱하고 CSS를 적용하여 이용자에게 보여줍니다.
웹 렌더링은 웹 렌더링 엔진에 의해서 이루어 지는데, 브라우저별로 서로 다른 엔진을 사용합니다. 사파리는 웹킷(Webkit), 크롬은 블링크(Blink), 파이어폭스는 개코(Gecko)엔진을 사용합니다.
'School > Security' 카테고리의 다른 글
[ Web Hacking ] - Mitigation: Same Origin Policy (0) | 2022.05.27 |
---|---|
[ Web Hacking ] - Cookie & Session (0) | 2022.05.26 |
[ Security ] 비밀번호 단방향 암호화 (0) | 2022.05.23 |
[ Node.JS ] Express-Session과 암호화 (0) | 2022.05.23 |
[ Basic Security ] - Ubuntu in Server (0) | 2022.05.15 |