웹
웹
- 클라이언트 - 사용자가 웹에 접근하는 프로그램.
- Request - 클라이언트가 서번에 URL과 같은 정보를 HTTP 형태로 요청함
- 서버 - 웹페이지 등을 저장하는 프로그램.
- Response - 클라이언트가 요청한 HTTP 메시지를 확인 후 데이터를 처리하여 응답하는 것.
- WAS(Web Application Server) - 서버가 하는 일을 도움. 사용자 컴퓨터나 장치등애 웹 프로그램을 수행해 주는 미들웨어.
- DB - 데이터 베이스. 정보를 저장하는 곳.
HTTP
- HTTP - 인터넷에서 클라이언트와 서버가 정보를 주고받는 프로토콜.
HTTP 메시지에는 종류가 두가지가 있다.
클라이언트가 서버에 요청하는 request message.
서버가 클라이언트에 응답하는 response message.
- HTTP/0.9 - 원라인 프로토콜
- 초기엔 버전 번호가 없었지만 차후에 다른 버전과 비교하기 위해 붙여진 이름.
- 요청 메소드는 GET밖에 없었다.
- 서버도 단순히 파일 내용만 반환.
- 상태 혹은 오류 코드도 없음.
- HTTP/1.0 - 확장 버전.
- 0.9는 너무 제한적이어서 브라우저와 서버 모두 융통성을 가질 수 있도록 확장됨.
- 상태 코드가 생겼고, 그 결과에 대한 동작을 할 수 있게 됨.
- HTTP 헤더가 생겼고, 프로토콜을 극도로 유연하고 확장 가능하게 만들어줌.
- HTML 파일 이외에 다른 문서들을 전송할 수 있는 기능이 추가됨.
- HTTP/1.1 - 표준 프로토콜.
- 커넥션 재사용 가능.
- 파이프 라이닝 추가. (동시에 여러 명령을 처리하는 것)
- 추가적인 캐시 제어 메커니증 도입.
- Host헤더가 생겨, 동일 ip주소에 다른 도메인을 호스트 서버 코로케이션을 가능케함.
- HTTP/2 - 두번쨰 표준 프로토콜.
- SPDY 기반
- HTTP/1.1의 성능 제한 해결 및 웹 페이지 로드 지연 시간을 줄이기 위해 탄생.
- HTTP 1.1과 호환성 유지
- 여러 방법을 사용하여 브라우저 로드 속도 개선.
- 자주 사용되는 브라우저들 또는 API를 지원.
- 모든 요청과 응답을 병렬적으로 처리.
- 바이너리 프레이밍 사용 (텍스트 형식 HTTP메시지를 바이너리 형태로 캡슐화 한 것)
- HTTP/3 - 세번쨰 프로토콜. (시범적 사용 중)
- TCP대신 구글이 개발한 UPD를 경유하여 사용되는 QUIC를 사용.
- QUIC은 UDP의 단점인 데이터 확인을 하지 않아 손실되는 문제를 해결해, 데이터가 손실되면 개별적으로 재전송 할 수 있게하여 신뢰성을 높였다고 한다.
프록시
- 프록시 - 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 프록시라고 하고, 그 기능을 사용하는 것은 프록시 서버.
클라이언트는 프록시 서버를 서버라고 인식하고
서버는 반대로 프록시 서버를 클라이언트라고 인식한다.
그래서 프록시 서버는 어디에 위치하는지에 따라 포워드 프록시와 백워드 프록시로 나뉜다.
특징
- IP를 우회할 수 있다.
- 빠른 리소스 접근. - 웹페이지를 캐시로 저장한다.
- 데이터 유출 보호.
- 악성코드 검사.
- 바이러스 전파등으로 정보를 빼내기 위해.
- 보안을 뚫기위해.
- 원치않는 사이트 차단등 접근 정책을 적용하기 위해.
종류
- 포워드 프록시 - 클라이언트의 요청을 대신 전달.
- 리버스 프록시 - 클라이언트의 요청을 받아 서버에게 데이터를 받은 후 다시 클라이언트에게 전달.
일반적으로 프록시를 말하면 포워드 프록시를 가리킨다.
- via헤더 - http가 거쳐온 프록시나 게이트웨이의 정보를 담고 있는 것.
DNS
- ip - 네트워크에서 장치들이 서로를 인식하고 통신하기 위한 특별한 번호, 주소.
- 도메인 - ip대신 사용하는 인터넷 주소
- DNS - 도메인 주소를 IP로 바꾸어 주는 시스템
TCP/IP
TCP
- 패킷 - 네트워크를 통해 전달되는 데이터 조각
데이터를 주고 받을때 큰 데이터는 대역폭을 너무 많이 차지하기 때문에 트래픽이 많아진다.
그래서 그것을 방지하기 위해 데이터를 여러 패킷으로 분할하여 가장 빠른 통신망을 통해 전달된다.
전달될때는 패킷에 번호가 붙어 전달이 된다.
이러한 작업을 패킷 교환 방식이라고 한다.
구조
- 버전 - 사죵중인 ip버전을 식별.
- TTL - 패킷이 네트워크에 남아있을 수 있는 시간.
- 프로토콜 - 데이터가 전달되는 전송 계층 프로토콜. tcp 혹은 udp.
- 헤더 체크섬 - 헤더가 손상되어 있는지 확인.
- 소스 주소 - 패킷을 네트워크로 보내는 장치의 ip주소.
- 대상 주소 - 패킷이 전송되는 주소.
- 데이터
- TCP - 데이터들을 안정적으로 순서대로 에러없이 교환할 수 있게 해주는 인터넷 프로토콜 중 하나이다.
데이터 전송 흐름
1. TCP에 데이터 요청.
2. TCP는 데이터를 잘게 잘라 패킷으로 만듦.
3. 패킷을 ip에 전송.
4. ip는 받는 쪽 주소를 알아내어 받는 쪽 tcp로 패킷 전달.
5. tcp는 패킷을 받아 데이터들이 전부 순서대로 잘 왔는지 재조립하여 확인.
- 3way handshake - 두 장치가 정확한 데이터 전송을 보장하기 위해 사전에 동적으로 설정하는 자동화된 협상과정.
과정
1. C가 S에게 접속 요청 SYN(동기화) 패킷을 보냄.
- C는 응답을 기다리는 SYN_SENT(SYN 요청 시도) 상태가 되고
- S는 wait for client 상태가 된다.
- S가 SYN 요청을 받고 C에게 요청 수락 ACK(승인)와 SYN flag가 설정된 패킷을 발송.
- S는 C의 응답을 기다리는 SYN_RECV(SYN+ACK신호로 응답했지만 상대의 ACK는 받지못함) 상태가 됨.
- C는 S에게 ACK를 보낸다.
- S는 EST_ABLISHED(상호연결) 상태가 된다.
이 절차 후 서로 연결이 이루어지고 데이터를 전송한다.
- UPD - TCP와 유사한 역할을 하나 속도가 빠른 프로토콜.
3way handshake와 같은 연결 과정 없이 일방적으로 데이터를 전송.
둘의 차이
| / | TCP | UPD |
|---|
| 연결방식 | 연결형 | 비연결형 |
| 패킷 교환 방식 | 가상 회선 | 데이터 그램 |
| 전송 순서 | 순서 보장 | 보장하지 않음 |
| 수신 여부 | 확인 | 비확인 |
| 통신 방식 | 1:1 | 1:1, 1:N, N:N |
| 신뢰성 | 높음 | 낮음 |
| 속도 | 느림 | 빠름 |
학습에 참고한 사이트