네트워크 응용의 구조
1. client - server 구조
클라이언트란 요청(Request)을 보내는 쪽을 의미하며 일반적으로 웹 관점에서는 브라우저를 의미한다. 그리고 서버는 요청에 응답(Response)하는 쪽을 의미하며 일반적으로 데이터를 보내주는 컴퓨터를 의미한다. 이렇게 클라이언트와 서버가 상호작용하는 과정으로 웹이 이루어진다.
- ex. 웹 검색
2. peer-to-peer (P2P) 구조
Peer to Peer의 줄임말로 중앙 서버를 거치지 않고 클라이언트 컴퓨터끼리 직접 통신하는 방식을 통칭한다.
- ex. 토렌트
3. 하이브리드
하이브리드 네트워크는 둘 이상의 연결 기술 또는 토폴로지를 사용하는 모든 컴퓨터 네트워크이다.
응용
- 네트워크로 연결된 컴퓨터들이 협력하여 제공하는 서비스
ex) 구글검색
웹 브라우저 <-> 웹서버
클라이언트 서버
프로세스 프로세스
프로세스간 통신
- 프로세스*의 종류
- 서버 프로세스
- 클라이언트 프로세스
- 피어 프로세스
*프로세스
- 하나의 컴퓨터에서 독립된 메모리 공간을 가지고 수행되고 있는 프로그램의 단위
- 특정 기기에서 돌아가는 프로그램
프로세스의 주소
- 기계주소 : IP
- 포트번호 : 패킷의 주소
하나의 IP에는 2^16개의 포트번호가 있다. 참고로 IP는 아파트의 주소, 포트번호는 동 호수라고 생각하면 이해하기 쉽다.
소켓 통신
소켓(Socket)은 TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점을 말한다. 소켓통신은 이러한 소켓을 통해 서버-클라이언트간 데이터를 주고받는 양방향 연결 지향성 통신을 의미한다. 소켓통신은 보통 지속적으로 연결을 유지하면서 실시간으로 데이터를 주고받아야 하는 경우에는 사용됩니다.
인터넷 전송계층의 서비스
TCP
- 연결기반 전송계층
- 연결에 대한 관리
- 데이터 유실 복구
- 데이터 순서 보장
- 혼잡에 민감한 패킷전송률 조정
UDP
- 무연결 전송계층
- 데이터 유실 가능
- 데이터 순서 역전 가능
- 최대한 성능으로 패킷 전송
FTP(File Transfer Protocol)
목적 : 원격 host에 있는 파일을 가져오거나 파일을 보내기 위한 protocol
가정 1 : 클라이언트 사용자는 서버의 파일을 읽을 수 있는 권한의 계정이 있다.
가정 2 : 계정이 없는 경우도 접근가능하도록
FTP의 특징
- 세션 로그인과 종료가 존재
- 로그인을 통하여 권한 획득
- 로그인 정보를 서버가 관리
- Stateful Protocol
HTTP
텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.
*URL(Universal Resource Locator)
서버에 자원을 요청하기 위해 입력하는 영문 주소이다.
예) http://formal.kau.ac.kr/comnet/
1. http : 프로토콜 이름
2. //formal.kau.ac.kr : 호스트 이름
3. /comnet/ : 호스트 안의 디렉토리명 , 생략하면 index.html을 보여달라는 뜻이 되기도 한다.
HTTP Transaction
하나의 요청, 하나의 응답으로 이루어져 있다.
HTTP transaction의 특징
Stateless 프로토콜 : 이전 요청의 상태에 영향을 받지 않는다. 서버 확장성이 높으나 클라이언트가 추가 데이터를 전송해야 한다.
비연결성 : 비연결성은 클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말한다.
쿠키
- 상태정보를 담는 도구
- 서버 '응용'이 클라이언트의 이전 작업정보(state)를 파악하기 위한 도구
쿠키 프로토콜
- HTTP Response 헤더 (서버->클라)
set-cookie 라는 필드
- HTTP Request (클라->서버)
Cookie 나눌 필드
예시 : GET 요청으로 HTTP/1.1 요청이 들어오면, 응답 시에 set-cookie의 visited를 1 증가시킨다. 동일한 사이트에 접속 시, 이 쿠키를 보여준다.
방법론
- 기억해야할 할 사항을 쿠키에 담아 클라이언트가 기억하도록 하고 서버는 클라이언트의 방문시 주는 쿠키 정보에 맞추어 반응한다.
문제
- 클라이언트에 너무 많은 권한과 정보를 준다.
- 해결책 : 세션
세션
- 클라이언트에게 세션 ID정보만 쿠키로 전달하고 세션들의 특성은 서버가 관리한다. 예) 몇 번 방문했는지? 쿠키-> 클라이언트에 보관, 세션-> 서버에 저장 / 세션 아이디로 어떤 클라이언트인지 알 수 있음
HTTP
- 성능향상(다중 Transaction)
- Persistent HTTP
웹클라이언트와 서버간의 연결 성립 이후 SYN, SYN-ACK, ACK 핸드셰이킹이 발생하고 이를 바탕으로 통신을 구성한 뒤 연결을 끊는 방식이 웹을 통한 멀티미디어 컨텐츠의 발달로 인해, TCP Connection 의 재사용이 요구되게 되었다.
따라서 바로 연결을 끊지 않고 다음 연결까지 잠깐 기다림으로써 연속적인 데이터가 올 경우 효과적인 방식으로 변경되었다.
- Pipelined HTTP
클라이언트는 각 요청에 대한 응답을 기다리지 않고, 여러개의 HTTP Request 를 하나의 TCP/IP Packet 으로 연속적으로 Packing 해서 요청을 보낸다. 파이프라이닝이 적용되면, 하나의 Connection 으로 다수의 Request 와 Response 를 처리할 수 있게끔 Network Latency 를 줄일 수 있다.
- 성능향상2(네트워크구조)
-web cache
웹 캐시
ISP*에서 비용절감을 위하여 이전에 가져온 적이 있는 문서를 DB에 임시저장해 놓았다가 동일 문서가 다시 요청될 때 재사용한다.
웹 캐시는 중개 상인의 개념이다.
- web cache가 주는 장점
- 요청에 대한 응답 시간단축
- 제공하는 교통량 증가 -> 더 많은 사용자 수용
- 더 적은 서버 용량으로 더 많은 사용자 지원
*ISP -> 인터넷 서비스 제공자
추가 주제
- HTTP
인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다.
HTTP는 텍스트 교환이므로 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈 존재한다.
- HTTPS(Hyper Text Transfer Protocol Secure)
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약, HTTPS는 텍스트를 암호화한다. (HTTP + 데이터 암호화)
HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약한 반면, HTTPS는 안전하게 데이터를 주고받을 수 있다.
하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 속도가 느리다. (물론 오늘날에는 거의 차이를 못느낄 정도이다.) 또한 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다.
따라서 개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용해야 하지만, 노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 된다.
참고