title | tags | Author |
---|---|---|
네트워크 및 HTTP 기초 |
IP, TCP, UDP, DNS, URI, URL, HTTP, Cache, HEADER, proxy |
Jung |
Studying "HTTP 웹 기본 지식" by inf-Learn
- 웹앱 개발자로서 알아야할 기본 네트워크 지식
- HTTP에 대한 이해도
- API 설계시 URL 전략 습득
- 추후 더 깊게 자습 후 수업 내용 외의 개인 지식 업데이트 계획.
지정한 IP Address에
패킷 단위로 데이터 전달
- 출발지 IP
- 목적지 IP
- ...
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 전송
- 비신뢰성
- 패킷이 소실 되거나
- 순서를 보장해주지 않음
- port 구분?
- 같은 IP 내의 여러개의 어플리케이션이 통신하는 경우 보장X
- 같은 IP 내의 여러개의 어플리케이션이 통신하는 경우 보장X
인터넷 프로토콜 스택 4계층 |
---|
애플리케이션 계층 : 프로세스간 통신 - HTTP, FTP |
전송 계층 : 송수신자 간의 연결 서비스에 대한 정보- TCP, UDP |
인터넷 계층 : 패킷을 목적지로 전송하기 위한 정보 - IP |
네트워크 인터페이스 계층 : 물리적 전송 |
- 애플리케이션에서 전송 메시지 생성
- socket library를 통해 os에 전송
- TCP에서 정보 생성 및 전송 메시지 첨부
- IP 패킷 생성, TCP 데이터 첨부
- 네트워크 인터페이스에서 인터넷 통해 서버로 송신
- 연결 지향 - TCP 3 way handshake(개념적 연결)
- 신뢰성
- 데이터 전달 보장
- 패킷의 순서 보장
- 비연결성
- 비신뢰성
- port 정보, 체크섬 추가
- 필요한 부분 애플리케이션에서 추가 조작 필요
하나의 IP에서 여러개의 어플리케이션이 통신할 경우
같은 IP내에서 프로세스 구분
도메인 네임을 IP 주소로 변환 IP 주소를 바꾼다 하더라도 새로운 IP에 지정할 필요 X
- 하나의 리소스를 가리키는 문자열 정보
- URL과 URN을 포함
- 리소스가 있는 위치를 지정
- 문법
- 프로토콜
- 호스트 네임
- 포트 번호
- path
- 쿼리
ex) https://www.google.com/search?q=URL
프로토콜 | 호스트 네임 | 포트번호 | path | 쿼리 |
---|---|---|---|---|
https | www.google.com | 443(생략 가능) | search | ?~~~~ |
- DNS와 Port 조회
- HTTP 요청 메시지 생성
- Sokcet Library를 통해 전달
- TCP/IP 연결(IP, PORT 정보) 후 전달
- TCP/IP 패킷 생성, HTTP 요청 메시지 첨부
- 리소스에 이름을 부여
- URN만으로 리소스 찾는 방법 보편화 X
- 웹 상에서 데이터를 주고 받을 수 있는 규약
- 클라이언트 - 서버 구조
-
stateless
- 서버가 클라이언트의 상태를 보존 X
- 서버 확장성 증가
- 클라이언트 추가 데이터 전송 늘어남.
- 클라이언트와 서버의 독립적인 개발 가능
- 요청이 증가해도 서버 증설이 가능
- 항상 같은 서버 연결이 유지 될 필요 X
- 서버 수평 확장 용이
- 서버가 클라이언트의 상태를 보존 X
-
비 연결성
- 요청과 응답시에만 유지하고 연결 종료
- 한정된 서버 자원을 효율적으로 사용 가능
- TCP/IP 3 way handshake 시간 추가
- html 이외의 많은 자원 함께 다운
- 요청과 응답시에만 유지하고 연결 종료
-
HTTP 1.1 이후 지속 연결 지원
- 서버 단일 시간 내 TCP 연결의 수 최소화 가능 -> 자원 절역
- 네트워크 혼잡 및 지연 축소
-
HTTP 2에서 지속 연결
- 멀티 플렉싱 사용
- 단일 TCP 연결을 통해 다수 HTTP 요청 응답이 응답 지연없이 stream 형태로 주고 받을 수 있음
- 공식 스펙
HTTP-Message | 내용 |
---|---|
start-line | request-line/status-line |
*(header-field CRLF) | field-name":" OWS field-value OWS |
CRLF | empty line |
message-body | HTML 및 byte로 표현 가능한 모든 데이터 |
- CRLF : empty line
- OWS : 띄어쓰기 허용