학교/네트워크

[네트워크] 브라우저에 'google.com' 입력하면 발생하는 일

daykim 2023. 4. 20. 17:33

브라우저에 google.com 검색 시 동작 과정

 

1. 브라우저가 URL을 해독해, HTTP request MSG를 작성한다.

  • URI : URL, URN
  • 메소드 : GET, POST 등

 

2. DNS 서버를 통해, 도메인 주소와 대응하는 IP 주소를 찾는다.

브라우저는 메시지를 네트워크에 송출하는 기능이 없어 OS에 의뢰해 액세스 대상의 웹 서버에 송신한다.
이 때 OS에 송신을 의뢰할 땐 서버의 도메인 명이 아닌 IP 주소로 메시지를 받을 상대를 지정해야 한다.

  • gethostbyname() : 리졸버 호출
  • 리졸버가 DNS 서버에 조회 MSG 보내고, 응답 MSG 돌아온다.
  • 응답 MSG 속 IP 주소를 추출해, 브라우저가 지정한 메모리 영역에 저장한다.
  • UDP 사용

 

Socket 라이브러리는 받은 HTTP 메시지를 송신 데이터로, 프로토콜 스택에 건네준다.

 

3. 서버에 리퀘스트 메시지를 전송한다.

클라이언트의 데이터 송수신 동작 서버의 데이터 송수신 동작
1. 소켓 작성 : 소켓을 만든다.
2. 접속 : 서버측 소켓과 파이프로 연결한다.
3. 송수신 : 데이터를 송, 수신한다.
4. 연결 끊기 : 파이프를 분리하고 소켓을 말소한다.
1. 소켓 작성 : 소켓을 만든다.
2 - 1. 접속 대기 상태 : 소켓을 접속 대기 상태로 만든다.
2 - 2. 접속 접수 : 접속을 접수한다.
3. 송수신 : 데이터를 송수신 한다.
4. 연결 끊기 : 파이프를 분리하고, 소켓을 말소한다.
  • socket() : 소켓 작성
    • socket()을 호출해 소켓을 만들 것을 의뢰하면, 프로토콜 스택은 의뢰에 따라 한 개의 소켓을 만든다.
  • connect() : 접속, 서버측 소켓과 연결
    • 3-way handshaking
    • SYN, ACK
  • write() : 데이터 송신
    • 클라이언트의 브라우저는 GET 요청을 통해 서버에게 www.google.com 웹페이지를 요구한다.
    • TCP는 송신 데이터를 패킷의 길이에 맞게 분할하고, TCP 헤더를 부가해 IP에 건네준다.
    • IP는 TCP에서 받은 패킷에 IP 헤더와 MAC 헤더를 부가하고 LAN 드라이버에 건네준다.
    • Sliding window :  윈도우 사이즈만큼 전ㅅ
    • 시퀀스 번호 + 데이터 <->  ACK 번호 + 윈도우

LAN 드라이버는 IP에서 송신 패킷을 받고, LAN 어댑터에 건네주어 송신하도록 지시한다.

  • LAN 어댑터에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출된다.
  • 패킷 중계
    • 통신 상대까지 패킷을 전달하는 전체 동작은 IP(라우터)가 담당하고, 다음 라우터까지 패킷을 운반하는 부분은 이더넷(스위칭 허브)이 담당하는 것이다.

 

4. 서버가 요청을 처리하고, 응답 메시지를 보낸다.

  • 리퀘스트 메시지 요청을 처리할 때, 액세스 가능한지 판단한다.
  • URI를 실제 파일 명으로 변환한다.
  • URI 파일이 프로그램일 경우, 프로그램을 실행시켜 출력하는 데이터를 반송한다.

 

5. 서버가 요청을 처리하고 보낸 Response MSG를 수신한다.

  • read() : 데이터 수신
    • 웹 서버에서 같은 방식으로 요청한 데이터를 보내올 것이다.
    • 케이블에서 신호의 모습을 한 패킷이 돌아오면, LAN 어댑터에서 디지털 데이터의 모습으로 되돌리고, IP 담당 부분에게 건내준다.
    • IP 담당 부분이 TCP 헤더와 데이터 조각을 TCP 담당 부분에게 건네준다.
    • 수신 데이터에 TCP 헤더 정보를 통해 누락된 데이터를 확인하고, ACK를 응답한다.
    • 수신 버퍼에서에 보관된 데이터 조각을 연결해 데이터를 원래 모습으로 복원한 후, 애플리케이션이 지정한 메모리 영역에 옮겨 기록한다.
    • status code : 해당 코드를 통해 서버 요청에 따른 결과 및 상태를 전달한다.

 

6. 브라우저가 HTML content를 보여준다.

  • Content-Type
  • Content-Encoding

 

7. 연결 끊기

  • close() : 소켓 말소
    • 4-way handshaking
    • 연결 끊기 동작이 실행되었을 때 소켓을 곧바로 말소하지 않고 기다린 후 소켓을 말소한다.

 

 

출처 :&nbsp;https://shlee0882.tistory.com/110