애플리케이션 계층은 웹이나 이메일과 같은 서비스를 제공하는 계층이다.
각 서비스는 자신만의 독자적인 프로토콜을 가지고 있다.
애플리케이션 계층은 사용자가 직접 사용하면서 체감할 수 있는 서비스를 제공한다.
프로토콜 | 동작 방식 |
---|---|
HTTP | 웹 클라이언트와 웹 서버 사이에서 웹 페이지 데이터를 주고 받는다. |
POP, SMTP, IMAP | 메일을 송수신하고 보관한다. |
SMP,AFP | LAN 안에서 파일을 공유한다. |
프로토콜 | 동작 방식 |
---|---|
DNS | 도메인명과 IP어드레스의 정보를 서로 변환할떄 사용한다 |
DHCP | LAN 내의 컴퓨터에게 IP 어드레스를 할당할 때 사용한다 |
SSL/TLS | 통신 데이터를 암호화하여 주요 정보를 안전하게 주고받을 때 사용한다 |
웹 브라우저가 웹 서버로 특정 웹 페이지를 요청하면 웹 서버가 해당 페이지의 내용을 HTML 형식으로 응답한다.
클라이언트와 서버로 전송하는 메시지를 요청(request), 이에 대한 답으로 서버에서 클라이언트 측으로 전송하는 메시지를 응답(response)라고 한다
Request line (GET, POST, HEAD)
Header line ( 응답 결과에 대한 메시지가 들어 있음)
data
HTTP는 상태를 저장하지 않는다. 이러한 상태를 저장하지 않는 통신 형태를 stateless라고 한다. 상태를 유지하기 위해서는 쿠키를 사용한다. HTTP 쿠키는 서버가 사용자의 웹 브라우저에 전송하는 기록 정보 파일을 의미함. 상태가 없는 HTTP에서 브라우저는 쿠키 정보를 기록하여 동일한 서버에 재요청 시 저장된 쿠키 정보를 같이 전송한다. 서버는 이를 확인하고 각 요청이 동일한 사용자가 보낸 것인지 다른 사용자가 보낸 것인지 판단할 수 있다.
client : http 리퀘스트를 만들 때 쿠키가 없으면 일반적인 http request
server : cookie에 클라이언트 정보 저장 http request 필드에 기록
클라인트와 서버 사이에서 요청을 대신 처리해주는 것
클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해준다. 보안상의 이유 등으로 직접 통신할 수 없는 경우 사용됨
프록시 서버는 서버에 요청된 내용들을 캐시를 이용하여 저장한다. 프록시 서버에 요청된 내용들을 캐시를 이용하여 저장하면 전송 시간도 절약할 수 있고 동시에 불필요하게 외부와의 연결을 하지 않아도 된다.
HTTP request msg
if modified-since
조건에 따라서 GET
프록시에서 일관성 문제를 해결하는데 사용될 수 있다.
프록시에서 서버에 요청할때 conditional GET를 사용하면 주기적으로 버전확인을 할 수 있다.
호스트 네임에 해당하는 IP 주소를 저장해놓은 것
사람이 읽을 수 있는 도메인 이름을 머신이 읽을 수 있는 주소로 변환한다.
전화 번호부라고 생각하면됨
하나의 서버에 저장하면 ??
따라서 분산화, 계층화 시킴
어떤 도메인 주소를 물어봤을 때 재귀적으로 순환하며 찾을 때 까지 반복한다.
Top-level domain (TLD)
네트워크를 운영하는 각 기관은 자신의 authoritative DNS server를 운영해야한다.
authoritative DNS server란 도메인 네임에 대한 정보를 갖고 있으면서, 해당 도메인 네임에 해당하는 IP 주소를 갖고 있는 서버를 말한다.
각 기관이 보유하고 있는 도메인에 대한 호스트 매핑에 대한 문제를 책임지고 관리해야한다.
각 네트워크 기관들이 네트워크 캐시처럼 내부에서 요청하는 쿼리들을 캐싱해놓은 것
매번 순환하며 찾으면 비효율적이기 때문에 자주 쓰는 도메인 네임 주소를 저장해놓는다.
내부 사용자들은 로컬 서버에 물어보고 없으면 나감
RR format : (name, value, type, ttl)
type = A
어떤 호스트의 아이피 주소
type = NS
어떤 도메인을 관리하는 호스트의 네임서버
DNS에서 왔다 갔다 하는 데이터의 크기는 작음
유실될 가능성도 작고 유실돼도 손해가 적음
DNS는 결국 준비 과정
IP 주소 : 포트 번호
OS에서 제공하는 API로 어플리케이션 계층과 네트워크 계층 사이의 인터페이스 역할을 한다.
creation setup
establing a connection
seding and receiving data
tearing down a connection
socket (int domain, int type, int protocol)
socket의 id 값이 리턴됨
type : tcp 인지 udp 인지
bind
socket id 값을 이용해서 특정 port에 바인딩
listen
accept(int sockfd, struct sockaadr* cliaddr, int* addrlen)
클라이언트로부터 연결 될 때 까지 blocking
두번째 인자로 클라이어언트의 IP 주소와 포트번호를 저장
새로운 소켓 아이디를 리턴
blocking 없이 바로 연결
전통적으로 3가지 컴포넌트
참고
http://www.kocw.net/home/cview.do?mty=p&kemId=1169634
https://yoeubi.github.io/network/Frontend-TCP-IP-2
https://hwan-shell.tistory.com/320
https://yunyoung1819.tistory.com/9