주소창에 www.naver.com을 치고 나서 발생하는 일들에 대해 설명해 주세요 #63
Replies: 6 comments
-
URL을 파싱합니다.
브라우저는 호스트네임에서 🤔 잠깐! 주소인가요, 검색어인가요?
HTTPS로 보내야 하나요?HSTS 리스트는 HTTPS로만 연결되도록 요청한 웹사이트들의 목록입니다. 브라우저는 이 리스트를 조회하여 IP 주소를 찾습니다.
ARP 프로세스
먼저 ARP 캐시에 목적지 IP의 ARP 항목이 있는지 확인합니다. 만약 캐시에 있다면 시스템 라이브러리 함수는 해당 MAC 주소를 반환합니다. 항목이 캐시에 없다면 라우트 테이블을 검색해 목적지 IP 주소가 로컬 라우트 테이블의 서브넷에 존재하는지 확인합니다. 존재한다면 그 서브넷에 속하는 인터페이스를 활용하고 없다면 기본 게이트웨이의 서브넷에 속하는 인터페이스를 활용합니다. 선택된 네트워크 인터페이스의 MAC 주소를 검색해 네트워크 라이브러리는 Link 레이어를 통해 ARP 요청을 보냅니다. ARP Request
ARP Reply
DNS 서버에 요청합니다.이제 네트워크 라이브러리는 우리 DNS 서버나 DNS 프로세스를 재개할 수 있는 기본 게이트웨이 중 하나의 IP 주소를 갖고 있습니다. 첫 번째 단계는 로컬/ISP 서버에 캐시에 IP 주소를 알고 있는지 확인하도록 요청하는 것입니다. 해당 서버가 정보를 갖고 있지 않다면 재귀적인 탐색이 수행되어 IP 주소가 되돌아올 때까지 DNS 서버 리스트를 타고 올라갑니다. 루트 서버에 .COM TLD(Top Level Domain) 서버에 묻도록 요청합니다. TLD 서버는 요청된 IP 주소가 있는지 확인하기 위해 캐시를 다시 확인합니다. 없다면 해당 URL과 연결된 authoritative DNS 서버로 이동한 후 IP 주소를 반환합니다. 이 모든 과정은 밀리초 사이에 이루어집니다. 소켓을 엽니다.브라우저가 목적지 서버의 IP 주소를 얻게 되면, 주소와 포트 번호(HTTP에서는 기본값 80, HTTPS에서는 기본값 443)를 이용해 시스템 라이브러리 함수를 호출하여 TCP 소켓 스트림을 요청합니다. Transport 레이어에서 출발지 포트를 커널의 동적 포트 범위에서 선택하고 목적지 포트를 헤더에 추가합니다. Network 레이어는 출발지와 목적지 서버의 IP 주소 등의 추가적인 IP 헤더를 덧씌워 패킷을 만듭니다. Link 레이어에서는 패킷에 MAC 주소를 포함하여 프레임 헤더를 추가합니다. 완성된 패킷은 이더넷, 와이파이, 무선 통신 네트워크를 통해 전송됩니다. 출발한 패킷은 모뎀으로 보내져 아날로그 신호로 변환되거나 광케이블 및 다이렉트 이더넷 연결을 통해 디지털 신호로 다음 네트워크 노드까지 전송됩니다. 로컬 서브넷을 관리하는 라우터에 도착한 패킷은 여러 라우터를 경유하며 목적지 서버까지 여행합니다. 지나치는 각각의 라우터는 IP 헤더로부터 목적지 주소를 추출해 적절한 다음 단계로 이어줍니다. IP 헤더 내의 TTL은 라우터를 하나씩 지날 때마다 감소되어 TTL이 0이 되거나 도달한 라우터의 큐에 자리가 없을 때 패킷은 드랍됩니다. 이러한 송수신은 TCP를 따라 연결 시 3-way handshake, 종료 시 4-way handshake를 따르며 여러 차례 발생합니다. TLS handshake클라이언트 컴퓨터가 자신의 Transport Layer Security (TLS) 버전, 암호 알고리즘 목록 그리고 사용 가능한 압축 방식을 클라이언트는 서버측 디지털 인증서가 유효한지를, 신뢰할 수 있는 CA 목록을 통해 확인합니다. 만약 CA를 통해 신뢰성이 확보되면, 클라이언트는 의사 난수 (pseudo-random) 바이트를 생성해 서버의 공개키로 암호화합니다. 이 난수 바이트는 대칭키를 정하는 데에 사용됩니다. 서버는 난수 바이트를 자기 개인키로 복호화해 대칭 마스터키 생성에 활용합니다. 클라이언트는 이제 GET 요청을 보냅니다.구글이 만든 웹 브라우저라면, 페이지를 가져오기 위해 HTTP 요청을 보내는 대신, 서버에게 HTTP에서 SPDY로 업그레이드할 것을 협상해봅니다. 만약 클라이언트가 SPDY를 지원하지 않고 HTTP만 쓴다면, 서버에 다음과 같은 GET 요청을 보냅니다:
HTTP/1.1은 송신자측에서 응답을 받은 직후에 연결이 끊어질 것이라는 신호를 보내기 위해 "close"라는 연결 옵션을 정의합니다. 요청과 헤더를 보낸 후에, 웹 브라우저는 하나의 빈 줄을 서버에 보내 요청 내용이 모두 보내졌음을 알립니다. 서버는 요청의 상태를 나타내는 코드와 다음과 같은 형태의 답신으로 응답합니다:
빈 줄을 하나 붙인 뒤, 🤔 잠깐! 브라우저에 파일이 캐시되어 있나요?
HTML을 파싱한 후에는, 브라우저 (그리고 서버) 가 이 과정을 HTML 페이지에서 참조되는 모든 자원 (이미지, CSS, favicon.ico, 기타 등등) 에 대해 반복합니다. HTML이 웹 서버의 요청 처리
HTML 파싱CSS 해석페이지 렌더링꼬리 질문
참고 |
Beta Was this translation helpful? Give feedback.
-
ISP란 무엇인가요? |
Beta Was this translation helpful? Give feedback.
-
소캣이란 무엇인가요? |
Beta Was this translation helpful? Give feedback.
-
javascript를 불러올때 defer/async가 있는데, 이 두개의 차이점은 무엇인가요? |
Beta Was this translation helpful? Give feedback.
-
TCP로 통신하는데 왜 브라우저에서 UDP는 안하는가? |
Beta Was this translation helpful? Give feedback.
-
DNS에서는 TCP를 사용할까요, 아니면 UDP를 사용하나요? |
Beta Was this translation helpful? Give feedback.
-
궁금합니다.
Beta Was this translation helpful? Give feedback.
All reactions