
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/3DESAESSEED
[ 공개키 암호화 ]
설명
암호화/복호화를두개의 다른 키를 통해서 하는암호화 방식- 장점
키를 관리하기 편하며,보안에 강하다- 단점
대칭키(개인키)방식에 비해속도가 느리다- 예시
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 TranslationNAT의 한계를극복하기 위해 등장한 기법IP주소 변환과 동시에포트번호로변환하여NAT의 한계 극복 가능docekr와 같은 가상화 방식에서도사용