2.1 네트워크 애플리케이션의 원리
네트워크 애플리케이션 개발의 중심은 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것
라우터나 링크 계층의 스위치와 같이 코어 게층에서 실행되는 소프트웨어를 작성할 필요 없음
→ 인터넷 애플리케이션의 광대하고 빠른 발전의 원동력
2.1.1 네트워크 애플리케이션 구조
- 클라이언트-서버 구조
- P2P 구조
- 클라이언트 - 서버 구조
- server : 항상 켜져 있는 호스트, 고정 IP주소를 가짐, 하나의 서버로 모든 클라이언트의 요청에 응답할 수 없으므로 주로 데이터센터에 모여있음
- client : 가끔 혹은 항상 켜져 있음, 이 구조 상에서의 클라이언트는 직접 통신하지 않음
- P2P (Peer To Peer)
- 서버에 최소한의 의존
- Peer는 isp가 소유하지 않고, 사용자가 제어하는 데스크탑이거나 랩탑
- 주요 특징 : 자가 확장성 (self - scalability)= 비용 효율적
- 각 피어들은 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가함
2.1.2 프로세스 간 통신
실제 통신하는 것은 process (종단 시스템에서 실행됨)
메시지 교환을 통한 통신
같은 호스트에서 두 개 이상의 프로세스가 통신할 수도 있음 = IPc (inter-process commmunication)
클라이언트와 서버 프로세스
(송신 프로세스) — 메시지를 만들어 네트워크 계층으로 전달 — (수신 프로세스) 응답 메시지를 보냄
- 웹에서는 브라우저-클라이언트, 웹 서버 - 서버
- P2P 파일 공유 시스템에서는 한 프로세스가 서버와 클라이언트 모두 가능함
- (파일 다운 - 클라이언트, 파일 업로드 - 서버)
클라이언트 : 두 프로세스 간 통신 세션에서 통신을 초기화하는 프로세스. 다른 프로세스와 세션을 시작하기 위해 접속을 초기화
서버 : 세션을 시작하기 위해 접속을 기다리는 프로세스
프로세스와 컴퓨터 네트워크 사이의 인터페이스
프로세스는 **소켓(socket)**을 통해 네트워크 계층으로 메시지를 주고 받음
소켓 : 애플리케이션 계층과 트렌스포트 계층의 인터페이스 = API (application programming interface)
소켓 뒤편에 전송 구조가 있음
- 애플리케이션 개발자는 → 소켓의 애플리케이션 계층에 대한 모든 통제권은 갖지만, 소켓의 트렌스포트 계층에 대한 통제권은 거의 갖지 못함
- 애플리케이션 계층과 트렌스포트 계층 모두 소켓 있음ㅇㅇ
프로세스 주소 배정
인터넷에서 호스트는 IP주소로 식별됨. 32비트 구성
한 호스트가 많은 네트워크 응용을 수행할 수 있으므로 수신 소켓을 식별하기 위해 목적지 포트 번호를 사용함
(http… 웹 서버의 경우 port : 80, SMTP… 메일 서버의 경우 port : 25)
소켓 페어 (socket pair)
이 네개의 값을 통해 두 프로세스 간 통신을 특정화 할 수 있음
- source ip + source port
- destination ip + destination port
2.1.3 애플리케이션이 이용 가능한 트랜스포트 서비스
- 신뢰적 데이터 전송 (data integrity)
- 보장된 데이터 전송 서비스를 제공하는 프로토콜 = 신뢰적 데이터 전송 (rdp, tcp)
- 쓰루풋(thoughput, 처리량)멀티미디어와 같은 경우…? minimmum 요구..?
- 네트워크 경로를 따라 두 프로세스 간의 통신 세션에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율
- 시간 timing인터넷 전화, 멀티플레이어 게임과 같은 상호 작용 실시간 애플리케이션에 매력적
- 시간 보장 제공
- 보안 security수신 호스트 → 트랜스포트 프로토콜은 수신 프로세스로 전달하기 전 데이터 암호 해독 가능
- 송신 호스트 → 트렌스포트 프로토콜은 전송하는 모든 데이터를 암호화할 수 있음
→ encryption, data integrity
2.1.4 인터넷 전송 프로토콜이 제공하는 서비스
인터넷은 애플리케이션에게 2개의 전송 프로토콜을 제공함 → UDP, TCP
- TCP (Transport Control Protocol)
- 연결 지향형 서비스 (connection - oriented)
- 메시지를 전송하기 전, 서로 전송 제어 정보 공유
- 3-way handshaking
- 프로세스가 서로에게 동시에 메시지 전송 가능 = full-duplex
- 신뢰적인 데이터 전송 서비스 (reliable transport)
- 혼잡 제어 (congestion control)
- 통신하는 프로세스의 직접적 이득 보다는 전체 성능 향상을 위해 혼잡도 조절
- flow control
- 제공하지 않는 것 : 시간, 최소한의 쓰루풋 보장, 보안
- 연결 지향형 서비스 (connection - oriented)
- UDP (User Datagram Protocol)
- best effort service model
- 비연결형 (connection miss)
- 비신뢰적인 데이터 전송 서비스 (unreliable data transport)
- 순서 엉망
- 혼잡 제어 x
- UDP 사용 이유 : 오버헤드 없고 빠르다
- 수정을 가하지 않은 , vanilla TCP나 UDP는 보안, 즉 암호화를 제공하지 않는다.요즘에 tls를 표준으로 많이 사용2.1.5 애플리케이션 계층 프로토콜이 정의하는 것
- [format]교환 메시지 타입 (요청 메시지, 응답 메시지 .., )
- [format]여러 메시지 타입의 문법 (메시지 내부의 필드와 필드 간 구별 방법)
- [order]필드의 의미, 즉 필드에 있는 정보의 의미
- [action] 언제, 어떻게 프로세스가 메시지를 전송하고 응답하는지 결정하는 규칙
- Web page 라고 하는 객체들로 구성
- 객체(object)는 단순히 단일 URL로 지정할 수 있는 하나의 파일을 뜻함 (html 파일, jpeg 이미지, gif 이미지, 오디오 클립 등)
- html 파일은 페이지 내부의 다른 객체를 그 객체의 url로 참조함
- 각 url은 객체를 갖고 있는 서버의 호스트 네임과 객체의 경로 이름을 가짐
- 웹의 애플리케이션 계층 프로토콜 - tcp
- 2.2.1 http 개요
- 트랜스포트 계층이지만 어플리케이션 계층에서 구현하여 전송 전, 키로 암호화함
- → TLS (Transport Layer Security) : 데이터 무결성, 종점 인증 시스템, 암호화된 tcp 연결 제공
사용자가 웹 페이지 요청 → 브라우저가 페이지 내부의 객체에 대한 http 요청 메시지를 전송 → 서버의 요청 수신 , 객체 포함하는 http 응답 메시지 전송
- http 클라이언트는 서버에 tcp 연결 요청 … port 번호 80으로 → 서버의 응답 → 연결되면 브라우저와 서버 프로세스는 각자의 소켓 인퍼페이스를 통해 tcp 접속
클라이언트는 http 요청 메시지를 소켓으로 보내고, 소켓으로부터 http 응답 메시지 받음
http 서버는 소켓으로 요청 메시지 받고 → 응답 메시지 보냄
- http를 비상태 프로토콜이라 함 (stateless protocol)↔ statefull 프로토콜은 복잡함
- 과거 기록 다 저장해야 하고, 중간에 튕기면 그 상태 유지하기 위한 설정 등이 필요함
- 클라이언트에 대한 정보를 유지하지 않음
2.2.2 비지속 연결과 지속 연결
- 비지속 연결 (non-persistent connection)
- http 클라이언트는 http의 기본 포트 번호 80을 통해 어쩌고 서버로 tcp 연결 시도. tcp 연결과 관련하여 클라이언트와 서버 각각에 소켓 있음
- http 클라이언트는 1단계에서 설정된 tcp 연결 소켓을 통해 서버로 http 요청 메시지를 보냄. 경로 이름 포함
- 연결 소켓을 통해 http 서버는 요청 메시지를 받음, 저장장치로부터 객체 추출, 응답 메시지에 객체 캡슐화, 소켓을 통해 응답 메시지 전송 → tcp에게 연결 끊을 것을 요청 ( 그러나 응답 메시지 와야 끊음)
- http 클라이언트가 응답 메시지 받으면 , tcp 연결 종료 → 메시지로부터 파일 추출, 파일 조사하고 객체에 대한 참조 찾음
- RTT (Round-Trip Time)
- 패킷이 클라이언트로부터 ~ 서버, 서버로부터 ~ 다시 클라이언트로 가는 왕복 시간
- 각 객체마다 2 rtt 필요
- 여러 클라이언트의 요청을 동시에 서비스하는 웹 서버에 심각한 부담
- → 파이프라이닝 (pipelining)
- 같은 클라이언트와 서버 간의 이후 요청과 응답은 같은 연결을 통해 보내진다.
- 지속 연결 HTTP (HTTP 1.1)
- 1 RTT - tcp 연결 요청
- 비지속 = 연결이 다른 객체를 위해 유지되지 않는다.
2.2.3 http 메시지 포맷
- 요청 메시지
- 응답 메시지
아스키코드 텍스트로 쓰여 있어 사람들이 읽을 수 있음
http 요청 메시지
첫 줄 : request line (요청 라인)
→ method(방식) 필드 : GET, POST, HEAD, PUT, DELETE… 메서드
- GET : 서버에게 데이터 전송. URL 필드로 식별되는 객체 요청할 때 사용 (?를 따라간다?)
- POST : 요청 메시지의 개체 몸체 - 사용자가 폼을 채워넣을 때 사용함.
- 클라이언트에서 서버로, 웹페이지에서 동작하기 위한 메서드
- HEAD : 헤더 정보 요청할 때 사용
- PUT : 서버에 새 파일(객체) 업로드, 파일 교체… 해커들이 파일 교체, 파일 업데이트, 보내는 명령 수정 가능해서 위험해서 사용을 권고함
→ URL 필드
→ http 버전 필드
나머지 줄 : header line (헤더 라인)
http 메시지의 대부분은 get 방식을 사용한다. 브라우저가 url 필드로 식별되는 객체를 요청할 때 사용된다.
http 응답 메시지
상태 라인
→ 버전 필드, 상태 코드, 해당 상태 메시지
헤더 라인
개체 몸체
- 상태 코드 (response status)
- 200 OK : 요청 성공, 정보가 응답으로 전송됨
- 301 moved Permanently : 요청 객체의 영원한 이동. 새로운 URL은 응답 메시지의 Location : 헤더에 나와있음. 클라이언트 소프트웨어는 자동으로 새로운 URL 추출함
- 400 bad request : 서버가 요청을 이해할 수 없다는 일반 오류 코드
- 404 Not Found : 요청 문서가 서버에 존재하지 않는다.
- 505 HTTP Version Not Supported : 요청 http 프로토콜 버전을 서버가 지원하지 않는다.
2.2.4 사용자와 서버 간의 상호작용 : 쿠키
http 서버의 GET/ response interaction은 상태를 유지하지 않는다.
사용자 식별을 위한 사용, 상태 유지를 위한 사용
4가지 구성요소
- http 응답 메시지 쿠키 헤더 라인
- http 요청 메시지 쿠키 헤더 라인
- 사용자의 브라우저에 사용자 종단 시스템과 관리를 지속시키는 쿠키 파일
- 웹 사이트의 백엔드 데이터베이스
웹 서버에 요청이 들어오면 서버는 유일한 식별번호 (IP)를 만들고, 이 식별번호로 인덱스되는 백엔드 데이터베이스 안에 엔트리를 만든다. 그런 후 웹 서버는 브라우저에 응답하는데, 이 http 응답에 식별번호를 담고있는 Set-cookie : 헤더가 포함된다.
브라우저가 http 응답을 받았을 때, Set-cookie의 헤더를 볼 수 있다. 브라우저는 관리하는 특정한 쿠키 파일에 그 라인을 덧붙이고 이 라인은 서버의 호스트 네임과 Set-cookie: 헤더와 식별번호를 포함한다.
서버로의 http 요청은 Cookie : —— 과 같은 헤더 라인을 넣어 요청 메시지를 보낸다.
쿠키 사용 사례 :
- 권한 (authorization)
- 장바구니 유지
- 추천
- 사용자 session state 유지 ( 웹 메일…)
2.2.5 웹 캐싱 (Web cache), 프록시 서버
원 출처의 웹 서버를 대신하여 http 요구를 충족시키는 네트워크 개체
자체적으로 저장 디스크를 갖고 있어 최근 호출된 객체의 사본을 저장 및 보존
- 네트워크 트래픽과
- 브라우저는 웹 캐시와 tcp 연결을 설정하고 웹 캐시에 있는 객체에 대한 http 요청을 보냄
- 웹 캐시는 객체의 사본이 자기에게 저장되어 있는지 확인.
저장되어 있으면 - 클라이언트 브라우저로 http 응답 메시지 + 객체 전송
저장되어있지 않으면 - 원출처의 서버인 www.어쩌구로 tcp 연결 설정 → 캐시와 서버 간의 tcp 연결로 객체에 대한 http 요청 (이러한 요청을 받으면 기점 서버는 웹 캐시로 http 응답 메시지 + 객체 전송)
- 웹 캐시가 객체를 수신할 때 객체를 지역 저장장치에 복사하고 → 클라이언트 브라우저에 http 응답 메시지 + 객체 사본을 … 클라이언트 브라우저와 웹 캐시 사이에 설정된 tcp 연결을 통해 전송함
** 캐시는 서버이면서 클라이언트이다 **
조건부 GET
웹 캐싱이 사용자가 느끼는 응답 시간을 줄일 수 있지만, 새로운 문제 야기 → 객체의 복사본이 새 것이 아닐 수 있음
If-modified-since :
- 304 not modified클라이언트에게 요청 객체의 캐시된 복사본을 사용하라는 의미
- 요청한 객체를 포함하지 않음. - 대역폭 낭비 없음, 사용자의 응답 시간 줄임
- 200 OK - 포함
HTTP 1.1
하나의 tcp로 multiple, pipelined GETs
문제 : 서버는 FCFS 방식으로 응답함 (=First Come First Served)
→ 큰 오브젝트 뒤에 들어온 작은 오브젝트는 쓸데없이 기다리는 시간이 길어짐 (HOL blocking. Head Of Line)
→ TCP에서 잃어버린 세그먼트를 재전송함 (손실 회복) … 객체의 전송을 지연시킬 수 있으며 네트워크 효율성에도 영향을 미침
HTTP 2.0
목표 : 다중 오브젝트의 http 요청 메시지로 인한 딜레이 감소
서버에서 클라이언트로 보내는 메시지에 flexibility를 증가함
→ 요청한 오브젝트를 보내는 순서를 FCFS에 의존하지 않고 클라이언트가 정의한 오브젝트 우선순위에 기반함
→ http1.1에서 매번 요청하고 응답하는 과정이 불필요하다 생각해서 요청하지 않은 오브젝트를 클라이언트한테 그냥 push함
→ 오브젝트를 frame 단위로 쪼갠다. (HOL blocking 문제 완화)
HTTP 3.0
http2.0 에서는 tcp 연결에 보안 기능이 따로 없음
→ 보안 추가
→ 에러 처리 기능
→ 혼잡 제어 기능 (파이프라이닝 증가) congestion control over UDP (= QUIC)
2.3 인터넷 전자메일
- 사용자 에이전트 : 사용자가 메시지를 읽고, 응답, 전달, 저장, 구성하게 해줌
- 메일서버 : 전자메일 기반 구조의 중심.
- 각 수신자는 메일 서버 안에 메일박스(mail box)를 가짐. 메시지 유지 및 관리 역할
- 메시지 큐 : 메일을 보낼 수 없다면, 메시지 큐에 보관해두고 나중에 전달을 위한 재시도 함
- SMTP (Simple Mail Transfer Protocol)
- 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜
- TCP의 신뢰적인 데이터 전송 서비스 이용
2.3.2 HTTP와의 비교 (RFC)
포트 번호 25, 신뢰적 전송 서비스인 TCP 사용
다이렉트 전송 : 한 메일 서버로부터 다른 메일 서버로 파일(메시지)를 전송
- 전송을 위한 3가지 동작메시지 전송
- 종료
- 핸드쉐이킹 (그리팅)…. tcp 연결 위함
- 커맨드/ response interaction (http와 유사)As;dkfesstatus code and phr
- commands : 아스키코드
→ 메시지는 무조건 아스키코드 7비트여야 함!!
2.3.3 메일 접속 프로토콜
[SMTP] Simple Mail Transfer Protocol
[IMAP] internet Mail Access protocol
사용자 에이언트 UA는 자신의 메일 서버로 전자메일 메시지를 SMTP를 이요하여 보냄
사용자의 메일 서버는 SMTP(클라이언트)를 사용하여 수신자의 메일 서버로 전자메일 메시지를 중계함
송신자의 UA -(SMTP)→ 송신자의 메일 서버 -(SMTP)→ 송신자의 메일 서버 -(IMAP)→ 수신자의 UA
수신자 에이전트는 메시지를 얻기 위해 SMTP을 사용할 수 없음 (smtp는 push로 동작하는데 메시지를 얻는 건 PULL의 동작으로 이뤄짐)
→ POP3 (post office protocol 3), IMAP, HTTP 와 같은 메일 접속 프로토콜이 있음.
HTTP
구글, 야후, 웹 기반 전자메일의 형태…
여전히 SMTP를 사용하여 메시지를 다른 메일 서버로 전달하거나 다른 메일 서버로부터 수신함
'전공 테트리스 > 데이터통신 및 네트워크' 카테고리의 다른 글
[네트워크] 6. Transport Layer (2) (0) | 2024.05.18 |
---|---|
[네트워크] 5. Transport Layer (1) (0) | 2024.05.18 |
[네트워크] 4. Application Layer (2) (0) | 2024.05.18 |
[네트워크] 2. Introduction to Computer Network 2 (0) | 2024.05.18 |
[네트워크] 1. Introduction to Computer Network 1 (2) | 2024.04.27 |