본문 바로가기
네트워크

컴퓨터네트워크 2. 응용계층

by MiaCoder 2024. 4. 15.

네트워크 애플리케이션 

서로 다른 end system애소 동작하는 것을 목표로 한다.

network core장비는 애클리케이션을 동작시키지 않음

 

서버

항상 호스트에 존재함

고정Ip를 가지고 있음

 

클라이언트

서버와 통신함

간헐적으로 연결됨

가변IP를 가짐

클라이언트끼리 직접통신하지 않음

 

peer to peer

서버에 의존하지 않음

end system끼리 직접 통신

peers는 다른 peers로 부터 서비스를 요청하고, 다른 peers에게 답례로 섭스를 제공함(토렌트와 유사)

서로 간헐적 연결, IP주소 교환

 

프로세스

호스트내에서 동작하는 프로그램

client process통신을 초기화하는 프로세스

server프로세스 접속을 기다리는 프로세스

p2p는 둘 다 가짐

 

Sockets 프로세스는 소켓으로 메시지을 송수신함

송신하는 쪽, 수신하는 쪽 모두 소켓을 가지고 있음

프로세스는 앱 개발자에 의해 제어됨

전송계층 부터는 os의해 제어

 

프로세스 주소 배정

메시지를 주고받기 위해서는 프로세스가 주소를 가지고 있어야함

IP주소와 포트넘버 2가지를 사용함

IP주소만 사용할 경우 한 호스트 내 여러 프로세스가 있을 경우 문제가 생김

 

애플리케이션이 이용 가능한 transport서비스

데이터 무결성 신뢰성 있는 데이터 전송, 파일 전송 등

시간 일부 서비스는 저지연을 필요로함, 스트리밍 등

처리율  서비스를 이용하기 위한 최소한의 처리율

보안 

 

TCP

송신과 수신 프로세스 사이에 있는 신뢰성 있는 전송

흐름제어 송신호스트의 전송송도 조절

혼잡제어

연결지향 클라이언트, 서버 프로세스간 전송제어정보를 교환함

시간,최소처리율, 보안 지원 안함

이메일, 파일전송 등

 

UDP

송수신 프로세스바이의 신뢰성 없는 전송

신뢰성, 흐름제어, 호잡제어 , 시간, 처리율, 보안 등 지원안함

신뢰성이 크게 중요하지 않은 경우 사용

인터넷 전화 등

 

TCP, UDP는 암호화하는 과정이 없음

전송계층의 TLS을 사용하여 암호화된 TCP를 사용 가능

데이터무결성 가능, 인증절차 가능

 

소켓 주소

AF_UNIX 하나의 호스트 내부 통신

사용하는 주소는 파일 시스템 경로명을 기반으로 함

 

AF_INET 인터넷(서로 다른 호스트) 통신

Ip주소와 포트번호를 조합하여 소켓주소를 표현함

 

통합주소체계

소켓 주소가 표현방식이 다른 구조체에서 사용되기 위해 일반 구조체 하나로 정의할 필요가 있음

구조체로 형변환하여 문법의 통일성을 유지함

htonl 일반 pc에서 네트워크로 내보내기 위해 형변환

 

빅엔디안

큰 단위부터 메모리에 적는 방식

헤더를 사용하기 편해 네트워크에서 많이 사용

 

리틀엔디안

작은단위부터 메모리에 적음

일반 pc에서 많이씀

연산 빠름

 

소켓서비스 유형

SOCK_STREAM

인터넷에서 TCP에 대응

SOCK_DGRAM

인터넷에서 UDP에 대응

 

소켓 기본 함수

socket()

데이터를 전송하는 소켓을 생성할 떄 호출하는 함수

성공적으로 생성하면 소켓 디스럽터를 반환함

#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol); // 이런 식으로 도메인, 타입을 넣는다

//예시
sd = socket(AF_UNIX, SOCK_STREAM, 0); //유닉스 주소체계 TCP서비스
sd = socket(AF_INET, SOCK_DGRAM, 0);  // 인터넷 주소체계 UDP 서비스

 

bind()

socket()함수를 생성하면 디스트럽터가 반환됨, 이 디스트럽터를 통해 상대와 통신하려면 먼저 생성된 주소를 부여해야함

이때 bind()가 소켓에 주소를 부여함

이후 connect, accept을 연결할 . 때소켓주소를 사용

즉 통신을 위한 주소를 부여하는 함수다

int bind(int s, const struct sockaddr *name, socklen_t *namelen);
// s는 sock로부터 나온 소켓 디스트림터 번호, name은 바인딩할 소켓 주소, namelen은 주소의 크기

 

htonl()

htons()

데이터 송신 시 개별 컴퓨터 바이트 순서를 네트워크 바이트 순서로 변환

ntohl()

ntohs()

데이터 수신 시 네트워크 바이트 순서를 개별 컴퓨터 바이트 수너로 변환

unit32_t htonl(unit32_t hostlong);
unut16_t htons(unit16_t hostshort);
// 개별 컴퓨터를 네트워크로

unint32_t ntohl(unit32_t, netlong);
unut16_t ntohs(unit16_tm netshort);

 

listen()

서버 프로세스에서 실행

클라이언트의 요청을 듣는 역할

보통 연결형 서비스에만 쓴다

int listen(int s, int backlog);
// s는 연결 요청 개수, backlog는 보통 5를 씀

 

 

accept()

연결형 서비스를 지원하는 서버가 클라이언트 요청을 받으려면 accept()에서 대기해야함

클라이언트의 connect() 요청이 발생 시 연결이 설정됨

연결요청 발생 . 시연결이 설정됨, addr에 클라이넡으 주소 반환, 어느 클라이언트가 요청했는지 . 알 수 있음

int accept(int s, struct sockaddr *addr, socklen_t * addrlen);

이 때 기존 socket함수로 생긴 소켓과 별도의 소켓이 생성됨.(기존은 연결 요청을 받는 목적으로만 사용)

새로 생긴 socket의 디스크립터는 accept()함수의 반환값으로 설정

 

connect()

클라이언트가 서버에 요청할 때 사용함

int connect(int s, const struct sockaddr * name, socklen_t namelen);
//요청을 원하는 서버 프로세스의 소켓주소를 표기한다

 

클라이언트의 주소

클라이언트는 자신의 주소를 알필요가 없으므로 bind()를 통한 주소를 생성하지 않는다

서버 주소를 사용한 임의 주소를 사용한다.

 

send()

connect()를 통해 소켓 연결까지 되면 send()를 통해 데이터 전송을 함

send() 연결형에서 사용

sendto() 비연결형에서 사용

ssize_t send(int s, const void *msg, size_t, int flags);
ssize_t sendto(int s, const void *msg, size_t len, ubt flags, 
				const struct sockaddr *to, socklen_t tolen);
                //tcp는 연결형이므로 주소 필요 없음
                //UDP는 매번 주소설정 필요

flags는 정상적으로 전송하면 0

 

recv() 연결형

recvfrom() 비연결형

ssize_t recv(int s, void *bufm size_t len, int flags);
//연결형, 주소설정 없음
//읽은 데이터는 buf에 저장

ssize_t recv(int s, void *bufm size_t len, int flags,
			struct sockaddr * from, socklen_t * formlen);
//비연결형 주소설정 있음
//읽은데이터는 buf에 저장

 

클라이언트와 서버의 동작

1. 서버는 다수의 클라이언트에 공개되는 자신의 소켓주소를 설정 후 클라이언트 연결 대기

2. 클라이언트의 요구에 따른 연결 설정, 제공서비스 시작

3. 여러 클라이언트에 의해 반복적으로 이루어짐

 

연결형 서비스의 동작

서버

socket소켓생성

bind    주소정보를 소켓에 전달

listen.  클라이언트 대기큐 지정

accept 연결요청 대기

send/recv 데이터 송수신

close

 

클라이언트

socket 소켓생성

connect 서버에 연결요청

send/recv 데이터 송수신

close 소켓 닫음

 

 

비연결형 서비스의 동작

연결형애서 listen, connect, addept가 없다

 

'네트워크' 카테고리의 다른 글

네트워크 6.  (1) 2024.04.18
네트워크 5. 전송 계층  (0) 2024.04.16
컴퓨터네트워크 4. DNS, P2P,CDN  (0) 2024.04.15
컴퓨터 네트워크 3. 애플리케이션 계층  (1) 2024.04.15
컴퓨터네트워크 1. 기초  (0) 2024.04.14