애플리케이션 계층은 netword edge에 있는 host들이 동작하는 계층으로 우리가 주로 사용하고 있는 서비스들이 동작하는 계층이다.
클라이언트 서버 아키텍쳐
(1) 서버
- 서버는 24시간 데이터를 제공해야하고
- 고유한 IP 주소를 갖는다.
(2) 클라이언트
- 서버와 통신하고
- 네트워크에 영구적으로 연결되어있지는 않는다.
- 동적인 IP 주소를 가질 수 있다.
애플리케이션에서 요구하는 전송 기능은 다음과 같은 것들이 있다.
- data integrity : 데이터 신뢰성
- timing : 적시성
- throughput : 처리량
- security : 보안
현재 전송 계층에서는(tcp) data integrity만 보장해주고 있다.
HTTP(Hypertext Transfer Protocol)
- tcp 기반의 애플리케이션 프로토콜
- request, response 메세지로 요청, 응답을 주고 받는다.
- 무상태성
- HTTP는 요청 응답 후에도 TCP 연결을 유지하는 persistent HTTP와 요청 응답 후 TCP 연결을 종료하는 non-persistent HTTP로 나뉜다.
- non-persistent HTTP는 연결을 유지하지 않기 때문에 요청 응답 마다 tcp 커넥션을 계속 새로 연결해야한다.
- 기본적으로 웹브라우저는 persistent HTTP를 사용한다.
Socket
OS에서 제공하는 Interface로 TCP, UDP와 같은 네트워크 통신을 위해 프로세스간 데이터 송수신을 지원한다.
SOCKET_STREAM
- TCP socket을 의미한다.
SOCKET_DGRAM
- UDP socket을 의미한다.
서버 SOCKET 생성 과정
- socket 생성
- 생성한 socket을 특정 포트(프로세스)에 bind
- 동시 요청 수를 설정하고 listen 상태로 진입 (non-blocking)
- 준비가 완료되면 client request가 들어올 때까지 accept 상태를 유지한다. (blocking)
클라이언트 SOCKET 생성 과정
- socket 생성 후 바로 connect
- 서버에 요청 송신
구현 코드
#include <studio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define PORT 3000
#define BACKLOG 10
main()
{
int sockfd, new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
if ((sockfd = socket(PF_INET, SOCKET_STREAM, 0) == -1)) //PF_INET 은 IPv4를 의미
{
perror("socket");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MTPORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror("listen");
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr*)&their_addr, &sin_size)) == -1)
{
perror("accept");
continue;
}
printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr))
}
}
'컴퓨터 사이언스 > 네트워크' 카테고리의 다른 글
네트워크 계층 - 라우팅 알고리즘 (0) | 2023.03.12 |
---|---|
네트워크 계층- IP (0) | 2023.03.09 |
전송계층 - TCP (0) | 2023.03.07 |
전송 계층 (0) | 2023.02.19 |
네트워크 구성 (0) | 2023.02.17 |
댓글