HUFS GSECE
[24-1] 컴퓨터네트워크
2. 애플리케이션 계층

Chapter 2. 애플리케이션 계층

💡
2024년 3월 20일 (수) 18:30 ~ 20:00

Chapter Overview

  • Web and HTTP
    • Web은 서비스고, Web을 구현한 프로토콜이 HTTP임.
    • HTTP 형식에 맞게 요청과 응답을 주고 받는 것이 Web의 기본.
  • E-mail
    • SMTP, POP3, IMAP
    • SMTP (Simple Mail Transfer Protocol) : 메일을 보내는 프로토콜
    • IMAP (Internet Message Access Protocol) : 메일을 읽는 프로토콜
  • DNS (Domain Name System)
  • P2P
  • Socket Programming
    • TCP
    • UDP
    • 서버에게 a라는 문자를 보내면, 서버는 A라고 대문자로 만들어서 돌려준다. 이런 서비스를 제공하는 서버를 만들어보자. (이런 거를 해볼거임)
      • 근데 이제 이걸 TCP랑 UDP랑 각각으로 구현해보고, 어떤 차이가 있는지 한 번 알아보자

제일 중요한 건 HTTP, DNS 이고, Socket Programming은 훑어보는 정도로 하고 넘어가자. (나머지는 시간상 패스)

전송 계층 (transport layer) 에서 어떤 프로토콜을 지원하냐에 따라서 어떤 걸 쓸 수 있는지가 정해지기 때문에 그거 보고 할 예정


Web app을 만든다면 web server software와 browser software를 만드는 것

network core 부분은 신경쓰지 않아도 됨

그래서 중간 부분은 minimalism 하게

  • server

    • always on host
    • permanent ip address
    • often in data centers, for scaling
  • clients

    • contact, communicate with server
    • may be intermittently connected
    • may have dynamic ip addresses
    • do not communicate directly with each other
    • examples: HTTP, IMAP, FTP

peer to peer (p2p)

💡
2024년 3월 27일 (수) 18:30 ~ 20:00

Creating a network app

우리가 매일 접하는 것들 - 그게 바로 응용 계층

응용 계층 안에서 더 들어가보면,

process가 돌고 있고, process가 각자의 응용 서비스를 구현/구동한다.

프로세스 간의 통신, 클라이언트 - 서버 간 통신 (P2P 구조에서는 양쪽 프로세스가 다 구동되고 있다.)

그러면 메시지는 결국 아래 계층으로 내려가서 전달되어야 한다.

그러면 아래 계층으로는 어떻게 내려가나? 바로 "소켓(Sockets)"이다.

Socket

소켓은 데이터가 이동되는, 창구가 된다. '문'과 같다.

그러면 application process 이외에 transport, network, link layer에 내려보낼 때는 믿고 내려보낸다.

process별로 소켓을 가지고 있다.

process는 소켓을 통해 transport layer로 데이터를 보낸다. 그리고 transport layer에서는 TCP, UDP 중 하나를 선택해서 데이터를 보낸다.

그리고 결국 application layer로 데이터를 보내려면 socket number를 알아야 한다.

Addressing processes

  • to receive messages, process must have identifier
  • host device has unique 32-bit IP address

특정 호스트에서 실행되고 있는 프로세스를 찾아가는데, 그 호스트의 IP 주소로 충분한가?

그렇지 않다. 왜냐하면, 하나의 호스트에는 여러 개의 프로세스가 실행되고 있을 수 있기 때문이다.

그래서 IP 주소와 포트 번호를 함께 사용한다.

여기서 포트 번호는 identifier로 사용된다.


포트 번호는 TCP, UDP 즉 transport layer에서 사용한다.

포트 번호는 TCP, UDP 헤더를 보면 Source Port와 Destination Port를 합쳐서 32비트로 구성되어 있다.

그러면 각 포트는 16비트이고, 그렇기 때문에 0 ~ 65535까지 사용할 수 있다.

그 중에 0~1000번까지는 Well-known port number로 사용되고 있다.

그리고 Port에 대해서는 그 애플리케이션이 구동되는 Host 내에서만 Unique하면 된다.

Application Layer Protocol defines:

  • types of messages exchanged, e.g. request, response -> 서버와 클라이언트 간에는 request, response가 주고받는 메시지의 형태가 정해져 있다.

  • message syntax: what fields in messages & how fields are delineated -> 어떤 form (형태) 을 가지고 있다.

  • message semantics: meaning of information in fields -> 전송에 대한 rule이 정해져 있다.

  • Open Protocols: RFCs 에서 정의되어 있는 프로토콜

    • e.g. HTTP, SMTP, POP3, IMAP, DNS
  • Proprietary Protocols: e.g. Skype, BitTorrent

What transport service does an app need?

  • Data integrity
    • some apps require 100% reliable data transfer
    • Other apps can tolerate some loss
  • Timing
    • some apps require low delay to be effective
  • Throughput
    • some apps require minimum amount of throughput to be effective
    • Other apps make use of whatever throughput they get
  • Security
    • encryption, data integrity, etc.

Streaming audio/video의 경우는 Delay Gitter (딜레이 지터?) 가 중요하다. -> 청크 10개 간다고 했을 때 첫 번째껀 금방 왔는데 두 번째꺼가 늦게 오면 끊기는 현상이 발생한다.

TCP vs UDP

  • TCP
    • 신뢰적 전송 (reliable)
    • 흐름 제어 (flow control)
    • 혼잡 제어 (Congestion Control)
    • 연결 지향 (Connection-oriented)
    • 속도가 느리다
  • UDP
    • Unreliable data transfer between sending and receiving process

UDP 프로토콜을 보면

  • Source Port : 어디서 보냈는지
  • Destination Port : 어떤 프로세스로 보낼 것인가
  • Length : UDP 헤더를 포함한 전체 길이
  • Checksum : error detection

그러면 과연 UDP는 왜 쓰지? -> 실시간 스트리밍 같은 경우에는 속도가 중요하다. 그래서 속도가 빠른 UDP를 사용한다.

Securing TCP

  • 기본 TCP & UDP Sockets : 암호화 미지원, 패스워드도 평문 전송

그래서 TLS (Transport Layer Security) 를 사용한다.

보안 조건

  • 기밀성 : Encrypted TCP Connections
  • 무결성 : Data Integrity
  • 종단점 인증 : End-point Authentication

TLS(SSL) and TCP/IP

  • Normal Application : Application - TCP - IP
  • Application with TLS : Application - TLS - TCP - IP

Application이 평문을 내려보내면 TLS가 암호화를 하고 TCP로 보내고, TCP가 IP로 보내는 구조

  • TLS는 애플리케이션을 위한 API를 제공한다
  • C와 Java 등의 언어에서 각종 라이브러리/클래스 등을 이용할 수 있다

Web and HTTP

HTTP

HyperText Transfer Protocol

  • Web's application layer protocol
  • client/server model

HTTP uses TCP

  1. TCP 연결 설정
  2. 메시지 교환
  3. TCP 연결 해제

HTTP 1.0

  • 비지속 연결 = 각 요청마다 새로운 TCP 연결을 생성
  • RTT (Round Trip Time) : 요청을 보내고 응답을 받는데 걸리는 시간
    • RTT가 길어지면, 페이지 로딩 시간이 길어진다.
    • HTTP 1.0은 2 RTT + 데이터 전송 시간이 걸린다.

HTTP 1.1

  • 지속 연결 = 하나의 TCP 연결을 통해 여러 요청을 보낼 수 있다.
  • 파이프라이닝 = 여러 요청을 동시에 보낼 수 있다.
  • HTTP 1.1은 1 RTT + (1 RTT + 데이터 전송 시간) * 파일 수 만큼 걸린다.

HTTP Message

  • Request
  • Response
    • HTTP/1.1 200 OK
    • Date: Tue, 18 Feb 2020 15:00:00 GMT
    • Server: Apache/1.3.0 (Unix)
    • Last-Modified: Mon, 17 Feb 2020 15:00:00 GMT
    • Keep-Alive: timeout=15, max=100 (이게 지속 연결을 의미한다.)
    • Content-Length: 6821
    • Content-Type: text/html

HTTP Method

GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH, ...

HTTP Status Code

  • 1xx : Informational
  • 2xx : Success
  • 3xx : Redirection
  • 4xx : Client Error
  • 5xx : Server Error

Cookies

  • 원래 HTTP는 stateless protocol
  • 그래서 쿠키를 사용해서 상태를 유지한다.

근데 Cookie가 매우 중요한 서비스에 많이 활용되기 때문에 유출되면 큰 문제가 발생할 수 있다.

(현우 주) 그래서 보안을 위해 Secure, HttpOnly, SameSite, ...

Cache Server (Proxy Server)

  • 클라이언트가 요청한 데이터를 캐싱해서 저장해두고, 같은 요청이 오면 캐싱된 데이터를 보내준다.
  • 캐싱된 데이터가 변경되면, 캐시 서버는 변경된 데이터를 받아서 캐시를 업데이트한다.
  • 그리고 클라이언트에서도 캐시를 저장할 수 있다.

Conditional GET

  • 요건 304 이야기 (Not Modified)
  • If-Modified-Since : 이 날짜 이후로 변경된 데이터가 있으면 보내줘

💡
2024년 4월 3일 (수) 18:30 ~ 20:00

HTTP/2

  • 기존 HTTP/1.1의 경우에는 예를 들어 10개의 패킷을 받아야할 때 동시에 (multiple, pipelined) GET이 가능하다.
  • 그리고 10개를 요청하더라도 그 순서가 보장된다. 그러나 문제도 있지...
  • Head-Of-Line Blocking : 10개 중에 하나가 늦게 오면, 그 뒤에 있는 것들도 다 늦게 온다.
  • TCP는 손실을 허용하지 않음. 그러나 FCFS 이슈가 있어서, Loss Recovery가 되도록 만들었다.

HTTP/2 (RFC 7540)

  • HTTP/1.1에서 사용하던 Method들도 그대로 사용한다.
  • 클라이언트가 요청을 보낼 때 Priority를 지정해서 보내면, 우선순위에 따라 패킷이 내려온다.
  • push unrequested objects to client
  • HOL Blocking 문제를 해결하기 위해, 큰 패킷을 잘게 쪼개서 (divide) 보낸다.

Head of Line Blocking


그리고 HTTP/2는 보안에 대한 고려가 되어 있지 않기 때문에 TLS를 붙여서 사용한다.

HTTP/2 to HTTP/3

HTTP/1.1 버전에서 브라우저가 여러개의 TCP 연결을 열어서 요청을 보내는데, 이런 식으로 HTTP/1.1의 문제점을 보완하려고 했다.

하지만 그것은 브라우저 자체의 기능이기 때문에 HTTP/2에서는 이를 해결하기 위해 다른 방법을 사용했다.

그리고 HTTP/3...


HTTP/3는 보안을 좀 추가하고, UDP를 사용한다. => QUIC (Quick UDP Internet Connections)

QUIC은? 보안 문제를 해결해준다. 그리고 UDP를 사용하기 때문에 속도가 빠르다. 그런데 이제 또 다양한 기능들도 많이 들어가있고...

HTTP/3 = HTTP/2 + QUIC

E-mail (SMTP, IMAP, POP3)

  • SMTP (Simple Mail Transfer Protocol) : 메일을 보내는 프로토콜 - 내 메일서버에서 상대방의 메일서버까지 밀어내는 역할
  • IMAP (Internet Message Access Protocol) : 메일을 읽는 프로토콜 - 수신자가 자신의 메일서버로부터 메일을 끌아오는 역할
  • POP3 (Post Office Protocol) : 메일을 읽는 프로토콜 - 수신자가 자신의 메일서버로부터 메일을 끌어오는 역할

  • E-mail의 3가지 컴포넌트
    • user agents (ex. Outlook, Thunderbird, ...)
    • mail servers (ex. gmail, ...)
    • simple mail transfer protocol (SMTP)

MIME (Multipurpose Internet Mail Extensions)

  • MIME는 이메일을 보낼 때, 텍스트 이외의 데이터를 보낼 수 있게 해준다.
  • 왜 필요한가? SMTP는 최초에 텍스트(7-bit ASCII)만을 보낼 수 있게 설계되었기 때문에, MIME를 사용해서 이를 보완한다.

DNS (Domain Name System)

  • distributed database implemented in hierarchy of many name servers

규모/용량/운영/안전성 -> 분산된 계위 구조의 데이터베이스로 구현


DNS Records

  • A : name -> IP
  • MX : name -> mail server
  • NS : name -> authoritative name server
  • CNAME : name -> canonical name
  • PTR : IP -> name

DNS Zone

동일한 도메인 이름을 가진 컴퓨터들의 집합


nslookup을 사용해서 DNS 정보를 확인할 수 있다.

💡
2024년 4월 17일 (수) 18:30 ~ 20:00

DNS Security

DDoS attacks

  • Root server : 공격한다고 해도 안 통했음
  • TLD server : 잠재적인 위험이 있음

Spoofing attacks

  • Intercept DNS queries
  • DNS cache poisoning
  • How to prevent?
    • DNSSEC (DNS Security Extensions) - RFC 4033

Socket Programming

Socket : Door between application process and end-end-transport protocol

이 때 Transport Layer Protocol은 TCP, UDP 중 하나를 사용한다.


  • Python으로 UDP Server를 만들고, Client 코드를 만들어서 서로 통신한다. (using socket library)
  • 반면 TCP는? 먼저 Connection을 수립하고 데이터를 주고받는다. 그런데 중요한 것은 connectionSocket이라는 것을 사용한다. (Connection Socket을 만들고, 연결하고, 끝나면 close)

중간고사 대체과제

Wireshark 실습

  • 사캠에 올려둔 pdf 파일을 가지고 wireshark 실습을 해보자.
  • 1번부터 5번까지가 있고, 각각의 문제를 풀어서 제출하면 된다.