인프런에서 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 수강하면서 노트를 작성해 보았다.
IP(인터넷 프로토콜)
패킷이라는 통신 단위로 지정한 IP 주소에 데이터를 전달
출발지, 목적지ip, 메세지를 패킷에 넣고 클라이언트가 서버로 요청을 날림, 목적지에서 메세지를 받고 응답을 같은 형식으로 패킷에 넣고 클라이언트쪽으로 던짐.
비연결성 - 패킷을 받을 대상이 없거나 받을수 없는상태(PC가 꺼져있거나)여도 패킷 전송
비신뢰성 - 중간에 패킷이 사라지거나, 순서대로 오지않으면
이러한 위 문제 때문에 TCP/UDP라는 개념이 생김
인터넷 프로토콜 4계층
application - http, ftp
transport - tcp, udp
internet - ip
network interface
IP 정보(출발지, 목적지,....)는 패킷에 있고 그 안에 TCP 세그먼트인 정보들이(출발지 포트, 목적지 포트, 전송제어, 순서, 검증정보...)포함됨, 그리고 그안에 메세지 포함
3 way handshake, 데이터 전달 보증, 순서 보장 - TCP가 신뢰할수 있는 프로토콜인 이유
3 way handshake는 개념적으로만 연결된 논리(물리적 X)
UDP는 IP와 거의 같은데 PORT와 체크섬 정도만 추가됨(기능 거의 없음)
데이터 전달 및 순서 보장은 없지만 단순하고 빠르다.
목적지 주소 = IP, 같은 IP에서 돌아가는 어플리케이션(프로세스)을 구분 = port
port = 0 ~ 65535까지 할당 가능
0 ~ 1023까지는 잘알려진 포트라 사용하지 않는 것이 좋음
ex) ftp - 20, 21, telnet -23, http - 80, https - 443
DNS 사용 이유 - IP는 변경될수 있기 때문에 + IP는 기억하기 어렵기때문에, IP를 도메인명으로 바꿀 수 있다.
DNS서버에서 도메인명으로 IP를 찾음
uniform: 리소스 식별하는 통일된 방식
resource: 자원, URI로 식별할수 있는 모든 것들
URI = uniform resource identifier
URL = uniform resource locator
URN = uniform resource name (이름을 부여하는 건데 이름만으로 실제 리소스를 찾울 수 있는 방법이 보편화 되지 않음)
ex) https://www.google.com:443/search?q=hello&hl=ko
프로토콜(https)
호스트명(www.google.com)
포트번호(443)
패스(/search) - 계층적 설계
쿼리파라미터(q=hello&hl=ko) - key=value 형태
웹브라우저 요청흐름