비전공자의 전공자 따라잡기 - 네트워크, HTTP

DNS와 레코드

DNS, 도메인

공부추천 Link! -> Cloudflare - DNS

IP주소는 외우기 힘들기 때문에 도메인이라는 게 있는 것이다.
도메인은 IP에 이름을 매칭해서 외우기 쉽게 해주는 것이다.
전화번호부를 생각하면 쉽다. 번호를 외우지 않고 이름을 저장한다.
도메인으로 IP를 찾아서 연결해주는 것이 필요하다.
그것이 DNS(Domain Name System)다.

DNS 과정

!Cloudflare - DNS 그림 참고!

우리가 브라우저에게 ‘devnabi.com’인 어떤 이름으로 요청을 보냈다.
브라우저는 DNS Resolver한테 물어본다.
DNS는 그 도메인 이름을 확인하고 Root Server로 요청을 한다.
Root Server는 ‘.com’ 인 것을 확인하고 ‘.com’을 담당하는 TLD Server로 가라고 DNS에게 전달한다.
DNS는 TLD Server에게 ‘devnabi.com’ 이름을 요청한다.
TLD는 요청했던 ‘devnabi.com’ name Server로 가라고 DNS에게 전달한다.
DNS는 ‘devnabi.com’의 Name Server로 가서 요청을 한다.
Name Server는 A라는 레코드의 IP가 있는데 그것을 전달한다.
응답을 받았고 그 IP로 브라우저에서 ‘devnabi.com’ 네트워크에 요청을 하고 응답을 받게된다.

캐시

이 과정을 짧은 시간안에 해도 시간은 걸리니까 DNS 캐시라는 것이 있다.
캐시는 HTTP나 서버에서나 여러곳에서 쓸 수 있는 용어이다. DNS에도 캐시가 있다.
IP를 받아와서 저장을 해두면 나중에 같은 요청을 했을 때, 그 과정을 거치지 않고 바로 효율적으로 받아올 수 있게 해주는 것이 캐시다.

레코드

A는 IPv4 / AAAA는 IPv6

CNAME : 만약 ‘devnabi.com’이라는 도메인을 구입했다면 ‘devnabi.com’으로만 접근이 되고, ‘www.devnabi.com’으로는 접근이 되지 않는다.
레코드 CNAME에 www을 연결해두면 ‘www.devnabi.com’으로 접근이 가능하다.

NS : 도메인 구입했고 구입한 사이트에서 NS주소 4개를 주고 그것을 복사해서 NS 칸에 입력하라고 나온다.
NS는 함부로 바꾸면 안 된다. 해킹 위험

도메인 사용 팁

서브 도메인이라는 것을 잘 활용하면 도메인을 계속 사지 않아도 된다.
서브 도메인 별로 다른 레코드를 만들어서 무료로 사용할 수 있다.


와이어샤크(WireShark) 사용하기

와이어샤크 사용하기

와이어샤크 : 프레임을 볼 수 있는 프로그램이다.
일정시간동안 어떤 데이터가 오갔는지 캡쳐를 할 수가 있다.
데이터가 많이 오가는 중이라면 그 만큼 많이 캡처가 되는데 검색으로 dns를 입력하여 금방 찾을 수 있다.
그 밑에는 16진법으로 된 데이터를 볼 수 가 있는데 0과1로만 된 것을 보여주면 너무 길기때문에 16bit씩 쓴 것을 보여준다.
그 부분을 클릭해보면 프레임 중에 어떤 계층의 데이터인지 나온다.
그 데이터 안에서 어떤 인터넷과 장비를 쓰는지 등을 알 수 있다.

SYN? ACK?

ACK란? Acknowledgment(승인)의 약자로 요청을 확인했다는 응답을 말한다.

SYN이란? Synchronize(동시에 발생하다) Sequence Number의 약자다.
연결이 이루어지도록 요청하는 의미다.

공부방법

와이어샤크는 이론공부, 네트워크 탭을 더 많이 쓰게 될 것이다.
와이어샤크와 네트워크 탭을 비교하며 공부하는 것도 도움이 된다.

와이어샤크의 문제점?

데이터가 어떤 식으로 구성되어있는지 한 번에 알 수 있지만, 문제는 해커가 실시간으로 데이터를 보게 된다면 끔찍하다.
헤더같은 경우에 비밀번호나 토큰이 있을 수 있다.
HTTPS를 적용하면 와이어샤크에서도 16진법 데이터도 안보이게 되고 유출될 일이 없다.
해커가 혹시나 요청을 탈취해도 데이터가 보이지는 않기 때문에 안전하다.
데이터를 해킹 당하더라도 2차 피해를 막기 위해 한 번 더 암호화를 해두는 게 좋다.
(HTTPS는 그런 암호화를 자동으로 해주는 프로토콜)


3-way, TLS 핸드셰이크

3 way handshake

연결을 끊을 때 사용하는 ‘4 way handshake’를 공부해보는 것도 추천!

클라이언트에서 SYN을 요청 » 서버에서는 SYN + ACK을 클라이언트에 전달 » 클라이언트에서 서버로 ACK를 한 번 더 보내준다. (SYN » SYN + ACK » ACK)

3번의 확인을 통해 데이터를 주고 받고 서로 간의 연결이 반드시 맺어졌다는 것을 확인할 수 있다.
조금 귀찮아 보이지만 확실히 안정적으로 데이터를 보낼 수 있다.
UDP는 데이터가 유실될 수 있지만, 확인하는 과정이 없기때문에 더 빨리 데이터를 보낼 수 있는 장점이 있다.

TLS 핸드셰이크란?

공부추천 Link! -> !Cloudflare - TLS 핸드셰이크

!Cloudflare - TLS 핸드셰이크 그림 참고!

‘3 way handshake’는 TCP용이고, HTTPS용이 따로 있다.
HTTPS는 TCP ‘3 way handshake’를 거치고 그 뒤는 암호키를 서버와 주고 받는 과정을 거친다.

HTTPS를 연결하기 전이라면?

대칭키 방식 : 아무 키로 복호화 할 수 있는 것은 안되니까 같은 키를 서로 주고 받아야 한다.
연결되기 전이라면 해커가 와이어샤크를 통해 서버로 부터 온 키를 알아낼 수도 있다.

비대칭키 방식 : 하지만 현실에서는 대칭키를 사용하지 않고 비대칭키를 사용하기때문에 그럴 일이 없다.
예를들면 암호화를 ‘devnabi’로 하고 복호화는 ‘LOL’ 이런식이다.
(소인수분해에서 소수를 구하지 못하는 것을 생각하면 쉽다.)