인프런 커뮤니티 질문&답변

EUNKYUNG JUNG님의 프로필 이미지

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

웹 브라우저 요청 흐름

DNS서버에 조회 해서 웹브라우저에 받아오는 일련의 과정에 대해

21.12.09 22:42 작성

·

698

1

안녕하세요.
너무 잘보고있는데요.
한가지 DNS서버에 조회 해서 웹브라우저에 받아오는 일련의 과정이 조금 헷갈려서 질문드립니다.

 

1.웹브라우저에서 구글서버로 접속하기위해 

1) 먼저 DNS에 접속하여 IP주소와 port정보를 찾아냅니다.

2)그후에 DNS서버로부터 받아온 정보로 HTTP요청 메시지를 생성하는데요.

그럼  https://www.google.com:443/ 까지는 웹브라우저에서 DNS서버를 가서 조회를 해서 IP주소와 port 정보를 조회하여 그 정보만 요청한 웹 브라우저로 넘겨주게되고, 

웹브라우저는 다시 DNS서버로 부터 받은 IP주소와port정보를 포함하여 HTTP요청 메시지를 만드는데 그 안에는 path뒤 부터인 /search?q=hello&hl=ko가 구글 서버에 접속해서 관련 정보를 받아온다고 생각하면되는게 맞나요?  

그런데 이게 맞다면 1분11초 HTTP메시지에 Host는 www.google.com이고, 또 따로 패킷에 받아온 구글 IP주소 를 to에다가 200.200.200.2로 보내는게 맞는지가 궁금합니다. (제가 생각했을때는 DNS서버로 부터 받아온 IP주소를 Host에다가 200.200.200.2라고 적으면 된다고 생각했었는데, 다시  www.google.com이라고 적어놓으셔서 그럼 HTTP요청 메시지 패킷을 전송할때는 www.google.com와 IP주소 200.200.200.2가 모두 필요한걸까? 라는 의문이 들어서요.) 

 

2. search가 path인데요. 그럼 예를들어 구글 서버 자체에 serarch라는 디렉토리가 있는건가요? 
그래서 그 serarch안에 q=hello&hl=ko의 해당정보가 들어있는건가요?...

 

3. DNS서버도 따로 존재? 한다고 들었는데, 이게 또 SK, LG, KT 등 통신사에 등록이 되어있다고 들었습니다. 혹시 SK의 경우 DNS서버홈페이지같은거는 어디서 알 수 있을까요? 한 번 들어가서 구경하고 싶은데.. 검색해도 안나와서요. 

3-1 또 DNS서버로 요청할때도 3way handshake로 동작해서 패킷단위로 던져지는게 맞나요?

 

4. 제가 생각했을때 http https ftp smtp 마다 호칭을 HTTP요청메시지 or HTTPS요청메시지  or FTP요청메시지 or SMTP요청메시지 이런식으로 각각 따로 불려야 될 것 같은데.. 이거를 그냥 어떤 프로토콜을 사용하던지 'HTTP요청메시지' 라고  통용해서 사용하는 건가요?

 

5. 1분49초 시작부터 , 이해가 잘 가지않는데요.
그럼 지금 이 HTTP메시지 전송과정 전에 이미 DNS서버를 가서 IP주소랑 port번호를 찾아 온후! 진행되는 과정이라는 가정하에 IP주소랑 port번호를 찾았다고 말씀하시는거죠? 

그리고
1)소켓라이브러리를 통해서 먼저 찾은IP주소와port번호로 2)syn- syn ack - ack 해서 (가상)구글 서버와 연결을 한 후 
3) OS계층인 TCP/IP 로 전달을 합니다. 그다음 패킷을 씌운후 인터넷망으로 던져진다! 

순서과정을 이렇게 이해하면 될까요? 

답변 1

7

codesweaver님의 프로필 이미지

2021. 12. 10. 11:11

안녕하세요, EUNKYUNG JUNG 님. 공식 서포터즈 codesweaver 입니다.
.

1. 우선 HTTP 메시지는 HTTP 레이어에서 사용하는 정보 입니다. 여기서는 HOST 로 도메인 명을 사용합니다. 하위 레이어인 TCP에서는 IP주소를 사용합니다. 즉, 각 레이어별로 사용하는 정보가 다르다고 생각하시면 됩니다.

 

추가로 IP 정보는 로컬DNS에 캐시로 저장됩니다. 로컬DNS는 도메인이름과 IP를 테이블 형태로 저장합니다. 그래서 누군가 이미 캐시에 있는 IP를 요청하면 다른 DNS 서버에 요청을 보내지 않고 로컬DNS가 가지고 있는 IP를 반환하여 트래픽을 절약합니다.

 

2. google.com/search?q=hello 와 같은 URL이 있고 이를 스프링으로 처리한다고 가정하면

우선 /search와 매핑되는 컨트롤러가 존재해야 합니다. 그리고 이후 쿼리스트링(물음표 이하의 문자열)은 @RequestParam 등으로 받아 검색엔진에 질의하는데 사용하게 되겠죠?

중요한것은 어떤 웹사이트의 URL 구조가 반드시 디렉토리 구조와 일치하지는 않는다는 점 입니다. 구글에서 어떻게 제작했느냐에 따라 달라질 수 있는 문제입니다.

 

3. .DNS 서버는 별도의 홈페이지를 제공하지는 않습니다. 보통은 네임서버의 주소를 공개하는 정도의 정보만을 알 수 있으며, 가비아 등의 네임서버 운영 업체에서 DNS를 관리할 수 있는 메뉴를 제공합니다 아래 이미지는 가비아가 홈페이지에 공개한 네임서버 정보 예시입니다.

3.1 DNS에서 IP주소를 획득하는 과정은 3way handshake가 발생하지 않습니다. 최종 목적지에 도착한 이후 TCP 소켓 통신을 맺을때 3way handshake를 하게 됩니다.

 

4. 통신에서 가장 많이 사용하는 방식이 HTTP이고 이 프로토콜에서 사용하는것이 HTTP요청 메시지 입니다. 프로토콜이 다르다면 다른 용어를 사용하는것이 맞습니다.

 

5. 네 생각하신 부분이 맞습니다. 해당 강의 이미지의 'A:TCP/IP연결'부분은 DNS를 통해 IP를 찾는 과정과 해당 목적지와 TCP 연결을 맺는 부분을 포함하고 있다고 보시면 됩니다. 호출 순서도 생각하고 계시는 내용이 맞습니다.

 

그리고 포트의 경우 HTTP는 80, HTTPS는 443등으로 미리 규약되어있고 별도의 포트를 사용할 경우 직접 명시하도록 하고 있기에 DNS에서 포트번호를 알아오지는 않습니다. 브라우저 단에서 이미 포트번호를 알 수 있기 떄문입니다.

 

감사합니다.