HTTP + 암호화 = HTTPS
HTTP
는 암호화가 추가되지 않았기 때문에 보안에 취약한 반면, HTTPS
는 안전하게 데이터를 주고받을 수 있다.
하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 속도가 느리다.(오늘날에는 거의 차이를 못느낄 정도이다.)
또한 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생하다.
분산 처리 (캐시 사용, 로드밸런싱)
- 캐시된 웹페이지가 있으면 프록시 서버에서 바로 클라이언트에 전송보안 (요청과 응답의 필터링)
- 바이러스 검출, 컨텐츠 차단, 웹서버 방화벽시스템이 네트워크에 접속되어 있는 인터페이스 (NIC)의 설정 상황을 보여주거나 편집하는 유틸리티 명령어이다.
ipconfig의 경우는 windows에서 사용되는 명령어 이며, ifconfig 유닉스계열의 시스템에서 사용
HTTP 는 '비연결성'과 '무상태' 라는 특성을 지님으로 멀티 쓰레드 환경에서 웹 어플리케이션이 보다 많은 요청과 응답을 할 수 있도록 한다. (상태를 저장해야 하는 서버의 부담을 줄임)
Keep Alive!
1. 쿠키
2. 세션
키-밸류
형태로 웹 브라우저의 쿠키 저장소에 저장=> 쿠키와 세션의 문제점들을 보완하기 위해 토큰( Token )기반의 인증 방식이 도입
인터넷
인트라넷
엑스트라넷
허브
스위치
[정리]
허브는 다른 모든 포트에서 허브로 들어오는 모든 트래픽을 보내는 간단한 장치이다. 이로 인해 네트워크에서 불필요한 트래픽 흐름이 많이 발생하여 충돌이 발생할 수 있다.
반면에 스위치는 연결된 장치에 대한 정보를 수집하고 관련 포트를 통해서만 들어오는 트래픽을 전달한다. 또한 스위치에서 동시 통신을 유지할 수 있다.
따라서 허브는 소규모 네트워크에 적합하고 스위치는 트래픽이 많은 대규모 네트워크에 더 적합하다.
= 유동IP(Dynamic Host Configuration Protocol, DHCP)와 고정IP(Static IP) 의 차이점
고정 IP
는 사용자 전용으로 부여된 IP 주소로 이를 반납하기 전까지는 IP 정보가 변경되지 않고 사용이 가능하며 다른 장비에서 해당 주소에 대한 사용이 불가하다. IP를 고정시킴으로써 외부에서 동일한 주소로 통신할 수 있기 때문에 이를 방화벽을 통한 통신을 제어하여 관리할 수 있다.
반면 유동 IP
는 고정적이지 않고 필요할 때 IP 주소를 할당하여 사용할 수 있도록 한다. 예를 들어 고정 IP 보다 더 많은 사용이 필요한 장비가 있을 경우 유동 IP를 통해 장비를 사용할 때 돌아가면서 IP를 부여하여 사용할 수 있다. 이는 부족한 IP 개수 문제를 해결할 수 있으며 단말기들의 IP 회전율과 가용성을 높여 준다는 장점이 있습니다.
IP문제를 해결하고자 나온 것이 유동 IP
한 컴퓨터가 사용하지 않을 때 그 IP를 다른 컴퓨터에게 빌려주는 개념!
방화벽은 실질적으로 IP/Port 기반으로 차단하는 솔루션이기 때문에 외부에서 내부로 반드시 들어와야 하는 서비스, 예를 들어 웹/메일 서비스와 같은 경우에는 방화벽은 외부에서 누가 들어올 지 정의할 수 없으므로, 관련 서비스 포트를 모두 허용으로 설정해야 한다.
그렇게 되면, 일반 유저뿐만 아니라 악의적인 의도를 가진 해킹/악성코드/스팸메일 등도 여과없이 들어올 수 밖에 없으므로, 이러한 방화벽의 한계점을 보완하기 위해(대체는 아님) 나온 솔루션이 침입 탐지(IDS)/방지(IPS) 시스템이다.
근래에 도입되는 솔루션은 대부분은 IPS
IPS
: 침입탐지(Intrusion Detection), 안티 바이러스(Anti-virus)와 같은 Signature 기반의 기술들과 방화벽(Firewall)과 같은 네트워크 기반의 차단 솔루션을 논리적으로 결합한 방식IP Address의 한계 : IP Address만을 이용해 컴퓨터로 데이터를 보낸다면 컴퓨터는 그 데이터를 받지만, 문제는 그 데이터가 어느 프로세스에서 처리되어야 하는 것인지를 알 수가 없다.
통신을 해야하는 프로세스는 각자 자신의 Port를 가지고 있고, 해당 Port를 통해 데이터를 받는다.
Port 정보를 통해 어떤 프로세스가 메세지를 받아야 하는지 알 수 있다.
Port는 TCP 계층에서 추가된다.
자주 사용되는 port : 80(http), 443(https), ftp(20,21), ...
<3-handshaking>
Why?
장치들 사이에 논리적인 접속(session)을 성립하기 위해!
SYN 패킷
을 보낸다. (sequence : x)ACK
와 SYN 패킷
을 보낸다. (sequence : y, ACK : x + 1)ACK(y+1)
를 서버로 보내면 연결이 이루어진다.SYN
: synchronize sequence numbersACK
: acknowledgment<4-handshaking>
Why?
세션을 종료하기 위해!
FIN 플래그
를 보낸다.FIN
을 받고, 확인했다는 ACK
를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)FIN 플래그
를 클라이언트에게 보낸다.FIN
을 받고, 확인했다는 ACK
를 서버에게 보낸다. (단, 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다)ACK
를 받은 이후 소켓을 닫는다 (Closed)TIME_WAIT
: Client가 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정B의 공개키
를 이용하여 평문을 암호화 한다.B의 비밀키
로만 복호화가 가능하다. B는 자신의 비밀키로 복호화한 평문을 확인하고, A의 공개키
로 응답을 암호화하여 A에게 보낸다. A의 비밀키
로 암호화된 응답문을 복호화한다.B의 공개키로
암호화 통신에 사용할 대칭키를 암호화하여 B에게 보낸다.자신(B)의 비밀키
로 복호화한다.대칭키
로 A에게 보낼 평문을 암호화하여 A에게 보낸다.대칭키
로 암호문을 복호화한다.=> 이 방식이 바로 SSL(Secure Socket Layer)
의 시초