ref : https://hongchan.tistory.com/46
브라우저
를 통해"www.naver.com"
값을입력
하면어떤 일
이 벌어질까?1)
로컬 PC
의hosts파일
과브라우저 캐시
를확인
하여입력한 도메인
의매핑정보가 있는지 확인
(있으면DNS 쿼리를 생략
)
2)DHCP 서버
로부터[사용자 자신의 IP]
[가장 가까운 라우터의 IP주소]
[가장 가까운 DNS서버의 IP주소]
를 받는다
3)ARP 프로토콜
을 이용해가장 가까운 라우터
의MAC주소
를 알아낸다
4)DNS쿼리
를DNS 서버에 송신
하여,웹 서버의 IP주소
를 받는다
4-1) 구체적으로..Root 네임서버
->.com 네임서버
->naver.com 네임서버
를 거쳐서IP주소를 수신
5)TCP 소켓
을개방
하고3-way handshaking
을 통해상호간 연결
6)TCP연결에 성공
하면,HTTP request
를 보내서응답으로 리소스
를 받음
7)브라우저
는받은 리소스 구문
을분석
하고DOM 트리 생성
,렌더링
등을 거쳐서화면에 표시
OSI 7Layer 란?
국제 표준화 기구
ISO
에서 개발한 모델로컴퓨터 네트워크 통신
을계층
으로 나누어 설명하여개방형 시스템간의 통신
을 위해재정한 권고 사항
PDU ?
- 개념
Protocol Data Unit
데이터 통신
에서상위 계층이 전달한 데이터
에 붙이는제어정보 단위
(각 계층에서 사용
되는제어 정보 단위
)
설명
- 7계층(
응용 계층
)
사용자
와직접 상호작용
하는응용 프로그램
들이 포함된 계층- PDU :
Data
- Ex)
HTTP
/FTP
/DNS
등
- 6계층(
표현 계층
)
데이터 표현
에 대한독립성
을제공
하고암호화
하는 역할- PDU :
Data
- Ex)
JPEG
/MPEG
등
- 5계층(
세션 계층
)
데이터가 통신하기 위한 논리적 연결
을 담당.TCP/IP 세션
을 만들고 없애는 책임- PDU :
Data
- Ex)
API
/Socket
- 4계층(
전송 계층
)
TCP
와UDP
를 통해통신을 활성화
.종단간 연결
을 수행- PDU : 세그먼트
(Segment)
- Ex )
- TCP :
신뢰성
,연결지향적
- UDP :
비 신뢰성
,비 연결성
,실시간
- 3계층(
네트워크 계층
)
라우팅
을 통해이동할 경로를 선택
하여데이터
를목적지
까지 전달- PDU : 패킷(
Packet
) or 데이터그램(Datagram)
라우팅
/흐름제어
/오류제어
/세그먼테이션
등
- 2계층(
데이터 링크 계층
)
물리 계층
으로송수신되는 정보
를관리
하여안전하게 전달
되도록 도와주는 역할흐름제어
/오류제어
- PDU : 프레임
(Frame)
- Ex)
브릿지
/스위치
등
- 1계층(
물리 계층
)
데이터
를전기적인 신호
로변환
해서 주고받는 기능을 진행하는 공간- PDU : 비트
(Bit)
- Ex)
리피터
/케이블
/허브
등
[ TCP ]
TCP
는연결형 서비스
로3-way handshaking
과정을 통해연결 설정
을수행
순차적 전달
과지연과 손실
이 발생하지 않도록보장함
-->흐름제어
/혼잡제어
를 통해높은 신뢰성
을 보장하지만,UDP에 비해 느림
[ UDP ]
UDP
는비연결형 서비스
인전송 프로토콜
TCP에 비해 속도가 빠르지만
,수신여부
,도착 순서
등을보장하지 않음
실시간성이 중요한 스트리밍
에 자주 사용됨 (게임 포함
)
DNS에서 주로 UDP를 사용하는 이유 ?
TCP
는3-way handshake
를 통해connection을 유지
하지만,UDP
는유지하지 않는다
DNS request
는UDP segment
에 꼭 들어갈 정도로작다
- 즉,
DNS
를TCP로 하기에는 커넥션도 유지
해야하고오히려 오버헤드가 더 커지기 때문
에DNS를 주로 사용
--> 하지만,크기가 UDP의 제한을 넘어가는 경우
에는TCP를 사용
한다
[ 3-way handshaking ]
신뢰성 있는 통신
을 위해연결을 설정
하는 과정TCP
는양방향성 연결
이기 때문에상호 간 패킷을 보낼 수 있다는 것을 확인
하기 위해서2-way
가 아닌3-way
를수행
- 순서
1)클라이언트
가SYN 패킷
을서버에 전송
2)서버
는SYN패킷
을 받고,ACK
과SYN패킷
을전송
3)클라이언트
는ACK
과,SYN패킷
을 받고, 이에응답
으로ACK 전송
[ 4 way handshaking ]
TCP 연결
을해제
하는과정
순서
1)클라이언트
는서버
에게연결을 종료하겠다
는FIN 패킷
을 전송
2)서버
는이에 대한 응답
으로ACK패킷
을전송
(이 때모든 데이터를 보내기 위해
CLOSE_WAIT 상태
가 된다)
3) 데이터를 모두 보냈다면,서버
는연결이 종료
되었다는FIN 패킷
을클라이언트에게 보냄
4)클라이언트
는FIN을 받고
,확인했다
는ACK
를서버
에게 보낸다
(아직 서버로부터 받지 못한 데이터가 있을 수 있으므로
TIME_WAIT
을 통해기다린다
)
-서버
는ACK를 받은 이후
에소켓을 닫는다(Closed)
-클라이언트
는TIME_WAIT 시간이 끝나면
소켓을 닫는다(Closed)
주의
마지막 4번째 ACK
를 보내고 반드시TIME_WAIT 상태
로일정시간 대기
해야 한다
--> 그렇지 않으면,만약 ACK가 손실
되었을 때다시 서버가 FIN을 보내야
하는데,클라이언트
는이미 닫혀있기 때문
에정상 종료를 할 수 없음
(30초정도 기다리는 시간
을 갖는다)
[ 흐름 제어(Flow Control) ]
기본 설명
송신측
과수신측
의데이터 처리 속도 차이
를해결하기 위한 기법
수신측의 버퍼 정보
를확인
해서송신측
의송신 속도를
낮추
거나증가
시킨다.송신측
은수신측
의버퍼에 대한 정보
를TCP 세그먼트
의rwnd(receive window)
값을 통해서 받는다.
흐름제어 방법
- 흐름제어 방법
- Stop and Wait
:매번 전송한 패킷
에 대해확인 응답을 받아야
만다음 패킷을 전송
-->하나씩 보내기 때문
에너무 비효율적
- Sliding Window (
TCP 채택 방식
)
:수신측
에서설정한 윈도우 크기
만큼송신측에서 확인 응답 없이 세그먼트
를전송할 수 있게
해서데이터 흐름
을동적으로 조절
하는제어 기법
송 / 수신측 유지 정보
- 송신측 유지 정보
LastByteSent
:가장 최근에 보낸 세그먼트
LastByteAcked
:가장 최근에 받은 확인 응답
- 수신측 유지 정보
LastByteRead
:가장 최근
에애플리케이션
이프로세스 버퍼
에서읽은 것
LastByteRcvd
:가장 최근
에송신측으로부터 받은 데이터 스트림의 마지막 바이트 수
RcvBuffer
:할당된 수신 버퍼 크기
동작 원리
- 수신측 버퍼 정보(
rwnd
)
(버퍼의 여유 공간) = RcvBuffer - [LastByteRcvd - LastByteRead]
송신측
은TCP 세그먼트내
에rwnd 값
을 받는다.송신측
은[LastByteSent - LastByteAcked] <= rwnd
를유지
하도록송신 속도 조절
[ 혼잡 제어(Congestion Control) ]
기본 설명
혼잡제어(congestion control)
은네트워크 자체를 혼잡
하게 하는송신자
를억제
해서네트워크의 혼잡
을줄이는 매커니즘
3가지 핵심 포인트
네트워크 혼잡
을 감지하는 방법 ?
:라우터
에서오버플로우가 발생
하여데이터그램이 손실
되는여부
를 통해 파악
--> 즉,timeout
이 나거나중복 ACK
로 인해데이터그램이 손실
되는 것
- 송신측의
송신속도 조절
?
:송신측
은수신측
의혼잡제어 변수(cwnd)
를 통해송신 속도
를조절
- 혼잡 제어 알고리즘 ?
:송신측
의송신 속도
를조절
하기 위해다양한 정책
으로 이루어진혼잡제어 알고리즘
이 사용
혼잡 제어 알고리즘을 위한 정책들
- AIMD (
Additive Increase
/Multiplicative Decrease
)
cwnd 값
을1MSS
씩순차적 증가
,제승적 감소
를 수행패킷 전송에 실패
하거나일정 시간을 넘으면
보내는속도를 절반으로 감소
- Slow Start
AIMD방식
은최초 임계치
까지 도달하기 위해선형적으로 증가
하는데,이것은 매우 비효율적
AIMD의 최초 전송속도
를지수적으로 증가
시켜효율적
으로 하는 방법Slow Start 임계치 값
(ssthresh
) 까지지수적 증가
/그 이후 선형적 증가
- Fast Retransmit
중복된 ACK 패킷
을 받으면빠르게 재전송
을수행
3-중복ACK
가 되면Fast Recovery
를수행
해서cwnd의 사이즈를 줄인다.
- Fast Recovery
패킷이 timeout으로 손실
되면cwnd를 1MSS
로 낮추지만,3-중복 ACK로 인해 패킷이 손실
되면cwnd를 절반으로 낮추어
보다빠르게 크기를 회복
하는 방법
혼잡 제어 알고리즘
- 전체 흐름
기본적
으로AIMD 정책
을 따라선형적으로 증가
초기 시작의 비효율을 극복
하기 위해Slow Start
적용ssthresh(Slow Start threshold)
,Slow Start의 임계치
에도달
하면Congestion Avoidance
를 통해선형 증가
3-중복 ACK
로 인해손실이 발생
하면,Fast Retransmit 을 수행
하여Fast Recovery 상태
로 들어간다.Fast Recovery 과정
을 통해cwnd 값
을1MSS로 줄이지 않고
절반으로 떨어 뜨린 후
다시선형 적인 증가
를수행
Timeout으로 데이터그램 손실
이 발생했을 때에는 무조건cwnd를 1MSS
로조정
[ 대칭키 암호화 ]
설명
암호화
/복호화
에사용되는 키
가동일한 암호화 방식
- 장점
공개키 암호화 방식
에 비해빠르다
- 단점
키를 관리하는 문제
로 인해공개키 방식
보다보안에 취약
(하나의 키
로암호화
/복호화
를 해야 하기 때문에공유
되어야 한다)
(인원이 증가
할 수록키 관리가 어려워짐
)- 예시
DES
/3DES
AES
SEED
[ 공개키 암호화 ]
설명
암호화
/복호화
를두개의 다른 키
를 통해서 하는암호화 방식
- 장점
키를 관리하기 편하며
,보안에 강하다
- 단점
대칭키(개인키)방식
에 비해속도가 느리다
- 예시
RSA
[ SSL(Secure Socket Layer) ]
ref : https://preamtree.tistory.com/38
용어 정리
- CA(
Certificate Authority
)
인증서
의핵심
은해당 사이트
가클라이언트가 의도한 서버가 맞는지 보장
해야 한다.이러한 인증서를 발급하는 기관
을CA
라고 한다.CA
를 통해서SSL 인증서
를발급
받아야 한다.(무료
or유료
)
- SSL 인증서 내용
서비스의 정보
(인증서를 발급한 CA
/서비스의 도메인
등)서버 측 공개키
(공개키의 내용
/공개키의 암호화 방법
등)
브라우저
는CA의 리스트
를보유
하고 있다
공인된 CA의 목록
들을 통해공개키 정보
도함께 가지고 있다
SSL의 핵심 방식
대칭키 암호화 방식
과공개키 암호화 방식
을적절히 혼합
하여탄생한 암호화 방식
이 바로SSL의 핵심 방식
이다- 원리
1)A
가B의 공개키
로암호화 통신
에 사용할자신의 대칭키
를암호화
하여B에게 전송
2)B
는암호문을 받아
,자신의 비밀키
로복호화
3)B
는A로부터 얻은 A의 대칭키
로A에게 보낼 평문
을암호화
하여A에게 전송
4)A
는자신의 대칭키
로암호문
을복호화
5) 이제 앞으로A의 대칭키
를 통해서암호화 통신
을지속
즉, 정리하면
대칭키를 주고 받는 과정
에서공개키를 사용
했을 뿐,그 이후에는 모두 대칭키 암호화 방식
을이용
SSL 원리
SSL
은실제 데이터의 공유
로는대칭키
를사용
하며,대칭키를 공유하는 방법
으로공개키 방식
을사용
한다
-->공개키 방식
은대칭키
보다비용이 크기 때문
- 사용하는 방식
실제 데이터
-->대칭키 방식
대칭키를 공유하기 위해
-->공개키 방식
SSL 동작 순서
- 크게
2가지 과정
으로 나눌 수 있음
인증서 발급
클라이언트-서버 통신
- 인증서 발급
웹사이트의 정보(도메인 등등)
와공개키
를CA
에 제출CA
는 검토 후[CA의 비밀키]
로 우리가[보낸 사이트의 정보 + 공개키]
를암호화
한인증서
를 만듬CA
는인증서
를웹사이트
에발급
- 클라이언트-서버 통신
사용자
가 https에 적용된 화면에 들어감서버
는해당 화면의 정보
와 함께[인증서]
를 보냄사용자
는브라우저
가 가진[공인 CA리스트]
에서해당 인증서
의발급기관
이 있는지확인
하며,유효기관 등 정보
들을확인
[공인 CA 리스트]
에 있다면[해당 CA기관의 공개키]
로 받은[인증서와 정보]
를복호화
한다복호화
를 통해인증서에 포함
되어 있는[서버의 공개키]
를추출
한다사용자
는[현재 통신에 필요한 대칭키]
를발급
하고추출
한[서버의 공개키]
로암호화
해서서버에 전송
서버
는[서버의 비밀키]
로사용자의 요청
을복호화
해서 통신에 필요한[대칭키]
를추출
한다- 이제
클라이언트
와서버
는 지금 통신에 필요한[대칭키]
를 모두 가지고 있으니,이것을 이용
해서실제 데이터를 주고 받는다!
사용자의 요청
에 대한트래픽
을여러 대의 서버
에균등하게 분산
시켜주어해결
하는 기법Load Balancer
를클라이언트
와서버 사이에 두고
,부하가 일어나지 않도록
여러 서버에 분산
분산식 웹 서비스
- 로드 밸런서가
서버를 선택하는 방식
- 라운드 로빈(Round Robin)
:순차적으로 시간단위로 할당
하는 방식(CPU 선점 스케줄링 방식
)- Least Connections
:연결 개수가 가장 적은 서버
를선택
- Source
:사용자 IP를 해싱하여 분배
(특정 사용자
가항상 같은 서버로 연결되게 보장
)
ref : https://siyoon210.tistory.com/147 /
동기
vs비동기
: 하나의 작업에 대해,작업을 어떠한 '흐름'으로 처리
할 것인가블로킹
vs논 블로킹
:전체적인 작업 '흐름'
을막느냐 안막느냐
(전체 작업의제어권
을주냐 안주냐
)
[ Blocking & Non-Blocking]
- Blocking
호출된 함수
가 자신이 할 일을 모두 마칠 때 까지제어권
을 계속 가지고서호출한 함수
에게 돌려주지 않아서계속 기다리도록 하는 방식
- Non-Blocking
호출된 함수
가 자신이 할 일을 채 마치지 않았더라도 바로제어권
을건네주어(return)
호출한 함수
가다른 일을 진행할 수 있도록
해주는 방식
[ Synchronous & Asynchronous ]
- Synchronous
호출된 함수
의 수행 결과 및 종료 여부를호출한 함수
가신경쓰는 것
- Asynchronous
호출된 함수
의 수행 결과 및 종료 여부를호출한 함수
가신경쓰지 않는 것
[ 조합 ]
Blocking
+Synchronous
결과가 처리
되어나올 때
까지제어권이 없으니
대기
해야 한다
NonBlocking
+Asynchronous
작업 요청
을 받아서바로 제어권을 넘기기 때문
에결과를 받을 때 까지
다른 일 수행 가능
NonBlocking
+Synchronous
CPU 제어권
을 바로반납
하여다른일을 수행할 수 있지만
,함수 처리 결과
를 알기 위해수시로 확인
한다
(수시로 확인
하는 과정에서Context Switching
이 계속 발생해서비효율적으로 동작
하게 됨)
Blocking
+Asynchronous
CPU 제어권을 바로 return 하지 않아서
비동기
라도계속 대기
하게 된다
HyperText Text Transfer Protocol
의 약자인터넷
에서데이터를 주고받을 때 사용되는 프로토콜
Stateless
라는 특징이 있다
--> 그래서클라이언트-서버간 정보를 유지
하기 위해쿠키,세션,토큰
과 같은인증 수단
이필요
- 2개의 포스팅 참고
- 인증-쿠키,세션,토큰 개요
- 토큰-Access Token / Refresh Token
- JWT(
Json Web Token
) 구조
- header :
해싱 알고리즘
등의 정보- payload :
실제 데이터
- signature :
유효성 검증
에 필요한고유한 암호화 코드
[ REST ]
Representational State Transfer
의 약자자원의 이름
을명시
하여상태 정보
를주고 받는 모든 것
을 의미통신을 위해 사용되는 하나의 아키텍처
전송 관련 상태
를표현하는 구조
[ API ]
Application Programming Interface
의 약자정보 사용자
가원하는 목표 달성
에 있어서 사용되는interface
모든 내부 로직
을 몰라도interface 사용법
만 알면사용이 가능
하다정보 제공자
와사용자 간
소통하기 위한 하나의 매개채
[ REST API ]
자원의 이름
을명시
하여상태 정보를 주고 받는 REST
에 기반한API
[ RESTful ]
REST 구조
에 맞게이루어져 있다는 뜻
목적에 맞게 행위
를HTTP method
에 맞추어야 한다
(CRUD 모두 POST로 하면 안됨
)
[ 공인 IP ]
전 세계에서 유일
한IP
로ISP(인터넷 서비스 공급자)
가제공
하는IP주소
외부에 공개
되어 있기 때문에인터넷에 연결된 다른 장비
로부터접근이 가능
- 그에 따라
방화벽
등과 같은보안설정이 필요
[ 사설 IP ]
IPV4의 부족
으로 인해모든 네트워크
가공인 IP를 사용
하는 것이불가능
해서,네트워크 안
에서라우터
를 통해할당
받는가상의 주소
별도의 설정 없이
는외부
에서접근이 불가능
특정 네트워크
에서만유일
사설 IP 주소
는 다음3가지 주소 대역
으로고정
- Class A :
10.0.0.0 ~ 10.255.255.255
- Class B :
172.16.0.0 ~ 172.31.255.255
- Class C :
192.168.0.0 ~ 192.168.255.255
[ NAT ]
설명
Network Address Translation
의 약자하나의 공인 IP
를여러개의 사설 IP
로변환
하는 시스템일반적
으로라우터가 이 역할
을수행함
NAT 테이블
을 통해정보를 요청한 프로토콜
,도메인
등다양한 정보
로기록
하여되돌아 오는 응답
을매핑
해준다사설 IP
로요청
을 할 때에는공인 IP로 요청
한 후포트포워딩 작업
을 통해통신
같은 사이트에 요청
을 하면더이상 NAT만으로는 여러 요청
의사설 IP
를구분할 수 없다
-->NAPT의 등장 원인
장점
공인 IP
의절약
공공 망
과분리
되어보안성이 높다
[ NAPT ]
설명
Network Address Port Translation
NAT의 한계
를극복
하기 위해 등장한 기법IP주소 변환
과 동시에포트번호
로변환
하여NAT의 한계 극복 가능
docekr와 같은 가상화 방식
에서도사용