인터넷 네트워크 (http를 위한 기본학습)
- 클라이언트와 서버 그 사이엔 복잡한 인터넷이 있다.
- 그 규칙을 IP라고 함
IP (인터넷 프로토콜)
- 지정한 IP 주소에 데이터를 전달
- 패킷이라는 통신 단위로 데이터를 전달
IP 패킷 정보
- (출발IP, 목적IP, 기타 ...) 으로 구성되어 있음
- 근데 이 정보만으로는 한계가 있다.
IP 프로토콜의 한계
- 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
- 비신뢰성 : 중간에 패킷이 사라지면? 패킷이 순서대로 안오면?
- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면??
- 이런것들을 해결해주는 것이 TCP, UDP
TCP (전송 제어 프로토콜)
- 연결지향 : TCP 3 way handshake (가상연결)
- 데이터 전달 보증
- 순서 보장 (잘못된 순서부터 다시 보내라고 서버에서 응답함)
- 신뢰할 수 있는 프로토콜 - 대부분 TCP 사용
TCP 3 way handshake
1. SYN : 클라이언트 → 서버
2. SYN + ACK : 서버 → 클라
3. ACK : 클라 → 서버 ( 연결이 됐구나! )
4. 데이터 전송 (요새는 최적화되서 3번일때 전송하기도함)
근데 사실 진짜 연결된 게 아니라 가상으로 연결된거임 (중간에 수많은 노드는 생략)
TCP/IP 패킷 정보
- (출발PORT, 목적PORT, 전송제어, 순서, 검증정보 등 ) 으로 구성되어 있음
UDP (사용자 데이터그램 프로토콜)
- 기능이 거의 없음
- 연결지향 X, 데이터 전달보증 X, 순서보장 X
- 대신 단순하고 빠름
- 하나의 IP에서 구분하기 위한 'PORT' 추가됨
- 메세지 제대로 검증해주는 '체크섬' 추가됨
- 그 외 IP 와 거의 같음
- 애플리케이션에서 추가 작업이 필요(원하는 대로)
- 최근에 각광을 받는 중
PORT
- 한번에 둘 이상 연결해야 하면? (게임하면서 통화한다던가)
- 하나의 IP에서 구분하기 위함
- 0 ~ 65535 할당 가능
- 0 ~ 1023 잘알려진 포트, 사용ㄴㄴ
20, 21 : FTP
23 : TELNET
80 : HTTP
443 : HTTPS
DNS
- IP는 기억하기 어렵고 변경이 될 수 있음
- 도메인 네임 시스템, 전화번호부 느낌
- 도메인 명을 IP주소로 변환 (google.com → 200.200.200.2)
URI
- Uniform Resource Identifier
- Uniform : 리소스 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것 (제한없음)
- Identifier : 다른 항목과 구분하는데 필요한 정보 (주민번호 같은)
- URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다 (URL + URN = URI)
- URL (Locator) : 리소스가 있는 '위치'를 지정한
- URN (Name) : 리소스에 '이름'을 부여.
URL 기본 구조
scheme://[userinfo@]host[:port][/path][?query][#fragment] | ||||||
scheme | userinfo | host | port | path | query | fragment |
https | www.google.com | (https→443) | /search | q=hello&hl=ko | ||
https://www.google.com/search?q=hello&hl=ko |
(1) scheme
scheme에는 주로 프로토콜을 사용한다
프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 규칙 (http, https, ftp 등)
(2) userinfo
URL에 사용자정보를 포함해서 인증 거의 사용안함
(3) host
호스트명 도메인명 또는 IP 주소를 직접 사용 가능
(4) port
접속 포트는 일반적으로 생략
생략하면 http는 80, https는 443
(5) path
리소스 경로 계층적 구조 (/home/file2.jpg)
(6) query
key=value 형태 ?로 시작, &로 추가 가능 query parameter, query string 등으로 불림
웹 서버에 제공하는 파라미터 (문자형태)
(7) fragment
html 내부 북마크 등에 사용 서버에 전송하는 정보가 아님
참고 강의 : https://taylog.tistory.com/203
'🧠 저장 > Http' 카테고리의 다른 글
HTTP 상태코드 간단 정리 (0) | 2024.02.20 |
---|---|
HTTP API 설계 개념 간단 정리 (0) | 2024.02.17 |
HTTP 메서드 종류, 속성 간단 정리 (0) | 2024.02.14 |
HTTP 특징, 구조 간단 정리 (0) | 2024.02.11 |
웹 브라우저 요청 흐름 간단 정리 (0) | 2024.02.08 |