1주차
IPC 통신 - 프로세스끼리 통신(전기신호를 주고받는것)
IPC 통신 중에서도 소켓을 집중해서 보자
서로 다른 컴퓨터의 프로세스끼리 정보를 주고받기 위해서는
네트워크 상에서 컴퓨터를 식별하기 위해 IP주소,
어느 프로세스로 보낼 지를 알기 위해서 포트번호가 필요하다
백엔드에서는 tcp 전송을 사용한다
IPC(프로세스간 통신)을 위해서는
하드웨어를 무조건 거치고, 프로세스가 직접 하드웨어를
쓰지 않고 시스템 콜을 통해(os를 거쳐서 요청을 해서)
하드웨어를 직접 사용하지 않고 작업을 안전하게 수행한다
!여기서 프로세스가 서로 다른 컴퓨터에 잇을때 통신을 하면
네트워크 통신을 하는것
tcp, ip 등도 프로세스이고 시스템 콜이나 운영체제 자체 함수를
사용한다
네트워크에서 인터페이스 - 어려운 것을 대신 해주는 느낌
데이터 송신 과정에서 os를 사용을 할때 소켓이라는
인터페이스를 쓰고, 소켓을 소켓 시스템 콜을 통해서 사용함
TCP 소켓과, UDP 소켓이 있고 TCP 소켓을 주로 사용한다
소켓에 있는 시스템 콜은 클라와 서버 쪽이 다르다
socket 프로토콜,
socket(domain, type, protocol ); <- 도메인은 ipv4/ipv6 중에 선택, 타입은 stream/datagram 중에 선택, protocol은 숫자로 0 - 시스템이 6 - tcp, 17 - udp이다
socket(AF_INET, SOCK_STREAM, 0); <- ipv4 도메인, stream 소켓, 시스템이 프로토콜을 선택함
리눅스에서는 모든 것을 파일로 취급하고 소켓도 파일로 취급한다
write,read등 시스템 콜을 사용할때 파일 디스크립터(파일 식별)
을 이용해서 어떤 파일에 보내거나 받을지 정해준다.
결국 socket() 프로토콜은 어떻게 사용할지 틀을 만들어주는 기능을 한다
bind 시스템 콜
bind(sockfd, sockaddr, socklen_t)
bind 시스템 콜로 네트워크 통신을 위한 ip주소와 포트번호를 지정해줌
클라 서버는 N : 1 로 이루어져있음
서버의 ip와 포트가 바뀌면 n개의 클라이언트가 서버를 못찾음
서버는 ip와 포트를 고정해야되기에 bind로 고정
listen() 시스템 콜 - 중요!
listen(sockfd, backlog)
tcp의 3-way handshake를 통해서 신뢰성 있는 연결지향적인 통신을 함
클라이언트와 서버는 N:1상태, 서버는 클라이언트의 요청을 기다리는 상태
listen 큐에서는 클라이언트가 연결 요청을 보내고 <- syn 패킷을 클라이언트가 전송
연결 요청이 온 후 대기를 무한정 할수 없기에 연결 요청들을 받아둘 백로그 큐를 만든다
결론 - listen 시스템콜을 통해서 tcp를 대기 상태로 만든다
accept 시스템 콜 - 매우 중요
accept(sockfd, sockaddr , socklen_t);
tcp는 listen() 시스템 콜로 대기 상태가 되고 클라이언트들의 요청이 쌓이면 백로그 큐에 담아 둔다
accept는 백로그 큐에서 연결 요청을(syn)을 빼내서 연결을 수립힌다
tcp 는 accept로 연결 요청을 받고
fork로 실제 통신에 대해서 응답을 하는 방법으로 분리되어있음
!accept 시스템 콜로 연결을 수립하고 accept 시스템 콜 다음에 3 way handshake의 나머지 2과정을 한다 - syn + ack와 ack를 한다
accept 시스템 콜 후에 멀티스레드를 통해서 3 way handshake의 나머지 2과정을 새로운 소켓을 생성해서 응답을 주게 된다
bind - listen 후에 부모 프로세스는 계속 accept로 연결 요청을 받고 자식 프로세스는 부모가 만든 소켓을 받아서 3way handshake의 나머지 2단계를 수행한다
2주차
2주차
aws에서 리전과 가용영역
// 필요한 선행지식
vpc를 이해하기 위해서 서브네팅, 라우팅, ip에 대한 이해
서브넷 - ip주소에서 네트워크 영역을 부분적으로 나눈 것, 서브넷 마스크를
이용해서 분리함
c클래스는 앞에 24비트는 네트워크id, 뒤에 8비트는 호스트 id
서브넷 마스크를 이용해서 원본 네트워크를 여러개의 네트워크로 분리하는 과정을 서브넷팅이라고 함
라우팅 - 네트워크의 연결을 담당하는 라우터가 목적지를 확인하고 빠르고 정확한 길을 찾아서 전달하는 것
출발지와 목적지의 네트워크 정보, 목적지로 가는 모든 경로와 최적 경로, 네트워크 상태를 확인하는 것들이 라우팅을 하기 위해 필요하다
효율적이라고 판단되는 경로를 모아둔 것이 라우팅 테이블
정적 라우팅과 동적 라우팅이 있음
ip - ipv4는 43억개 정도의 ip주소를 가질 수 있지만 고갈될 수 있다
하지만 사설 ip 개념을 이용해서 ip할당이 부족해지지 않았다
ip엔 공인/사설/고정/유동 4가지가 있다
고정 - 말 그대로 컴퓨터에 고정적으로 부여
유동 - 일정주기나 인터넷 접속시 사용중이지 않은 ip를 발급
공인 ip - 기관과 통신업체를 통해 제공받는 ip
사설 ip - 공유기에 연결된 네트워크 등에서 내부적으로 사용하는 ip
*공인 ip는 전 세계에서 유일, 사설ip는 하나의 네트워크 안에서 유일
공인 ip는 외부,내부 상관없이 접속하지만 사설ip는 내부에서만 접근 가능
nat(인터넷 주소 번역)을 통해서 사설 ip를 받아 공인ip로 바꾼 후 외부에 전달하는 방식으로 사용
cidr 표기법
203.230.7.0/24 ip에서는
네트워크 아이디는 203.230.7.0이고
할당 가능한 호스트는 2**8 -2 (맨 처음과 맨 끝은 뺀다) 254개
vpc - 사설 ip 주소를 가짐, 서브넷을 나눠서 자원을 배치, 사설 ip는 외부와 통신이 불가능하기에 자체적으로 보안 기능이 있음
vpc의 실제 사용 - vpc 자체에서도 서브넷을 나눠서 사용하게 된다
vpc도 다시 서브넷을 나누고 가용영역을 할당한다
아마존 vpc는 실제 네트워크과 다르게 5개의 ip를 호스트에 할당 불가능함
첫주소 - 서브넷의 네트워크 대역,마지막 주소 - 브로드캐스트 주소
위에 2개 이외에도 두번째는 vpc 라우터(중요!) -에 할당, 세번째는 아마존dns에 할당, 네번째는 나중을 위해서 쓰지말라고함..
vpc 라우터가 중요한 이유 - vpc 내부에서 서브넷으로 나눈 것들도 서로 다른 네트워크 대역이기때문에 vpc 내부 라우터가 있어야 vpc 내부 서브넷기리 통신이 된다
vpc와 외부 통신 - 기본적으로는 vpc에 할당된 사설ip는 외부와 통신이 안되지만
public 서브넷 대역을 이용해서 외부와 통신 가능 - 가능한 이유는
서브넷이 aws의 인터넷 게이트웨이를 거치게 하면 외부와 통신이 가능
게이트웨이를 만들고 라우팅 테이블을 연결해서 서브넷이
게이트웨이를 거치고 나가게 되면 퍼블릭 서브넷이 되서 외부와 통신이 된다!
private subnet - 사설 ip대역은 보안성이 높고, ip주소 부족한것을 완화한다
포트포워딩 키워드 - 하나의 공용 ip 를 가진 공유기가 자신의 포트를 통해 올바른 사설 ip주소를 가진 디바이스에 데이터를 주는 것
!소켓 포트와 포트포워딩 포트는 다른거다
2주차 주의깊게 볼것 - vpc에 내부적으로 라우터가 있어서 vpc 내부 서브넷끼리 통신이 된다!
3주차
/var/www <- html 파일등이 들어가는 위치
/etc/nginx/sites-available/default nginx <- 설정 파일 위치
sudo systemctl restart nginx <- nginx 설정 변경 후 재시작
클라이언트의 요청에 대해 적절한 데이터를 만들어주는 서버를 Web Application Server(WAS)
location /y{
root /x
}
y로 요청이 오면 x 위치에 잇는 파일을 줘라
웹서버, WAS 등을 쓰는 이유는?
리버스 프록시 - 내부에 다른 서버로 요청을 보냄
'대외활동 > 스터디' 카테고리의 다른 글
기술면접 스터디 선형 자료구조 준비 자료 (0) | 2023.04.05 |
---|