-
성공과 실패를 결정하는 1%의 네트워크 원리 1장: 웹브라우저Web Dev/7. 네트워크 2021. 3. 23. 13:35728x90
브라우저란 실로 어마어마한 놈이었다. 웹브라우저는 모든 메시지가 처음 시작하는 곳인데, 평화로워보이지만 웹브라우저는 메시지를 만들어내는 곳이다.
- URL 입력: 브라우저는 여러 프로토콜을 지원한다. 우리가 흔히 보는건 http, https뿐이지만 file, mailto도 지원하고 있다
- 이중 http는 엑세스 대상이 웹서버인 것이다
- 이를 해독해서 어디에 엑세스를 하는지 판별. 이때 URI를 이용하는데, 식별자라고 이해하면 된다
- 이 URI와 method를 통해 웹서버에 요청을 보낸다
- 요청을 보낼때 HTTP 리퀘스트 메시지를 만든다
- 이것의 첫번째 행을 리퀘스트 라인이라고 하는데, 메소드로 시작하고, 얘를 통해 대강 무슨 리퀘스트인지 파악이 가능하다
- 메시지 헤더: 여기에는 날짜, 클라이언트측이 취급하는 데이터 종류, 언어, 압축형식, 클라이언트나 서버의 소프트웨어 명칭과 버전, 데이터의 유효기간이나 최종 변경 일시 등 다수의 항목이 정해져있다.
- 응답은 웹서버에서 만들어서 보내준다.
- 여기에는 응답이 어떻게 끝났는지(status code)이런 응답이 온다
- 데이터가 오면 걔를 읽는데, html 문서면 그안에 img 태그같은게 있으면 비워두고 또 request를 보낸다. (img tag는 cors 에러를 안일으킨다. fetch로요청하면 일어남)
- DNS
- 요청을 보낼때는 IP 주소 기준이라 URI에 있는 도메인 명을 이용해서 DNS서버에서 IP주소를 읽어와야한다. 이건 브라우저가 하는것이 아니고 소켓의 'gethostbyname' 부품이 프로토콜 스택을 호출해서 실제 요청을 송신하고 ip를 읽어온다.
- dns는 계층 구조를 가지고 있다.
- 내 pc는 가장 가까운 dns서버의 주소를 가지고 있고, 이런 서버들에는 루트 도메인의 주소가 다 등록되어있다 . 루트도메인에 있는애들은 13개 정도밖에 안된다. 이때 요청이 'www.lab.request.com'이면 내 근처 DNS서버는 루트에 요청을 보내고, 얘는 'com'이 등록된 dns 서버 주소를 반환하고 이를 반복해서 'www.lab.request.com' 여기까지 도달해서 받아온다.
- 이때 매번 이걸하면 난리가 나서 캐쉬를 해둔다.
- 소켓
- 데이터를 송수신할때는 송수신하는 클라이언트와 서버를 파이프로 연결하는 동작이 필요한데,처리할때 필요한 데이터들이 관리되는 곳을 소켓이라고 한다. 클라이언트도 소켓을 가지고 있고, 서버도 소켓을 가지고 있따.
- 이 소켓은 누구랑 연결됬는지 뭐 이런 정보들이 저장되어잇다.
- 소켓은 소켓 라이브러리의 socket으로 생성되는데 디스크립터를 반환해준다. 이 디스크립터는 소켓의 주로를 가지고있다. 얘를 통해서 어떤 소켓에 접근하고 있는지를 기억하고 잇을수있다.
- 디스크립터랑 포트번호의 차이점
- 디스크립터는 클라이언트에서소켓을 만들었다면 클라이언트가 사용할때 접근하는것
- 포트번호는 클라이언트가 서버에 접근할때 몇번 포트였는지 확인하는것으로 접속 상대의 소켓을 식별하기 위해 사용
- 디스크립터랑 포트번호의 차이점
'Web Dev > 7. 네트워크' 카테고리의 다른 글
성공과 실패를 결정하는 1%의 네트워크 원리 2장: 프로토콜 스택, LAN 어댑터 (1) 2021.03.23 HTTP 완벽 가이드 공부후기 (0) 2021.03.13 HTTP 완벽 가이드 20장 리다이렉션과 부하 균형 (0) 2021.03.13 HTTP 완벽 가이드 19장 배포 시스템 (0) 2021.03.07 HTTP 완벽 가이드 18장 웹호스팅 (0) 2021.03.07 - URL 입력: 브라우저는 여러 프로토콜을 지원한다. 우리가 흔히 보는건 http, https뿐이지만 file, mailto도 지원하고 있다