네트워크 5계층에서 제일 위 계층을 차지하고 있다.
어플리케이션이란 쉽게 생각하면 우리가 맨날 쓰는 프로그램들이다. 엔드시스템간의 통신으로 app이 만들어진다. 즉, 라우터 이런 부분은 신경 쓸 필요가 없다. 따라서 쉽게 만들어지고 쉽게 전파되고 쉽게 개선될 수 있다.
Client process – 커뮤니케이션을 시작하는 프로세스
Server process – 커뮤니케이션을 받는 프로세스
(P2P에서는 구분이 따로 없다)
하나의 통신이 이루어지려면 보내는쪽의 소켓, 받는 쪽의 소켓 총 2개의 소켓이 유지되어야 한다.
각 프로세스는 자기만의 소켓을 가지고 있다. 이때 소켓이 어떤 프로세스의 작업인지 알아야하는데 이는 포트넘버를 보고 구분한다. IP는 해당 라우터까지만 넣어준다.
포트넘버는 transport에서 담당하고 중요포트는 이미 정해져있다.
http : 80 smtp : 25 https : 443 ssh : 22
보통 응용프로그램은 1000번 이상을 쓴다
Message exchanged (request response)
Message Syntax 필드 관련 정의
Message Semantics 필드에서의 정보의 의미
유명 프로토콜들은 오픈 프로토콜이라 볼 수 있지만,
사설 회사 프로토콜들은 볼 수가 없다.
Data Integrity : 기계가 알아봐야 하는건 정확해야하지만, 음성같이 사람이 인식해야 하는건좀 널널해도 된다.
Timing : 지연시간, 몇몇 어플리케이션은 지연시간이 낮아야한다.
Throughput : 실시간으로 실행해야하는 프로그램도 있지만, 데이터를 좀 모았다가 틀어도 되는 방법도 있다.
혹은 보내는 관점에서 스루풋에 맞춰서 데이터 생성 후 전송하는것도 가능하다,
Security : 암호화,인증 및 데이터 강직성
저 위의 모든 기능이 없는 대신 빠르다
기본적으로 암호화를 제공하지 않는다.
Transport Layer Security 적용
SSL이 Application 과 TCP 사이에 있어서 이 과정을 통해서 암호화 및 복호화를 한다.
HTTP가 보내는 오브젝트는 크게 3가지이다.
HTTP는 TCP를 쓴다. 즉 loss를 허용하지 않는다.
1. 클라이언트가 소켓을 만들고 tcp로 서버에 커넥션을 만든다
2. 서버가 TCP 커넥션을 받는다
3. HTTP Message가 브라우저와 웹 서버와 교환된다.
4. 연결 종료
기본적으로 HTTP는 Stateless상태를 유지한다.
다만 Cookie를 가지고 브라우저에 접속 정보를 가지고 있다가 이 쿠키를 같이 보내서 맞춤형 정보를 제공할 수 있다
커넥션 유지가 가능하지 않았던 버전이다. 연결을 두번 해야하니깐 연결당 두개의 RTT가 필요했다.
즉, 2RTT + File Transmission이 비용으로 처리되었다.
커넥션이 끊어지지 않는다. 즉, 1회 연결 성공하면 close 전까지는 계속 connected 이다.
앞에서 보낸 요청들이 해결되지 않은 상태라고 할지라도 요청은 요청대로 계속 들어오고, 응답은 또 응답대로 계속 들어온다.
메서드 및 메시지는 생략하겠다.
HTTP는 기본적으로 stateless이나, 쿠키를 통해 클라이언트 상태를 기록할 수 있다. 다만 이 과정에서 보안취약점이 생기기도 한다.
서버이면서 동시에 클라이언트가 된다.
클라이언트가 보내준 req를 받아서 캐시 hit 한다면 res를 반환해준다. 만약 miss한다면 그 req를 원래 서버로 보내서 res해주고 해당 res를 저장해둔다.
Access Link Utilization = 1.5 / 1.54 = 97% -> 사실상 무한대라고 보면 된다.
랜 사용률 = 0.0015
End to End Delay
= Internet Delay + Access Link Delay + land Delay
= 2sec + minute + usec
라우터가 캐시서버 앞으로 가저오는건 2초지만, 그 위 institutional 네트워크로 가는 시간은 너무 오래 걸린다.
관문라우터는 기가랜이라 속도가 의미가 없다
만약 이 상황에서 링크 캐퍼시티를 100배 늘리면 Access Link Rate는 154Mbps가 된다.
이러면 시간은 1.5 / 154라서 마이크로 세컨단위로 내려가지만, 비용이 천문학적으로 들어간다
Cache hit rate = 40%라고 가정하자.
이때, 60%는 캐시서버 지나서 밖에 나갔다 와야함
0.6 * 1.50Mbps = 0.9Mbps만 나가면 된다
이러면 0.9 / 1.54 = .058 58% 아주 좋은 네트워크 비율이 된다.
End to end delay =
0.6 delay from origin server + 0.4 delay when cache hit
= (0.6 0.21) + (0.4 umsec) = 1.2 msec
154Mbps를 쓰는것보다 훨씬 저렴하게 구성할 수 있다.
If-modified-since 라는 헤더라인을 통해서 00날짜에 내가 최신 업데이트인데 이를 기준으로 변경이 있으면 정보를 보내달라는 요청임
여러 개의 오브젝트를 가지고 오는 것을 목표로 함
1.1 버전에서는 :
파이프라이닝으로 속도를 올렸음 대신 순서대로만 도착가능함 또한 multiple tcp connection을 사용함.
순서대로 보내기에 Head of Line blocking(앞이 막히면 뒤는 갈 수 있어도 못감) 문제가 생김, 패킷로스가 생기면 계속 대기해야함
2 버전부터는:
다만 TCP는 로스를 복구하려 하기때문에 여전히 지연이 발생하고 장애가 생긴다. 또한 TLS 보안문제가 여전히 남아있다.
3버전부터는 이러한 로스를 없애기 위해서 UDP통신방법이 대두되고 있다.
QUIC: QUICK UDP Internet Connection 프로토콜 개발
TCP의 장점을 살리면서 UDP의 속도를 가지려고 하다보니 결국 이 프로토콜을 개발해서 TCP의 쓰고싶은 장점들은 Application 계층에서 담당