[CS][Network] 브라우저에서 네이버를 치면 나오는 과정

.onNext("Volga")·2021년 6월 2일
5

Computer Science

목록 보기
1/6

대게는 보통 브라우저를 키고, naver.com 을 주소창에 써본적이 있을것이다.

나도 이러한 과정이 궁금해서 찾아보게 되었고 알게 된것들을 정리하여 이번 기회에 포스팅 해보려고 한다.

(부족하거나 잘못된 점이 있다면 언제든지 댓글을 달아주시면 감사하겠습니다!)

이런식으로 간단하게 브라우저에 https을 Domain name과 결합하여 주소창에 입력하여 도메인 네임에 해당하는 사이트를 방문할수 있게된다.

여기서 방문하고자 하는 네이버에 들어가는 과정은 실제로는 생각보다 복잡하고 많은 지식들이 숨겨져있다.

OSI 7 Layer, SSL, HTTPS, TCP/IP 등과 같은 것들 말이다.

먼저 간단하게 클라이언트 입장에서 과정을 말해보자면

  • 주소창에 https://naver.com 을 입력한다.
  • 해당 주소의 정보를 담은 정보를 토대로 HTTPS를 OSI 7 계층의 Application Layer에서 생성한다.
  • 생성된 HTTPS 평문의 가고자 하는 도메인 네임을 따서 UDP 통신으로 DNS서버에 접근하여 실제 주소를 가져온다.
  • 가져온 주소를 바탕으로 이제 실제로 전송 되어질 서버와 TCP를 통해 접속한다.
  • 이 때, TCP는 3-way HandShake를 통해 진행되게 된다.
  • TCP가 연결되고 공개키 저장소에서 서버의 공개키를 획득하여 평문을 암호화 하여 대칭키와 함께 서버에게 보낸다.
  • 서버는 공개키와 같이 만들어둔 비밀키를 통해 클라이언트가 보낸 암호화된 평문을 복호화 하게된다.
  • 복호화된 데이터를 획득 한 뒤 서버는 response를 받은 대칭키로 암호화하여 클라이언트에게 전송한다.
  • 클라이언트는 획득한 정보를 대칭키를 바탕으로 복호화 하여 서버의 response를 확인하고 브라우저에 렌더링 하게 된다.

우리에게는 한줄을 입력하면 원하는 사이트로 들어가게 되지만 여러가지 보안적인 요소들과 더불어 통신하게되는 과정은 생각보다 까다로움을 알수 있다.

이제부터 적을것은 내가 공부하면서 헷갈렸고, 많이 배운것들에 대해서다.

OSI 7 Layer, Protocol

공부를하면서 가장 헷갈렸던것은 HTTP,HTTPS가 OSI 7 Layer 에서 Application Layer의 통신 프로토콜이고 TCP, UDP는 4계층의 Transport Layer의 프로콜이라는 것이였다.
실제 활용되고 통신하는 대상에 따라 계층이 달라지는것을 몰랐고 그냥 "프로토콜" 이라는 이름만 붙으면 다 똑같은 Layer에서 진행되는 줄 알았다.

프로토콜은 어떠한 행동을 하기 위한 규약이다.
OSI 7 Layer에서 특정 계층에서 통신을 하기 위한 규약이 정해져 있는 것이고 프로토콜이라는 이름에 따라 규약이라는 공통점은 가질수 있겠으나, 그러한 규약의 내용물은 엄밀히 다를수 있다는 것을 알게 되었다.

DNS, UDP

또한, DNS를 UDP를 통해 가져오는것도 이해하기 쉽지 않았다.
어차피 TCP를 통해 서버와 통신을 할것이고, DNS는 결국 정말 제대로 가야할 목표지점이라 신뢰성이 필요한 데이터라고 생각했는데, UDP를 사용한다니??!
아마 이는 UDP가 신뢰성이 떨어진다 하더라도 이를 보정해야 할만큼 DNS서버의 부하가 중요하고 또 신뢰성이 깨지지 않을정도로 가져오는 데이터가 적기 때문일 것이라고 추측을 했다.

공개키, 비밀키, 대칭키

마지막으로, key에 관련해서다.
처음 iOS프로젝트를 할 때 네트워크를 겉핥기로 배우면서 "HTTPS통신 그거 그냥 공개키 비밀키만 서로 교환하면 되는거아니냐?" 라고 생각을 했었다.
실제로 이 두개만 있어도 신뢰성있는 통신은 가능할 것이다.
다만, 바로 서버나 클라이언트와 통신하는게 아닌 지속적으로 공개키 저장소와 통신을 해야해서 비효율성을 가지게 된다는 것이다.
이를 개선하기 위해, 클라이언트가 공개키로 대칭키와 평문을 암호화하여 서버에게 보내게 되면 이를 통해 서버는 클라이언트와 공개키 서버를 거치지 않고도 다이렉트로 통신이 가능해 지게된다.

profile
iOS 개발자 volga입니다~

0개의 댓글