URL vs URI
URL : uniform resource locator, resource의 위치
URI : uniform resource identifier, resource의 식별자
HTTP
정의
특징
http request message / response message에 들어가는 것들
hypertext transfer protocol의 약자
client-server model, TCP 사용, stateless(상태 저장 x) 등의 특징이 있다.
stateless를 해결하기 위해 cookie나 session을 사용한다.
HTTP request message에는 request, header, body가 있다.
method는 GET, POST, PUT, PATCH, DELETE 등이 있다.
- GET의 경우 http body가 없고 url에 모든 정보를 담아 보낸다.
- POST는 http body에 값을 담아 보내는 방식이다.
HTTP response message에는 status line, header line, response body가 있다.
status code는 응답 상태를 의미한다.
200번대는 성공, 300번대는 redirect, 400번대는 client 오류, 500번대는 서버 오류
DNS
정의
사용 이유
DNS hierarchy
name resolution
DNS는 domain name system의 약자로, host name과 ip address mapping을 저장하는 distributed, hierarchical DB이다.
domain의 사용 이유 : IP address는 외우기 힘들기 때문.
모든 domain의 최상위에는 root domain이 있다. DNS server는 hierarchy가 있다. 각 DNS server는 자신이 가지고 있는 domain의 바로 아래에 있는 DNS server의 IP address를 가지고 있다.
name resolution : domain으로 IP address를 얻어오는 과정. iteration query, recursive query 2가지 방식이 있다. 여기선 iteration query 방식.
- local DNS server에 request를 날린다.
- local DNS server는 root DNS server에 request를 날린다.
- root DNS server는 하위 domain에 해당하는 DNS server의 IP address를 가지고 있으며, 이를 response한다.
- local DNS server는 하위 domain에 해당하는 DNS server의 IP address를 얻게 되는데, 여기에 request를 날린다.
- ... 이를 반복해 local DNS server가 목적지 DNS server IP address를 얻게 된다. local DNS server가 해당 IP address를 response한다.
DNS server
IP address
32bit로 표현하며 network 번호와 host 번호 2가지로 나뉜다. netmask로 network 번호, host 번호를 구분한다.
TCP
정의, 특징
동작 3가지
transmission control protocol.
reliable data transfer, flow control, congestion control 등 기능 지원.
TCP는 3단계가 있다. 접속, 송/수신, 끊기가 그 3가지이다.
접속 동작 - 3 way handshake
- client가 server에게 SYN bit, sequence 초기값, client window 3가지 값을 server에게 보낸다.
- server는 client에게 SYN bit, sequence 초기값, server window, ACK bit 4가지 값을 client에게 보낸다.
- client는 server에게 ACK bit를 server에게 보낸다.
여기서 SYN, ACK는 연결 동작에서 사용하는 bit이며, SYN은 연결 요청, ACK는 수신 응답이다. 이를 통해 session이 생성된다.
또한 sequence는 난수로 설정하는데 이전 연결에 사용한 sequence값과 혼동되지 않기 위함이다.
송/수신 동작
- sender가 sequence 번호 + data를 보낸다.
- receiver는 ACK 번호 + server window를 보낸다.
reliable data transfer : 한 번에 보낼 수 있는 packet size가 한정되어 있기 때문에 packet을 분할해야 한다. 때문에 sequence가 필요하다. 필요 시 data를 분할하고, sequence 값을 사용해 해당 data가 어디부터 시작되는지 분할한다. 이를 통해 data가 사라졌는지 검증할 수 있다.
여기서 ACK 번호는 어디까지 받았는지에 대한 정보이다. 여러 개를 받은 경우, 최적화를 위해 제일 최신의 ACK 번호만 응답한다. (3 duplicated ACK)
flow control : window는 buffer overflow를 막기 위해 사용하는 값이며 receiver가 몇 byte까지 받을 수 있는지에 대한 정보이다.
congestion control
- AIMD : window를 1씩 늘이고 문제 발생 시 절반으로 줄임
- slow start : 매 전송마다 window를 2배로 늘이고 문제 발생 시 1로 내림.
연결 끊기 동작 - 4 way handshake
- client가 server에게 FIN bit를 보낸다.
- server가 client에게 ACK bit를 보낸다.
- server가 client에게 FIN bit를 보낸다.
- client가 server에게 ACK bit를 보낸다.
- 이 과정에서 바로 socket을 삭제하면 문제가 발생할 수 있기 때문에 조금 기다렸다가 삭제한다. 예를 들어 server가 ACK bit를 못 받은 경우 재전송하라고 FIN bit를 보내는 경우나, client는 전송이 끝났지만 server는 보낼 것이 남아있는 경우.
UDP
정의
특징
user datagram protocol
UDP는 TCP에 비해 간단하다. 그냥 보내기만 한다.
TCP vs UDP
TCP는 연결형이기 때문에 연결이 성공해야 통신할 수 있다. UDP는 비연결형이기 때문에 연결 없어도 통신할 수 있다.
TCP는 전송 순서를 보장하지만 UDP는 그렇지 않다.
TCP는 수신 여부를 확인하지만 UDP는 그렇지 않다.
TCP는 1:1 통신이지만 UDP는 n:m이 가능하다.
TCP는 문제 발생 시 재전송해서 신뢰성이 높지만 UDP는 그렇지 않다.
TCP는 느리지만 UDP는 빠르다.
ARP
정의
과정
MAC address를 조사하는 과정. subnet에 IP address에 해당하는 기기의 MAC address를 받아오는 과정.
- router가 연결된 모든 router에게 arp query를 날린다.
- LAN의 모든 router가 해당 frame을 수신하고, 만약 자신에게 온 것이 있다면 응답하고, 그렇지 않다면 버린다.
ethernet
packet 운반은 hub, router가 한다.
NAT
정의
이유
작동 방식
subnet 전체가 하나의 IP address를 사용하는 방식이다.
초기 IP addess는 고유한 값이어야 하지만 IP 사용자가 너무 많아지면서 수가 부족해졌고, 때문에 독립망과 같이 완전히 독립된 네트워크인 경우 같은 IP가 있어도 상관없어졌다. 때문에 주소 변환을 하며, router가 이 기능을 수행한다.
내부 - 외부
- TCP packet에 있는 sender IP address와 port를 보고 적당한 값으로 변경한다.
- 이후 인터넷으로 송출하면 회신 packet이 돌아온다. 그 packet은 변경한 값으로 설정되어 있다.
- 변경된 값을 원 값으로 복구해 router가 독립망에 해당 packet을 보낸다.
외부 - 내부
내부에서 외부로 먼저 보내지 않는 한 외부에서 내부로 보낼 수 없다.
Proxy
cache server IP address를 DNS server에 등록한다. 그러면 client는 cache server에 요청을 보내게 된다.
- cache miss의 경우 cache server가 web server에게 request를 날린다.
- cache hit의 경우 바로 응답한다.
이게 기본 골자이고, 아래와 같은 것들이 있다.
- client에 cache server를 두는 forward proxy
- server에 cache server를 두는 reverse proxy
OSI
internet protocol
- application layer : network applicatoin 지원, user message 생성
- presentation layer : encryption, compression 등을 해제해서 application이 data를 읽을 수 있게 한다.
- session layer : synchronization, checkpointing, data 복구 등을 담당한다.
- transport layer : source process에서 destination process까지 data 전송. segment 사용. TCP/UDP.
- network layer : routing을 통해 host to host delivery 수행. packet 사용. ARP, IP.
- link layer : 하나의 edge를 건너가기 위해 bit를 전달. frame 사용.
- physical layer : bit를 wire에 전송. bit 사용.
Socket
application layer와 transport layer의 interface
IP address를 사용해 host를 식별하고, port를 사용해 socket을 식별한다.
multiplexing : 여러 socket으로 부터 온 message를 통합/분류해 network layer에게 보내는 transport layer의 기능
demultiplexing : network layer가 수신한 packet header를 떼서 desination socket에게 분배하는 transport layer의 기능
Domain에 뭔가 입력하면 생기는 일
DHCP
ARP
DNS
TCP
HTTP
DHCP : dynamic host configuration protocol의 약자
network에 연결할 때 IP address를 할당받는다. IP address의 초기값, first hop router address, local DNS server IP address 등을 받는다.
ARP : domain을 찾기 위해 DNS server에 query를 날려야 한다. 이 때 first hop router address만 알고 있지 MAC address는 모른다. 이를 알기 위해 ARP를 수행한다.
name resolution : first hop router의 MAC address를 알게 되었다. DNS name resolution을 실행한다. 이를 통해 destination의 IP address를 알게 되었다. 이 과정에서는 UDP를 사용한다.
TCP handshake : HTTP이므로, TCP session을 생성한다.
- client - server : SYN bit, sequence 초기값, client window를 보낸다.
- server - client : SYN bit, ACK bit, sequence 초기값, server window를 보낸다.
- client - server : ACT bit를 보낸다.
HTTP request, response : TCP session이 생성되었으면 TCP 송/수신 동작을 통해 data를 주고받는다. web browser가 HTTP request message를 생성하고, server는 해당 message를 받아 응답하고, web browser가 response를 렌더링한다.
각 router들끼리는 routing algorithm (bellman ford, dijkstra를 수행한 결과)의 결과로 routing table을 가지고 있고, routing table 내부에 어떤 IP를 어떤 router에게 보내야 하는지 정보가 있다. 이후 ARP를 통해 link layer에서 보낸다.
Cookie vs Session
cookie는 client에 저장되는 값. server가 client에게 cookie를 주면 client는 이를 저장하고 있다가 다음 요청 때 server에게 cookie와 request를 같이 보낸다.
보안에 약하다.
종료되어도 보관하고 있다.
session은 server에 저장되는 값.
보안이 좋다.
종료되면 바로 삭제한다.
HTTP vs HTTPS
HTTPS는 HTTP에 SSL을 씌운 것. 더 안전하다. 암호화하기 때문에 더 안전하다.
최초 1회에 대칭키를 교환하기 위해 비대칭키 암호화 사용, 이후부터는 대칭키 암호화 사용.
1. 최초 연결 시도 -> 서버는 공개키 넘김.
2. 클라이언트는 인증서 유효성을 검사한 후 대칭키 발급, 공개키로 암호화해 서버로 전송
3. 서버는 개인키로 복호화해 대칭키 얻음
4. 대칭키를 사용해 암호화/복호화
세션 기반 인증 vs 토큰 기반 인증
authentication vs authorization
session의 경우 작동 방식
token의 경우 작동 방식
차이점
401 Unauthorized : 인증 X, 403 Forbidden : 권한 X
authentication : login
authorization : 사용자에 대한 resource 접근 확인
session
- 사용자가 로그인 시 session ID가 server에 저장된다. 이후 이 값을 client에게 준다.
- 이후 모든 요청 시 session ID와 함께 request를 보낸다.
- 정보가 서버의 DB에 저장된다
token
- 로그인 시 인증 정보를 만들어 client에게 준다.
- 이후 모든 요청 시 token과 함께 request를 보내면 server는 해당 값을 decode해서 사용자를 검증한다.
session은 안전하지만, token은 암호화되지 않는다. 그렇지만 확장성이 좋기 때문에 - 확장성을 쓰면 scale out을 쓰는데, session을 사용하는 경우 해당 session은 한 server에만 저장되기 때문에 정합성 문제가 생긴다.
쿠키와의 차이점: 쿠키는 서명이 안 되어 있으므로 조작이 쉽다. 때문에 인증용으로는 사용하지 않는다. 토큰은 서명되어 있으므로 조작이 힘들다. 쿠키는 브라우저에 자동으로 저장되고 전송해 줌.
JWT
정의
작동 방식
json web token의 약자.
- 사용자가 로그인 시 access token을 server에 저장하고 client에게 준다.
- client는 access token을 cookie에 저장하고 모든 요청에 해당 cookie값을 전송한다.
- server가 모든 요청을 받으면 해당 값을 검증한다.
header, payload, signature를 .으로 구분한다.
- header : type, 암호화 알고리즘에 관한 정보가 있음.
- payload : 담고자 하는 정보를 json 형식으로 담음. 이 경우 복호화하면 바로 정보가 나오기 때문에 중요한 정보는 넣으면 안 된다.
- signature : encoding / 유효성 검증 시 사용하는 암호화 코드
암호화, 비대칭키, 대칭키
비대칭키는 암/복호화에 다른 key 사용. public key로 암호화하고 private key로 복호화한다.
대칭키는 암/복호화에 같은 key 사용
HTTP 멱등성
정의
어떤 게 멱등성이 있는지
요청을 여러번 해도 서버 state가 동일한 경우 method를 멱등성 method라 부른다.
GET, put, delete는 멱등성, post는 아님. patch는 맞을수도 아닐수도.
필요한 이유는, network에 문제가 발생했을 떄 여러 번 가도 문제가 없어야 하기 때문.
따라서 POST 요청을 보냈는데 응답이 없는 경우, GET을 보내서 요청이 처리가 되었는지 안 되었는지 확인한 후 안 된 경우에만 다시 POST를 보내야 함.
REST
정의
rest : http uri를 통해 resource를 명시하고, HTTP method를 통해 resource에 CRUD를 적용하는 아키텍처
restful : REST를 잘 따르는 시스템
WS vs WAS
ws : 항상 동일한 data를 줌. static
was : dynamic content 제공
CORS
cross origin resource sharing
서로 다른 도메인 간에 resource를 공유하는 것. 기본적으로 차단이라 허용해야 함. 한 출처에서 실행중인 web app이 다른 출처의 자원에 접근할 수 있는 권한 부여
'내가 하고싶은 것! > 취준' 카테고리의 다른 글
기타 면접대비 질문 (0) | 2023.10.04 |
---|---|
자료구조 면접대비 질문 (0) | 2023.10.04 |
OS 면접대비 질문 (0) | 2023.10.02 |
DB 면접대비 질문 (0) | 2023.10.01 |
2022년 1월 SW개발병 지원 및 면접 질문 (0) | 2022.10.05 |