대게는 보통 브라우저를 키고, naver.com 을 주소창에 써본적이 있을것이다.
나도 이러한 과정이 궁금해서 찾아보게 되었고 알게 된것들을 정리하여 이번 기회에 포스팅 해보려고 한다.
(부족하거나 잘못된 점이 있다면 언제든지 댓글을 달아주시면 감사하겠습니다!)
이런식으로 간단하게 브라우저에 https을 Domain name과 결합하여 주소창에 입력하여 도메인 네임에 해당하는 사이트를 방문할수 있게된다.
여기서 방문하고자 하는 네이버에 들어가는 과정은 실제로는 생각보다 복잡하고 많은 지식들이 숨겨져있다.
OSI 7 Layer, SSL, HTTPS, TCP/IP 등과 같은 것들 말이다.
먼저 간단하게 클라이언트 입장에서 과정을 말해보자면
우리에게는 한줄을 입력하면 원하는 사이트로 들어가게 되지만 여러가지 보안적인 요소들과 더불어 통신하게되는 과정은 생각보다 까다로움을 알수 있다.
이제부터 적을것은 내가 공부하면서 헷갈렸고, 많이 배운것들에 대해서다.
공부를하면서 가장 헷갈렸던것은 HTTP,HTTPS가 OSI 7 Layer 에서 Application Layer의 통신 프로토콜이고 TCP, UDP는 4계층의 Transport Layer의 프로콜이라는 것이였다.
실제 활용되고 통신하는 대상에 따라 계층이 달라지는것을 몰랐고 그냥 "프로토콜" 이라는 이름만 붙으면 다 똑같은 Layer에서 진행되는 줄 알았다.
프로토콜은 어떠한 행동을 하기 위한 규약이다.
OSI 7 Layer에서 특정 계층에서 통신을 하기 위한 규약이 정해져 있는 것이고 프로토콜이라는 이름에 따라 규약이라는 공통점은 가질수 있겠으나, 그러한 규약의 내용물은 엄밀히 다를수 있다는 것을 알게 되었다.
또한, DNS를 UDP를 통해 가져오는것도 이해하기 쉽지 않았다.
어차피 TCP를 통해 서버와 통신을 할것이고, DNS는 결국 정말 제대로 가야할 목표지점이라 신뢰성이 필요한 데이터라고 생각했는데, UDP를 사용한다니??!
아마 이는 UDP가 신뢰성이 떨어진다 하더라도 이를 보정해야 할만큼 DNS서버의 부하가 중요하고 또 신뢰성이 깨지지 않을정도로 가져오는 데이터가 적기 때문일 것이라고 추측을 했다.
마지막으로, key에 관련해서다.
처음 iOS프로젝트를 할 때 네트워크를 겉핥기로 배우면서 "HTTPS통신 그거 그냥 공개키 비밀키만 서로 교환하면 되는거아니냐?" 라고 생각을 했었다.
실제로 이 두개만 있어도 신뢰성있는 통신은 가능할 것이다.
다만, 바로 서버나 클라이언트와 통신하는게 아닌 지속적으로 공개키 저장소와 통신을 해야해서 비효율성을 가지게 된다는 것이다.
이를 개선하기 위해, 클라이언트가 공개키로 대칭키와 평문을 암호화하여 서버에게 보내게 되면 이를 통해 서버는 클라이언트와 공개키 서버를 거치지 않고도 다이렉트로 통신이 가능해 지게된다.