💡 면접 단골 문제
💡 OSI 7계층과 연관지어 설명할 수 있어야 함
https://www.google.com/
을 브라우저 주소창에 친다.Parsing
한다.HTTP GET Request Message
를 작성한다.캐시에서 DNS 기록을 확인
하여 도메인 네임의 IP 주소를 찾는다.DNS query
를 날려 재귀적으로 IP 주소를 찾는다.프로토콜 스택
에 메시지 송신을 의뢰하고 소켓을 작성한다.TCP connection
을 한다.패킷
을 만들고, 아래 계층으로 내려가면서 패킷의 헤더를 추가하여, 물리계층의 LAN 어댑터
로 전송한다.전기 신호
로 변환되어 송출된다.LAN의 라우터
에 패킷이 도달한다. 인터넷의 내부
로 중개된다.웹 서버
에 도착하고, 요청 메시지가 재조립된다.Response
를 작성하여 클라이언트에게 보낸다.https://www.google.com/
을 브라우저 주소창에 친다.브라우저는 사용자가 주소창에 입력한 정보가 사이트 주소인지 검색어인지 확인한다.
즉, RFC 1738에 따라 유효한 URL이 맞는지 확인한다.
브라우저는 전체 URL을 몇 조각으로 나눠서 사용자가 원하는 위치를 파악한다.(Parsing
)
https://
: 브라우저가 어떤 방식으로 웹사이트에 접속해야하는지 알려주는 프로토콜
www.
: 대부분의 웹사이트가 굳이 www를 붙이지 않아도 상관없지만, 브라우저는 완전한 주소를 보여주기 위해 굳이 표시한다.
도메인 네임
:google.com
에 해당. 모든 웹사이트에는 고유한 도메인 네임이 있다.
📌 인터넷 프로토콜
브라우저는 GET 요청을 통해 서버에게 www.google.com 웹페이지를 요구한다.
컴퓨터는 도메인 네임을 이해하지 못하고, IP 주소를 이해한다. 따라서 IP 주소를 알아야만 웹사이트에 접속할 수 있다. 브라우저는 4개의 캐시에서 DNS 기록을 확인하여, 도메인 네임에 대응되는 IP 주소를 찾는다.
🔎 1
브라우저 DNS 캐시
를 확인한다.
🔎 2
OS DNS 캐시
를 확인한다.
hosts
🔎 3
Router DNS 캐시
를 확인한다.
🔎 4
ISP DNS 캐시
를 확인한다.
Local DNS 서버
(기지국 DNS서버)에게 해당 도메인의 IP 주소를 물어본다.📌 DNS(Domain Name System)
❓ 왜 이렇게 많은 곳에서 캐시를 저장할까?
네트워크 트래픽을 조절하고 데이터 전송 시간을 줄이기 위함이다.
브라우저는 직접 네트워크 요청을 할 수 없다. DNS 요청을 포함한 모든 네트워크 요청은 OS에 의뢰해서 진행한다.
🔎 1
Local DNS 서버가 Root DNS 서버에게 해당 IP 주소를 물어본다.
🔎 2
Root DNS 서버가 해당 IP 주소를 모르는 경우, "com
도메인"을 관리하는 DNS 서버에게 물어보라고 응답한다.
🔎 3
Local DNS 서버가 "com
도메인을 관리하는 DNS 서버"에게 해당 IP 주소를 물어본다.
🔎 4
해당 DNS 서버가 IP 주소를 모르는 경우, "google.com
도메인"을 관리하는 DNS 서버에게 물어보라고 응답한다.
🔎 5
Local DNS 서버가 "google.com
도메인을 관리하는 DNS 서버"에게 IP 주소를 물어본다.
🔎 6
해당 DNS 서버는 IP 주소를 알려준다.
🔎 7
이를 수신한 Local DNS 서버는 google.com
에 대한 IP 주소를 캐싱하고(이후 바로 응답을 줄 수 있도록), IP 주소를 PC에게 전달한다.
📌 DNS query
📌 ISP(Internet Service Provider)
📌 Local DNS 서버
📌 DNS Lookup
ㅤ
📌 프로토콜 스택
📌 TCP/IP 3-way handshake
- 클라이언트 머신이 SYN 패킷을 서버에 보내고, connection을 open해 달라고 요청한다.
- 서버가 새로운 connection을 시작할 port가 있다면 SYN/ACK 패킷으로 응답한다.
- 클라이언트가 서버로부터 SYN/ACK 패킷을 받으면, 서버에게 ACK 패킷을 보낸다.
- 위 3개의 과정이 완료되면 TCP connection이 완성된다.
🔎 1
전송 계층
(TCP 프로토콜 스택)에서 패킷
을 만들고, TCP 헤더를 추가한다.
패킷
을 만든다.세그먼트
라는 이름으로 TCP 헤더에 추가된다.🔎 2
인터넷 계층
(IP 프로토콜 스택)을 통해 송신 측, 수신 측 IP 주소가 헤더에 추가된다.
🔎 3
링크 계층
에서 MAC 주소가 헤더에 추가된다.
🔎 4
패킷을 물리계층
의 LAN 어댑터
로 전송한다.
ㅤ
📌 네트워크
LAN(Local Area Network)
: 가정, 빌딩 안 사무실처럼 좁은 범위의 네트워크WAN(Wide Area Network)
: ISP가 제공하는 서비스를 사용하여 구축된 넓은 범위의 네트워크라우터를 나간 패킷은 액세스 회선을 통과하여 인터넷의 내부로 중개된다.
📌 액세스 회선
패킷은 고속 라우터들을 거치면서, 최종적으로 목적지 서버가 포함된 네트워크(LAN)의 라우터를 거쳐, 목적지 웹 서버의 단말에 도착한다.
🔎 1
전기신호를 받은 웹 서버의 LAN 어댑터
가 전기신호를 변환한다.
🔎 2
올바른 패킷일 경우, OS단의 프로토콜 스택
으로 보내진다.
🔎 3
아래 계층에서 위 계층 방향으로 디캡슐레이션
이 이루어져 요청 메시지가 재조립된다.
클라이언트의 요청 과정과 똑같이 진행된다.
📌 웹 서버
브라우저는 단계적으로 HTML content를 보여준다.
🔎 1
HTML skeleton을 rendering한다.
🔎 2
HTML tag들을 체크하고, GET 방식으로 추가적 웹페이지 정적인 요소들 (이미지, css stylesheet, javascript ..)을 위와 똑같은 과정으로 서버에 요청하고 받아온다.
🔎 3
결과적으로 www.google.com 의 모습이 보인다.
참고자료
https://sso-feeling.tistory.com/604
https://velog.io/@woo00oo/%EC%9B%B9-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC
https://hwan-shell.tistory.com/320
https://joonfluence.tistory.com/96
https://velog.io/@syleemk/HTTP-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
https://maxkim-j.github.io/posts/packet-travel